zoukankan      html  css  js  c++  java
  • MYSQL 基于GTID的复制

    1.概述

    从MYSQL5.6 开始,mysql开始支持GTID复制。

    基于日志点复制的缺点:

    从那个二进制日志的偏移量进行增量同步,如果指定错误会造成遗漏或者重复,导致数据不一致。

    基于GTID复制:

    1.从服务器会告诉主服务器已执行的事务的GTID值。

    2.主库会告诉从哪些GTID事务没有被执行。

    同一个事务在指定的从库执行一次。

    什么是GTID

    GTID即全局事务ID,器保证为每一个在主上提交的事务在复制集群中可以生成一个唯一的ID.

    GTID=source_id:transaction_id

    source_id:是主库的server UUID,在数据目录的auto.cnf 文件中。

    transaction_id: 从1开始的一个序列。

    2.基于GTID复制的步骤

    1.在主DB服务器上建立复制帐号。

    在主库执行命令

    create user repl@'192.168.31.%' identified by 'repl';

    grant all privileges  on *.* to repl@'192.168.31.%' identified by 'repl';

    2.配置主数据库服务器

    修改 /etc/my.cnf

    log_bin =on

    server_id=1001

    gtid-mode=on

    enforce_gtid_consistency:强制事务一致性,保证事务的安全

    注意如果使用了基于事务点日志配置下面两种情况不能使用:

      1.create table 。。select

      2.在事务中使用create temporary table 建立临时表,使用关联更新事务表和非事务表。

    3.配置从服务器。

    server_id=1002

    log_bin=on

    gtid-mode=on

    enforce-gtid-consistency

    建议配置

    read_only=on

    保证从服务器数据安全性

    master_info_repository=TABLE

    relay_log_info_repository=TABLE

    从服务器连接主服务器的信息和中继日志存放咱 master_info,和relay_log中。

    4.初始化从服务器数据。

    从主库导出数据

    mysqldump --single-transaction --master-data=2 --all-databases --triggers --routines --events -uroot -p  >all.sql

    可以使用 scp 命令将数据从主库机器copy 到从库:

    scp all.sql root@192.168.31.101:/jsaas 

    从库导入数据

    mysql -uroot -p  < all.sql

    5.启动基于GTID的复制

    change master to master-host=’主服务IP’,

    master_user=’repl’,

    master_password=’password’,

    master_auto_position=1

    change master to MASTER_HOST='192.168.1.106',
    MASTER_PORT=3308,
    MASTER_USER='repl',
    MASTER_PASSWORD='repl',
    master_auto_position=1; 

    可能报错的情况:

     @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty

    在命令行下执行命令:

    reset master;

    后重启mysql 服务。

    start slave;

    show slave status G;

    在启动slave时报错。

    ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository

    解决办法:

    reset slave;重置slave

    再启动 slave

    start slave;

    测试同步:

    1.在主库创建一张表,插入记录。

    2.在从库查询验证是否正确,经验证配置正确。

     

  • 相关阅读:
    阿里规范不建议多表Join,可这SQL要怎么写?
    SQL Server中的LEFT、RIGHT函数
    正则表达式的基本语法
    常用正则表达式
    开发中常用的正则表达式
    解读C#中的正则表达式
    wx.navigateTo、wx.redirectTo、wx.reLaunch、wx.switchTab和wx.navigateBack的区别
    强烈推荐一款图片无损压缩工具
    SQL提高查询效率的几点建议
    使用低版本的VS打开高版本项目的解决方案(以VS2008打开VS2010开发的项目为例)
  • 原文地址:https://www.cnblogs.com/yg_zhang/p/5914824.html
Copyright © 2011-2022 走看看