本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告
  • 首页
  • MySQL
  • MySQL主从复制(3)复制过滤的配置与跨库更新

MySQL主从复制(3)复制过滤的配置与跨库更新

发布:TangLu2018-11-23 18:22分类: MySQL 标签: mysql 主从复制 mysql主从

如果主服务器有很多个数据库,而从服务器并不需要全部复制的话怎么办?这里就需要用到MySQL的复制过滤器功能,主要用到以下选项:

主服务器二进制日志记录设置:

binlog_do_db:只对指定的数据库进行二进制日志的记录,多个数据库设置可以写多行

binlog_ignore_db:此选项中指定的数据库的操作将不做二进制日志记录

从服务器二进制日志记录设置(为了减轻压力,推荐在从服务器上做设置而不在主服务器设置):

replicate_do_db:数据库白名单列表,多个数据库用逗号分隔,该选项指定的数据库会执行主从复制操作

replicate_ignore_db:数据库黑名单列表,该选项指定的数据库将不会被复制

replicate_do_table:表级别的白名单

replicate_ignore_table:表级别的黑名单

replicate_wild_do_table:可以使用通配符进行指定表,如%代表所有

replicate_wild_ignore_table:同上

MySQL跨库更新问题:

如果Master服务器开启了binlog_do_db、binlog_ignore_db,Slave服务器开启了replicate_do_db和replicate_ignore_db选项会有跨库更新不同步的问题。原因是MySQL执行SQL语句时对当前数据库做检查,如果当前库没有在白名单里指定,那么就不会写入到二进制日志

看一个示例

1、首先在Master服务器上执行SQL语句:

USE   mysql2;    #切换到另一个库
INSERT  INTO  mysql1.table1 VALUES(2.'zhangsan');   #对第一个库的表做操作
SELCET * FROM  mysql1.table1    #查看内容,已经成功插入 


2、到从服务器上查看发现并没有同步

SELCET  *  FROM  mysql1.table1 


3、查看下Master的日志情况 

show  master  logs;    #查看日志记录情况
show  binlog  events  in  'master-bin.000003'    #查看第三个日志的内容,发现没有那条语句 


解决办法:

修改Slave的my.cnf配置文件,把replicate_do_db和replicate_ignore_db选项修改为replicate_wild_do_table和replicate_wild_ignore_table,使用表级别的主从复制不会受到垮库影响

replicate_wild_do_table=mysql1.%
replicate_wild_do_table=mysql2.%
replicate_wild_ignore_table=mysql3.%

附:MySQL 5.6 主从复制配置文件示例

Master配置文件:

[mysql]
socket = /var/lib/mysql/mysql.sock
[mysqld]
user = mysql    #运行用户
port = 3306    #监听端口
binlog_format = mixed    #混合格式
log_bin = mysql-bin    #设置binlog文件的前缀,日志路径是在datadir下
datadir = /mysqldata
basedir = /usr/local/mysql
socket = /var/lib/mysql/mysql.sock
server_id = 1    #这里的数字不能和从库一样 
sync_binlog = 1    #事务提交后立即写入二进制日志,而不是放内存中,避免主服务器故障时事务没有写入日志
innodb_flush_logs_at_trx_commit = 1    #每次事务提交后立即将日志写入磁盘
log_error = /mysqldata/log    #错误日志的存放路径


Slave配置文件:

[mysql]
socket = /var/lib/mysql/mysql.sock
[mysqld]
user = mysql    #运行用户
port = 3306    #监听端口
binlog_format = mixed    #混合格式
log_bin = mysql-bin    #设置binlog文件的前缀,日志路径是在datadir下
datadir = /mysqldata
basedir = /usr/local/mysql
socket = /var/lib/mysql/mysql.sock
server_id = 2    #这里的数字不能和主库一样
replicate_do_db = mysql1    #需要复制的数据库,多个数据库写多行,这里设置的并不是binlog
replicate_do_db = mysql2
replicate_ignore_db = mysql3    #不需要复制的数据库,多个数据库写多行,不写的话默认复制所有库
log_error = /mysqldata/log    #错误日志的存放路径
read-only = 1    #从库需要开启只读,避免数据写入到从库,导致主从数据不一致


 

温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51
版权所有:《Linux运维技术学习站点
文章标题:《MySQL主从复制(3)复制过滤的配置与跨库更新
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-227.html  [生成短网址]

已有 0/2722 人参与

发表评论:

欢迎分享Linux运维技术学习站点

欢迎使用手机扫描访问本站,还可以关注微信哦~