标签:mariadb mysql linux 复制过滤 集群
1.复制中的过滤
有时候我们只需要slave仅复制有限的几个数据库或表,而非所有;
有两种实现思路:
(1)主服务器仅向二进制日志中记录有特定数据库相关的写操作;
问题:即时点还原将无法全面实现;
binlog_do_db= # 数据库白名单
binlog_ignore_db= # 数据库黑名单
(2)从服务器的SQL_THREAD仅在中继日志中读取特定数据相关的语句并应用在本地;
问题:会造成网络带宽和磁盘IO的浪费;
replicate_do_db=dbname#只复制某个库
replicate_ignore_db=dbname#不复制某个库
replicate_do_table=tablename#只复制某个表
replicate_ignore_table=tablename#不复制某个表
replicate_wild_do-table=tablename%#只复制某些表(可用匹配符)
replicate_wild_ignore_table=tablename%#不复制某些表
设置方法:
setglobal replicate_do_db=testdb;
或加到my.cnf [mysqld]中
注意:
使用replicate_do_db和replicate_ignore_db时有一个隐患,跨库更新时会出错。
例1:
如设置replicate_do_db=test
usemysql;
updatetest.table1 set ......
第二句将不会被执行
例2:
如设置replicate_ignore_db=mysql
usemysql;
updatetest.table1 set ......
第二句会被忽略执行
原因是设置replicate_do_db或replicate_ignore_db后,MySQL执行sql前检查的是
当前默认数据库,所以跨库更新语句被忽略。
可以使用replicate_wild_do_table 和 replicate_wild_ignore_table 来解决跨库更新的问题,
如:
replicate_wild_do_table=test.%
或
replicate_wild_ignore_table=mysql.%
这样就可以避免出现上述问题了
2.复制的监控维护
清理日志:PURGE
复制监控
SHOW MASTER STATUS #查看主服务器状态信息
SHOW SLAVE STATUS #查看从服务器状态信息
SHOW BINLOG EVENTS #查看处于由mysqld维护状态中的二进制日志文件信息
例:show binlog events in ‘mysql-bin.000001‘ from 351 limit 2;
SHOW BINARY | MASTER LOGS #查看所有的二进制日志文件
如何判断slave是否落后于master
show slave status\G;中有一项
Seconds_Behind_Master: 0
如何确定主从节点数据是否一致?
创建表createtable的时候有一个选项 checksum,如果启用了就可以通过表自身的 CHECKSUM检查,show tablestatus\G查看,这个项的内容主从服务器要一致
使用percona-tools中pt-table-checksum
数据不一致的修复方法:
重复复制;
跟复制功能相关的文件:
master.info:用于保存slave连接至master时的相关信息(只有从服务器上才有);
relay-log.info:保存了当前slave节点上已经复制的当前二进制日志和本地relay log日志对应关系(只有从服务器上才有);
标签:mariadb mysql linux 复制过滤 集群
原文地址:http://dengxi.blog.51cto.com/4804263/1732638