mysql如何在线修改主从复制选项
前言:
MySQL最常用的架构就是主从复制了,其实主从复制有很多选项,特别是在从库端,我们可以设置复制过滤,比如说忽略某张表或某个库。这些过滤选项都是可以在线修改而不用重启的。原来对这块了解不多,最近看了下相关资料,个人觉得这个功能还是很方便的,本篇文章会将这块内容分享给大家。
1.复制过滤参数介绍
首先我们要了解设置复制过滤的不同参数。复制过滤是在从库端设置的,可以只复制某些库或某些表,也可以忽略复制某些库或某些表。这些都是由不同参数控制的,下面简单介绍下不同参数的作用。
- REPLICATE_DO_DB:指定只同步某个库的数据
- REPLICATE_IGNORE_DB:忽略某个库的同步
- REPLICATE_DO_TABLE:指定同步某个表
- REPLICATE_IGNORE_TABLE:忽略某个表的同步
- REPLICATE_WILD_DO_TABLE:指定同步某些表,可以用通配符
- REPLICATE_WILD_IGNORE_TABLE:忽略某些表的同步,可以用通配符
- REPLICATE_REWRITE_DB:从库端替换库名
这些复制过滤参数还是很好理解的,只看名字就能大概了解该参数的作用。默认情况下,这些参数是都没有设置的,开启主从复制后从库端会默认同步全部从主库发来的数据。
2.修改复制过滤选项
当我们想临时调整从库的复制策略时,可以设置上述参数。我们可以将过滤参数写入配置文件然后重启从库即可应用,但这种方法需要重启实例,不做推荐。MySQL5.7版本可以进行在线设置复制过滤了。但是还是得停复制,不过不用重启实例了,方便进行临时性的调整。主要用到的是CHANGEREPLICATIONFILTER语句,下面就简单的测试一下:
#默认未设置复制过滤 mysql>showslavestatus\G ***************************1.row*************************** Slave_IO_State:Waitingformastertosendevent Master_Host:10.0.3.16 Master_User:repl Master_Port:3306 Connect_Retry:60 Master_Log_File:binlog.000004 Read_Master_Log_Pos:35198 Relay_Log_File:relay-bin.000002 Relay_Log_Pos:910 Relay_Master_Log_File:binlog.000004 Slave_IO_Running:Yes Slave_SQL_Running:Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno:0 Last_Error: Skip_Counter:0 Exec_Master_Log_Pos:35198 #设置忽略db1库的复制 mysql>STOPSLAVESQL_THREAD; QueryOK,0rowsaffected(0.00sec) mysql>CHANGEREPLICATIONFILTERREPLICATE_IGNORE_DB=(db1); QueryOK,0rowsaffected(0.00sec) mysql>STARTSLAVESQL_THREAD; QueryOK,0rowsaffected(0.01sec) mysql>showslavestatus\G ***************************1.row*************************** Slave_IO_State:Waitingformastertosendevent Master_Host:10.0.3.16 Master_User:repl Master_Port:3306 Connect_Retry:60 Master_Log_File:binlog.000004 Read_Master_Log_Pos:35198 Relay_Log_File:relay-bin.000002 Relay_Log_Pos:910 Relay_Master_Log_File:binlog.000004 Slave_IO_Running:Yes Slave_SQL_Running:Yes Replicate_Do_DB: Replicate_Ignore_DB:db1 Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno:0 Last_Error: Skip_Counter:0 Exec_Master_Log_Pos:35198 #主库创建db1测试从库是否同步 mysql>CREATEDATABASE`db1`DEFAULTCHARACTERSETutf8; QueryOK,1rowaffected(0.01sec) mysql>showdatabases; +--------------------+ |Database| +--------------------+ |information_schema| |db1| |mysql| |performance_schema| |sys| |testdb| +--------------------+ 6rowsinset(0.00sec) #查看从库状态 mysql>showdatabases; +--------------------+ |Database| +--------------------+ |information_schema| |mysql| |performance_schema| |sys| |testdb| +--------------------+ 5rowsinset(0.00sec) mysql>showslavestatus\G ***************************1.row*************************** Slave_IO_State:Waitingformastertosendevent Master_Host:10.0.3.16 Master_User:repl Master_Port:33061 Connect_Retry:60 Master_Log_File:binlog.000004 Read_Master_Log_Pos:35383 Relay_Log_File:relay-bin.000002 Relay_Log_Pos:1095 Relay_Master_Log_File:binlog.000004 Slave_IO_Running:Yes Slave_SQL_Running:Yes Replicate_Do_DB: Replicate_Ignore_DB:db1 Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno:0 Last_Error: Skip_Counter:0 Exec_Master_Log_Pos:35383 #取消复制过滤参数 mysql>STOPSLAVESQL_THREAD; QueryOK,0rowsaffected(0.01sec) mysql>CHANGEREPLICATIONFILTERREPLICATE_IGNORE_DB=(); QueryOK,0rowsaffected(0.00sec) mysql>STARTSLAVESQL_THREAD; QueryOK,0rowsaffected(0.01sec) mysql>showslavestatus\G ***************************1.row*************************** Slave_IO_State:Waitingformastertosendevent Master_Host:10.0.3.16 Master_User:repl Master_Port:3306 Connect_Retry:60 Master_Log_File:binlog.000004 Read_Master_Log_Pos:35383 Relay_Log_File:relay-bin.000002 Relay_Log_Pos:1095 Relay_Master_Log_File:binlog.000004 Slave_IO_Running:Yes Slave_SQL_Running:Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno:0 Last_Error: Skip_Counter:0 Exec_Master_Log_Pos:35383
上面我们简单演示了下使用CHANGEREPLICATIONFILTER语句在线修改复制过滤选项的方法,列举的那些过滤参数都可以使用该语句修改,不过要注意有些选项是互斥的。应该按照实际需求去设置合适的参数,下面给出官方文档中的示范语法:
CHANGEREPLICATIONFILTERfilter[,filter][,...] filter: REPLICATE_DO_DB=(db_list) |REPLICATE_IGNORE_DB=(db_list) |REPLICATE_DO_TABLE=(tbl_list) |REPLICATE_IGNORE_TABLE=(tbl_list) |REPLICATE_WILD_DO_TABLE=(wild_tbl_list) |REPLICATE_WILD_IGNORE_TABLE=(wild_tbl_list) |REPLICATE_REWRITE_DB=(db_pair_list) db_list: db_name[,db_name][,...] tbl_list: db_name.table_name[,db_table_name][,...] wild_tbl_list: 'db_pattern.table_pattern'[,'db_pattern.table_pattern'][,...] db_pair_list: (db_pair)[,(db_pair)][,...] db_pair: from_db,to_db
总结:
本篇文章介绍了如何在线更改复制过滤选项的方法,不同的过滤参数有不同的用途,如果你确实有需求要设置过滤参数,建议一定要进行全面测试,某些参数设置后可能影响到其他库表的复制。如果想永久生效,可以在线修改后再加入配置文件内,这样从库重启后还是生效的。
以上就是mysql如何在线修改主从复制选项的详细内容,更多关于mysql修改主从复制的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。