MySQL主从复制环境中新增数据库的操作咨询
MySQL主从复制环境中新增数据库的操作咨询
嘿,我来帮你梳理下这个问题的解决方案,不用太担心停服务的事儿~
首先明确告诉你:不需要停止主从服务器,可以通过修改配置文件+重载服务的方式让新配置生效,甚至还能结合动态设置快速生效,下面分主库和从库给你一步步说:
主库操作步骤
- 先在主库上创建
database4(如果还没建的话):CREATE DATABASE database4; - 找到主库的MySQL配置文件(比如
/etc/mysql/my.cnf或者/etc/mysql/mysql.conf.d/mysqld.cnf,不同系统路径可能有差异),在现有binlog_do_db配置后面新增一行:binlog_do_db = database4 - 重载MySQL服务让配置生效——这个操作不会中断现有连接,完全不用停服务:
- 如果你用的是systemd系统(比如Ubuntu 16.04+、CentOS 7+):
sudo systemctl reload mysql - 要是是sysvinit系统:
sudo service mysql reload
- 如果你用的是systemd系统(比如Ubuntu 16.04+、CentOS 7+):
- 验证配置是否生效:你可以在
database4里创建一张测试表,然后查看主库的binlog日志,确认这个操作被记录进去了;或者执行SHOW VARIABLES LIKE 'binlog_do_db';,不过要注意,这个命令只会显示最后一条binlog_do_db配置,但实际所有配置的库都会被记录binlog,所以看实际操作的同步情况更准确。
从库操作步骤
- 先在从库上创建
database4(避免主库同步操作过来时因为库不存在报错):CREATE DATABASE database4; - 同样修改从库的MySQL配置文件,新增一行:
replicate_do_db = database4 - 重载从库的MySQL服务:
sudo systemctl reload mysql - 重启复制线程,让新的复制规则生效:
STOP SLAVE; START SLAVE; - 验证同步效果:在主库的
database4里做个操作(比如插入一条数据),然后去从库的database4里查看是否同步过来,就知道配置生效了。
额外提醒
如果图省事,你也可以用动态设置的方式快速生效(比如主库执行SET GLOBAL binlog_do_db = 'database1,database2,database3,database4';,从库执行SET GLOBAL replicate_do_db = 'database1,database2,database3,database4';然后重启复制线程),但一定要同步修改配置文件,不然MySQL重启后,动态设置的规则会丢失,又回到原来的三个库。
另外,要是你的MySQL版本特别旧(比如5.5及更早),可能重载配置不生效,这时候才需要考虑重启,但现在大部分生产环境用的都是支持重载的新版本,所以不用太担心。
备注:内容来源于stack exchange,提问作者erwann le guevedec
相关产品推荐
相关产品推荐

