• ADADADADAD

    关于replicate_do_db和replicate_ignore_db的坑[ mysql数据库 ]

    mysql数据库 时间:2024-12-25 09:57:11

    作者:文/会员上传

    简介:

    介绍MySQL5.7官方文档关于相关参数的介绍:https://dev.mysql.com/doc/refman/5.7/en/change-replication-filter.html在5.7版本支持动态修改,之前的版本需要重启数据库:STOP SL

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

    介绍

    MySQL5.7官方文档关于相关参数的介绍:https://dev.mysql.com/doc/refman/5.7/en/change-replication-filter.html

    在5.7版本支持动态修改,之前的版本需要重启数据库:

    STOP SLAVE SQL_THREAD;CHANGE REPLICATION FILTER REPLICATE_IGNORE_DB=(demo);START SLAVE SQL_THREAD;
    问题描述

    在主库执行语句,如果不使用use db;
    创建新表的语句不会在从库执行,进而导致主从错误

    场景复现

    从库配置:

    replicate-ignore-db = testreplicate-do-db = abc

    主库操作:

    22:29:04test>use test;Database changed22:30:26test>create table abc.t0417(id int,name varchar(20));Query OK, 0 rows affected (0.08 sec)22:31:37abc>use test;Database changed22:32:05test>insert into abc.t0417 values(1,'a');Query OK, 1 row affected (0.02 sec)

    从库状态,SQL线程出现报错:

    22:31:07abc>show slave status \G*************************** 1. row *************************** Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.136.128Master_User: replMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000015Read_Master_Log_Pos: 8478 Relay_Log_File: cptest-relay-bin.000007Relay_Log_Pos: 1292Relay_Master_Log_File: mysql-bin.000015 Slave_IO_Running: YesSlave_SQL_Running: NoReplicate_Do_DB: abcReplicate_Ignore_DB: test Replicate_Do_Table:Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table:Last_Errno: 1146 Last_Error: Error executing row event: 'Table 'abc.t0417' doesn't exist' Skip_Counter: 0Exec_Master_Log_Pos: 8235Relay_Log_Space: 1709Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File:Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher:Master_SSL_Key: Seconds_Behind_Master: NULLMaster_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error:Last_SQL_Errno: 1146 Last_SQL_Error: Error executing row event: 'Table 'abc.t0417' doesn't exist'Replicate_Ignore_Server_Ids:Master_Server_Id: 1Master_UUID: 4ac80f6d-8063-11e7-9d63-000c291d913c Master_Info_File: /data/mysql/mysql3309/master.infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State:Master_Retry_Count: 86400Master_Bind: Last_IO_Error_Timestamp:Last_SQL_Error_Timestamp: 180416 22:32:20 Master_SSL_Crl:Master_SSL_Crlpath:Retrieved_Gtid_Set: 4ac80f6d-8063-11e7-9d63-000c291d913c:3609-3630Executed_Gtid_Set: 4ac80f6d-8063-11e7-9d63-000c291d913c:1:3609-3629,a1c747e9-4170-11e8-883f-000c29c6b279:1Auto_Position: 01 row in set (0.00 sec)
    解决问题

    更改从库配置:

    #replicate-ignore-db = test#replicate-do-db = abcreplicate_wild_do_table = abc.%replicate_wild_ignore_table = test.%

    主库操作:

    Welcome to the MySQL monitor.Commands end with ; or \g.Your MySQL connection id is 65Server version: 5.6.35-log Source distributionCopyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.caopeng@192.168.136.128 00:39:16(none)>use test;Database changedcaopeng@192.168.136.128 00:39:32test>create table abc.test0417(id int,name varchar(20));Query OK, 0 rows affected (0.17 sec)caopeng@192.168.136.128 00:40:25test>insert into abc.test0417 values(1,'b');Query OK, 1 row affected (0.11 sec)

    从库状态:

    root@localhost 00:39:06(none)>show slave status \G*************************** 1. row *************************** Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.136.128Master_User: replMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000015Read_Master_Log_Pos: 9644 Relay_Log_File: cptest-relay-bin.000010Relay_Log_Pos: 771Relay_Master_Log_File: mysql-bin.000015 Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB: Replicate_Ignore_DB:Replicate_Do_Table:Replicate_Ignore_Table: Replicate_Wild_Do_Table: abc.%Replicate_Wild_Ignore_Table: test.% Last_Errno: 0 Last_Error:Skip_Counter: 0Exec_Master_Log_Pos: 9644Relay_Log_Space: 945Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File:Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher:Master_SSL_Key: Seconds_Behind_Master: 0Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error:Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids:Master_Server_Id: 1Master_UUID: 4ac80f6d-8063-11e7-9d63-000c291d913c Master_Info_File: /data/mysql/mysql3309/master.infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it Master_Retry_Count: 86400Master_Bind: Last_IO_Error_Timestamp:Last_SQL_Error_Timestamp:Master_SSL_Crl:Master_SSL_Crlpath:Retrieved_Gtid_Set: 4ac80f6d-8063-11e7-9d63-000c291d913c:3609-3635Executed_Gtid_Set: 4ac80f6d-8063-11e7-9d63-000c291d913c:1:3609-3635,a1c747e9-4170-11e8-883f-000c29c6b279:1-6Auto_Position: 01 row in set (0.00 sec)root@localhost 00:40:54(none)>select * from abc.test0417;+------+------+| id | name |+------+------+|1 | b|+------+------+1 row in set (0.00 sec)
    总结使用replicate_do_db和replicate_ignore_db两个参数时在主库操作需要使用use db;然后再进行其他操作推荐使用replicate_wild_do_table,
    replicate_wild_ignore_table
    关于replicate_do_db和replicate_ignore_db的坑.docx

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

    推荐度:

    下载
    热门标签: ReplicateDodb