mysql过滤复制思路详解
短信预约 -IT技能 免费直播动态提醒
mysql过滤复制
两种思路:
- 主库的binlog上实现(不推荐,尽量保证主库binlog完整)
- 从库的sql线程上实现
所以主从过滤复制尽量不用,要用的也仅仅在从库上使用,因为要尽可能保证binlog的完整性
主库上实现
在Master 端为保证二进制日志的完整, 不使用二进制日志过滤。
主库配置参数:
#配置文件中添加
binlog-do-db=db_name #定义白名单,仅将制定数据库的相关操作记入二进制日志。如果主数据库崩溃,那么仅仅之恢复指定数据库的内容,不建议在主服务器端使用,这样导致日志不完整。
binlog-ignore-db=db_name #定义黑名单, 定义ignore 的库上发生的写操作将不会记录到二进制日志中
从库上实现
可以下载配置文件中
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)
#将源数据库的db1发生的语句重写到从库的db2
CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB = ((db1, db2));
语法:
官网语法参考:https://dev.mysql.com/doc/refman/5.7/en/change-replication-filter.html
CHANGE REPLICATION FILTER filter[, 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)
}
#从库实现过滤复制
stop slave sql_thread;
change replication filter replicate_do_db=(db);
start slave sql_thread;
#取消过滤复制
stop slave sql_thread;
change replication filter replicate_do_db=();
start slave sql_thread;
一些问题
主库删除某个表,从库没有这个表,导致从库sql线程关闭
或者主从正常,从库不小心删除某个表,主库随后再删除这个表,从库又会去删除这个不存在的表,报错,导致sql线程退出
解决方法:跳过这一步操作
解决方案:从库sql线程跳过误操作的步骤
stop slave sql_thread;
#找到Executed_Gtid_Set执行到19
set gtid_next='94fc1fbe-b7a0-11eb-b0a0-000c2969aba1:20'; 将gtid分配给下一个事务
begin;commit;
set gtid_next=automatic; 系统自动分配gtid
start slave sql_thread;
到此这篇关于mysql过滤复制思路详解的文章就介绍到这了,更多相关mysql过滤复制 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341