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.在从库查询验证是否正确,经验证配置正确。

     

  • 相关阅读:
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    你会卖掉自己的网上信息吗?大数据可能根本不属于你
    机器学习——TensorFLow实战房价预测
    数据库运作实践三三之歌(秘制口诀)
    1000行MySQL学习笔记,收藏版!
    吐血整理深度学习入门路线及导航【教学视频+大神博客+书籍整理】+【资源页】(2019年已经最后一个月了,你还不学深度学习吗???)
    Ubuntu Snap 简述
    参数传递
  • 原文地址:https://www.cnblogs.com/yg_zhang/p/5914824.html
Copyright © 2011-2022 走看看