• ADADADADAD

    mysql GTID复制跳过复制错误的方式有哪些[ mysql数据库 ]

    mysql数据库 时间:2024-11-26 22:13:39

    作者:文/会员上传

    简介:

    1、从库执行了事务,主库执行语句时导致冲突:解决办法一:跳过错误(少数错误推荐)(1)停止slave进程(2)设置事务号,事务号从Executed_Gtid_Set事务号+1获取,即跳过当前执行完成的下

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    1、从库执行了事务,主库执行语句时导致冲突:

    解决办法一:跳过错误(少数错误推荐)

    (1)停止slave进程
    (2)设置事务号,事务号从Executed_Gtid_Set事务号+1获取,即跳过当前执行完成的下一条事务,在session里设置gtid_next,即跳过这个GTID
    (3)执行空事物
    (4)恢复自动事物号
    (5)启动slave进程

    mysql> STOP SLAVE;
    mysql> SET @@SESSION.GTID_NEXT= '8f9e146f-0a18-11e7-810a-0050568833c8:4';
    mysql> BEGIN; COMMIT;
    mysql> SET SESSION GTID_NEXT = AUTOMATIC;
    mysql> START SLAVE;

    解决办法二:重置master方法跳过错误(不推荐,因为需要执行reset master;如果其他节点记录有该实例的位点信息的话,切换时需要重新找位点)

    mysql> STOP SLAVE;
    mysql> RESET MASTER;
    mysql> SET @@GLOBAL.GTID_PURGED ='8f9e146f-0a18-11e7-810a-0050568833c8:1-4';
    mysql> START SLAVE;

    上面这些命令的用意是,忽略8f9e146f-0a18-11e7-810a-0050568833c8:1-4 这个GTID事务,下一次事务接着从 5 这个GTID开始,即可跳过上述错误。

    解决办法三:使用pt-slave-restart工具,忽略特定错误,(冲突较多时可以使用,建议保留relaylog核对事务),

    pt-slave-restart工具的作用是监视某些特定的复制错误,然后忽略,并且再次启动SLAVE进程(Watch and restart MySQL replication after errors)。

    pt-slave-restart工具原理初探
    1、检查版本信息和兼容性
    set autocommit=1
    SHOW VARIABLES LIKE 'wait\_timeout'
    SET SESSION wait_timeout=10000
    SELECT @@SQL_MODE
    SET @@SQL_QUOTE_SHOW_CREATE = 1/*!40101, @@SQL_MODE='NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION'*/
    SELECT @@SERVER_ID
    SHOW SLAVE STATUS
    SELECT CONCAT(@@hostname, @@port)
    SHOW VARIABLES LIKE 'version%'
    SHOW ENGINES
    SHOW VARIABLES LIKE 'innodb_version'
    SELECT @@GLOBAL.gtid_mode(是否开启GTID决定跳过事务的方式)
    SELECT @@GLOBAL.slave_parallel_workers AS threads(不支持并行复制)
    2、检查同步错误
    SHOW SLAVE STATUS;
    如果使用--error-numbers则检查Last_SQL_Errno:错误号,判断是否匹配;如果匹配继续进行,不匹配不做任何操作
    如果使用--error-text则检查Last_SQL_Error:报错内容,判断是否匹配;如果匹配继续进行,不匹配不做任何操作
    3、跳过事务
    SET GTID_NEXT='026b75e5-d99f-11e7-a343-000c29dc5f5c:2023';
    set autocommit=0;
    commit;
    set autocommit=1;
    SET GTID_NEXT='AUTOMATIC';
    START SLAVE;
    4、继续判断状态,如果还有报错继续2,3,4步骤
    SHOW SLAVE STATUS;

    mysql> show slave status\G
    *************************** 1. row ***************************
    Slave_IO_State: Waiting for master to send event
    Master_Host: 192.168.137.101
    Master_User: repluser
    Master_Port: 3307
    Connect_Retry: 60
    Master_Log_File: mysql-bin.000003
    Read_Master_Log_Pos: 3435
    Relay_Log_File: mysql-relay-bin.000016
    Relay_Log_Pos: 1026
    Relay_Master_Log_File: mysql-bin.000003
    Slave_IO_Running: Yes
    Slave_SQL_Running: No
    Replicate_Wild_Ignore_Table: passport.cooke,passport.user_token,sysbench_test.sbtest1,sysbench_test.sbtest_1
    Last_Errno: 1062
    Last_Error: Error 'Duplicate entry '9' for key 'PRIMARY'' on query. Default database: 'test'. Query: 'insert into backup_test (id,backup_que) values(9,'1_111')'
    Skip_Counter: 0
    Exec_Master_Log_Pos: 2856
    Relay_Log_Space: 2362
    Last_SQL_Errno: 1062
    Last_SQL_Error: Error 'Duplicate entry '9' for key 'PRIMARY'' on query. Default database: 'test'. Query: 'insert into backup_test (id,backup_que) values(9,'1_111')'
    Replicate_Ignore_Server_Ids:
    Master_Server_Id: 1013307
    Master_UUID: 026b75e5-d99f-11e7-a343-000c29dc5f5c
    Master_Info_File: mysql.slave_master_info
    Last_SQL_Error_Timestamp: 180504 11:58:07
    Retrieved_Gtid_Set: 026b75e5-d99f-11e7-a343-000c29dc5f5c:1004-2018
    Executed_Gtid_Set: 026b75e5-d99f-11e7-a343-000c29dc5f5c:1-2016,
    5f5c73b5-2768-11e8-9e7e-000c298bd943:1-2997,
    68be50a9-3ba1-11e8-a25d-000c298bd943:1-4
    Auto_Position: 1

    [root@vm102 yum.repos.d]# pt-slave-restart --user=mg -h227.0.0.1 -P3307 -p123qwe --error-numbers=1062
    2018-05-04T11:47:31 P=3307,h=127.0.0.1,p=...,u=mg mysql-relay-bin.000016 448 1062
    2018-05-04T11:47:31 P=3307,h=127.0.0.1,p=...,u=mg mysql-relay-bin.000016 737 1062

    [root@vm102 yum.repos.d]# pt-slave-restart --user=mg -h227.0.0.1 -P3307 -p123qwe --error-text="backup_test"
    2018-05-04T12:00:23 P=3307,h=127.0.0.1,p=...,u=mg mysql-relay-bin.0000161026 1062
    2018-05-04T12:00:24 P=3307,h=127.0.0.1,p=...,u=mg mysql-relay-bin.0000161315 1062

    参数解释:
    --slave-password=s Sets the password to be used to connect to the slaves
    --slave-user=s Sets the user to be used to connect to the slaves
    --sleep=i Initial sleep seconds between checking the slave ( default 1)
    --socket=s -S Socket file to use for connection=
    --password=s-p Password to use when connecting
    pt-slave-resetart -S./mysql.sock —error-numbers=1032
    --error-numbers=h Only restart this comma-separated list of errors
    --host=s-h Connect to host
    --user=s-u User for login if not current user

    mysql GTID复制跳过复制错误的方式有哪些.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: gtidmysql