mysql 复制参数replicate_do_db和replicate_ignore_db介绍

部署运行你感兴趣的模型镜像


主库:

binlog-do-db = test
binlog-do-db = lhrdb
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
binlog-ignore-db = performance_schema
binlog-ignore-db = mysql
binlog-ignore-db = sys


从库:

[mysqld]
server-id = 2
log_bin=E:\MySQL\mysql-advanced-5.6.21-win32\data\xpdblhr-bin
expire_logs_days=10
max_binlog_size = 100M
replicate_do_db=test
replicate_do_db=lhrdb
replicate_ignore_db=information_schema
replicate_ignore_db=performance_schema
replicate_ignore_db=mysql
replicate_ignore_db=sys




演示环境:

1.MySQL5.7.24 二进制安装包
2.master库和slave库都是全新的环境进行配置
3.MySQL开启gtid 并且指定具体的数据库进行同步库

maser 库my.cnf配置操作:

[root@VM_82_178_centos ~]# egrep 'server_id|log_slave_updates|gtid_mode|enforce_gtid_consistency|log_bin|binlog_format' /etc/my.cnfserver_id                           =1313306binlog_format                       =row                           
log_bin                             =/data/mysql7/binlog/mysql-bin                     
log_slave_updates                   =on                            gtid_mode                           =on                             enforce_gtid_consistency            =on
mysql -e "grant replication slave on *.* to novelrep@'192.195.1.228' identified by 'JuwoSdk21TbUser'; flush privileges;"
mysqldump -uroot -p'jianwuweirootmysql' --databases test01  test02 --set-gtid-purged=OFF -F --master-data=2 --single-transaction --events|gzip >/opt/juwo_$(date +%F).sql.gz

slave库my.cnf配置操作:

[root@localhost ~]# egrep 'server_id|log_slave_updates|gtid_mode|enforce_gtid_consistency|log_bin|binlog_format' /etc/my.cnfserver_id                           =2283306                       binlog_format                       =row                           
log_bin                             =/data/mysql/binlog/mysql-bin                     
log_slave_updates                   =on                            gtid_mode                           =on                             enforce_gtid_consistency            =on                             [root@localhost ~]#

##slave库上配置如下参数指定数据库进行同步,master库上不需要配置如下参数:

[root@localhost ~]# egrep 'replicate_do_db|replicate_ignore_db' /etc/my.cnfreplicate_do_db=test01replicate_do_db=test02replicate_ignore_db=test03replicate_ignore_db=information_schemareplicate_ignore_db=performance_schemareplicate_ignore_db=mysqlreplicate_ignore_db=sys

#####重启mysql服务:

[root@localhost ~]# gzip -d juwo_2018-12-15.sql.gz [root@localhost ~]# ll juwo_2018-12-15.sql -rw-r--r-- 1 root root 3936 12月 15 15:57 juwo_2018-12-15.sql[root@localhost ~]#

####导入数据到slave,然后change master to:

mysql  -e "source /root/juwo_$(date +%F).sql"
mysql -e "CHANGE MASTER TO MASTER_HOST='192.168.97.131',MASTER_PORT=3306,MASTER_USER='novelrep',MASTER_PASSWORD='JuwoSdk21TbUser',MASTER_AUTO_POSITION = 1;start slave;show slave status\G" |grep -i "yes"

到此处主从复制配置完成

参数replicate_do_db和replicate_ignore_db演示分析:

master库上操作:

root@localhost [mysql]>use mysql
Database changed
root@localhost [mysql]>grant all on test01.* to test01@'127.0.0.1' identified by '356893';
root@localhost [mysql]>select user,host from mysql.user where user='test01';
+--------+-----------+
| user   | host      |
+--------+-----------+
| test01 | 127.0.0.1 |
+--------+-----------+1 row in set (0.00 sec)

slave库上操作:

root@localhost [test01]>select user,host from mysql.user where user='test01';
Empty set (0.00 sec)
root@localhost [test01]>
空的没有被同步过来

master上操作:

root@localhost [mysql]>use test01;Database changedroot@localhost [test01]>grant all on test01.* to test02@'127.0.0.1' identified by '356893';Query OK, 0 rows affected, 1 warning (0.01 sec)

slave库上操作:被同步到slave库上了,但是咱们一开始在salve 上是设置的是不同步mysql库的

select user,host from mysql.user where user='test02';
+--------+-----------+| user   | host      |
+--------+-----------+| test02 | 127.0.0.1 |
+--------+-----------+1 row in set (0.00 sec)

master库上操作:

root@localhost [test01]>drop user test02@'127.0.0.1';Query OK, 0 rows affected (0.00 sec)root@localhost [test01]>select user,host from mysql.user where user='test02';Empty set (0.00 sec)root@localhost [test01]>

slave库上操作:看到slave库上的test02用户同时也被删除了

root@localhost [test01]>select user,host from mysql.user where user='test02';
Empty set (0.00 sec)

在master上操作删除一开始use切入mysql库创建的用户test01@'127.0.0.1'

root@localhost [test01]>drop user test01@'127.0.0.1';Query OK, 0 rows affected (0.01 sec)

在slave库上查看:同步报错
原因是:一开始use切入mysql库创建的用户test01@'127.0.0.1' 没有同步到slave库上,如果此时在master库上没有use切入到mysql库来执行删除用户的语句,由于slave上没有同步过来用户,自然master删除用户时,slave库上同步报错

Last_SQL_Errno: 1396
           Last_SQL_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction 'df8f817c-f215-11e8-83e4-525400950067:22' at master log mysql-bin.000001, end_log_pos 7734. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any.

解决办法就是在slave库上把这个用户创建出来:

root@localhost [test01]>grant  all on test01.* to test01@'127.0.0.1' identified by '123456';Query OK, 0 rows affected, 1 warning (0.01 sec)
**重启slave  sql_thread 线程**root@localhost [test01]>stop slave sql_thread;root@localhost [test01]>start slave sql_thread;
同步就ok了。

由此而得出如下结论:

在salve库上使用replicate_do_db和replicate_ignore_db参数进行过滤数据库同步时,此时在系统默认的mysql库上存在一个隐患,就是在master库上进行跨库update更新mysql库下的表或者是grant 进行mysql授权,以及drop user时,slave库上配置的忽略mysql库同步的参数失效。也就是master库上夸库操作mysql库下的表时,是会同步到slave库的。要是use切换到mysql库进行操作时,grant 进行授权,update 更新mysql库下的表,drop 删除时,这样的话master上对mysql库的操作是不会同步到slave上的mysql库中的。




About Me

........................................................................................................................

● 本文作者:小麦苗,部分内容整理自网络,若有侵权请联系小麦苗删除

● 本文在itpub( http://blog.itpub.net/26736162 )、博客园( http://www.cnblogs.com/lhrbest )和个人微 信公众号( xiaomaimiaolhr )上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文博客园地址: http://www.cnblogs.com/lhrbest

● 本文pdf版、个人简介及小麦苗云盘地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 数据库笔试面试题库及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA宝典今日头条号地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

........................................................................................................................

● QQ群号: 230161599 (满) 、618766405

● 微 信群:可加我微 信,我拉大家进群,非诚勿扰

● 联系我请加QQ好友 646634621 ,注明添加缘由

● 于 2019-07-01 06:00 ~ 2019-07-31 24:00 在西安完成

● 最新修改时间:2019-07-01 06:00 ~ 2019-07-31 24:00

● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

........................................................................................................................

小麦苗的微店 https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

小麦苗出版的数据库类丛书 http://blog.itpub.net/26736162/viewspace-2142121/

小麦苗OCP、OCM、高可用网络班 http://blog.itpub.net/26736162/viewspace-2148098/

小麦苗腾讯课堂主页 https://lhr.ke.qq.com/

........................................................................................................................

使用 微 信客户端 扫描下面的二维码来关注小麦苗的微 信公众号( xiaomaimiaolhr )及QQ群(DBA宝典)、添加小麦苗微 信, 学习最实用的数据库技术。

........................................................................................................................

欢迎与我联系

 

 



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26736162/viewspace-2650836/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26736162/viewspace-2650836/

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

### MySQL 复制中忽略特定表的配置 在 MySQL 主从复制配置中,`replicate-wild-ignore-table` 是一个非常重要的参数,用于指定从库(slave)需要忽略的特定表的数据复制。此参数通过通配符模式来定义哪些表的数据不应被复制到从库。它比 `--ignore-table` 更加安全可靠[^1]。 #### 参数说明 `replicate-wild-ignore-table` 的语法格式如下: ```sql replicate-wild-ignore-table=<database_name>.<table_pattern> ``` - `<database_name>`:指定数据库名称。 - `<table_pattern>`:指定表名的通配符模式,支持 `%` `_` 两种通配符。 - `%`:匹配零个或多个字符。 - `_`:匹配单个字符。 例如,如果希望忽略 `garbage` 数据库中所有表的数据复制,可以配置如下: ```sql replicate-wild-ignore-table=garbage.% ``` 需要注意的是,`replicate-wild-ignore-table` 的过滤规则是基于查询中实际涉及的表,而不是基于连接时使用的默认数据库[^2]。这意味着即使当前会话的默认数据库不是 `garbage`,只要查询涉及到 `garbage` 数据库中的表,这些操作也会被忽略。 #### 边缘情况与注意事项 尽管 `replicate-wild-ignore-table` 在大多数情况下能够正常工作,但仍可能存在一些边缘情况导致其失效。例如,当某些复杂查询涉及跨数据库操作时,可能会出现意外行为[^3]。因此,在配置该参数时,建议仔细测试并验证其效果。 此外,`replicate-wild-ignore-table` 的优先级高于其他复制过滤规则(如 `replicate-do-db` 或 `replicate-ignore-db`)。这意味着即使某个数据库被明确包含在复制范围内,但如果其中的表匹配了 `replicate-wild-ignore-table` 的模式,则该表的数据仍然会被忽略[^4]。 #### 示例配置 以下是一个完整的示例配置,展示如何在从库上设置 `replicate-wild-ignore-table`: ```sql [mysqld] replicate-wild-ignore-table=garbage.% replicate-wild-ignore-table=test.tbl_% ``` 上述配置表示: - 忽略 `garbage` 数据库中所有表的数据复制- 忽略 `test` 数据库中以 `tbl_` 开头的所有表的数据复制。 #### 验证配置 配置完成后,可以通过以下命令检查从库的状态,确保复制正常运行: ```sql SHOW SLAVE STATUS\G; ``` 重点关注以下字段: - `Slave_SQL_Running_State`:确认从库是否处于等待 I/O 线程更新的状态。 - `Last_Error`:检查是否有任何错误发生。 如果一切正常,从库将不会复制被忽略表的相关数据。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值