#需要同步的二进制数据库名
binlog-do-db=testdemo
#只保留7天的二进制日志,以防磁盘被日志占满(可选)
expire-logs-days = 7
#不备份的数据库
binlog-ignore-db=information_schema
binlog-ignore-db=performation_schema
binlog-ignore-db=sys
#如果salve库名称与master库名相同,使用本配置
replicate-do-db = testdemo
#如果master库名[testdemo]与salve库名[testdemo01]不同,使用以下配置[需要做映射]
#replicate-rewrite-db = testdemo -> testdemo01
#如果不是要全部同步[默认全部同步],则指定需要同步的表
#replicate-wild-do-table=testdemo.user
#replicate-wild-do-table=testdemo.demotable
重启服务后,再次查看主库
可以看到我们配置的主库需要同步的数据库以及忽略的数据库
再查看从库的状态
另外需要注意一点的是:目前我们的这个MySQL主从集群是单向的,也就是只能从主服务同
到这里可以看到,在MySQL主从架构中,是需要严格限制从服务的数据 写入的,一旦从服务有数据写入,就会造成数据不一致。并且从服务在 执行事务期间还很容易造成数据同步失败。如果需要限制用户写数据,我们可以在从服务中将read_only参数的值设 为1( set global read_only=1 ; )。这样就可以限制用户写入数据。但是这个属性有两个需要注意的地方:1、read_only=1设置的只读模式,不会影响slave同步复制的功能。 所 以在MySQL slave库中设定了read_only=1后,通过 "show slave status\G" 命令查看salve状态,可以看到salve仍然会读取master上的日 志,并且在slave库中应用日志,保证主从数据库同步一致;2、read_only=1设置的只读模式, 限定的是普通用户进行数据修改的操 作,但不会限定具有super权限的用户的数据修改操作。 在MySQL中设 置read_only=1后,普通的应用用户进行insert、update、delete等会 产生数据变化的DML操作时,都会报出数据库处于只读模式不能发生数 据变化的错误,但具有super权限的用户,例如在本地或远程通过root用 户登录到数据库,还是可以进行数据变化的DML操作; 如果需要限定 super权限的用户写数据,可以设置super_read_only=0。另外 如果要 想连super权限用户的写操作也禁止,就使用"flush tables with read lock;",这样设置也会阻止主从同步复制!
ok,我们接着测试下上面指定同步数据库的操作,我们在主库上再创建一个数据库,看看从库是否同步主库的数据,另外在从库上再创建一个数据库,查看从库是否会同步新建的数据库。
主库在testdemo数据库新建一个表user,查看从库是否会同步表
mysql> create table user(id int not null, userName varchar(200));
Query OK, 0 rows affected (0.04 sec)
现在查看从库testdemo库的表数据
现在继续在主节点上创建一个新的数据库orders
查看从库是否通不了新建的数据库orders
可以看到主节点新建的orders库是没有同步到从库的。
GTID
是对一个已经提交事务的编号,并且是全局唯一的。GTID
是由UUID
和TID
组成的。UUID
是MySQL
实例的唯一标识,TID
代表该实例上已经提交的事务数量,随着事务提交数量递增。举个例子:3E11FA47-71CA-11E1-9E33-C80AA9429562:23
,冒号前面是UUID
,后面是TID
。
GTID 工作原理:
#开启gtid模式gtid_mode=on#强制gtid一致性,开启后对于特定create table不被支持enforce_gtid_consistency=onlog_bin=onlog-slave-updates=truebinlog_format=rowserver_id= 单独设置一个#relay log
skip_slave_start=1
gtid_mode=onenforce_gtid_consistency=onlog-bin=slave-binloglog-slave-updates=trueserver_id= 单独设置一个#强烈建议,其他格式可能造成数据不一致binlog_format=row#relay log
skip_slave_start=1
然后分别重启主服务和从服务,就可以开启GTID同步复制方式。
检查GTID是否开启:
show variables like '%gtid%';
slave连接到master:
CHANGE MASTER TO
MASTER_HOST='master的IP',
MASTER_USER='用户名',
MASTER_PASSWORD='密码',
MASTER_PORT=端口号,
# 1 代表采用GTID协议复制
# 0 代表采用老的binlog复制
MASTER_AUTO_POSITION = 1;