Mysql 主从复制
搭建主从
1 | # Slave 机器执行 change master to |
验证
1 | mysql> show slave status\G |
从库复制主库的部分表
思路为:1.master只发送需要的;2.slave只接收想要的
master端:
binlog-do-db 二进制日志记录的数据库(多数据库用逗号,隔开)
binlog-ignore-db 二进制日志中忽略数据库 (多数据库用逗号,隔开)
1、binlog-do-db=YYY 需要同步的数据库,不在内的不同步。(不添加这行表示同步所有)
1 | # 这里主库只同步 test1 ,test2库 |
2、binlog-ignore-db = mysql 这是不记录binlog,来达到从库不同步mysql库,以确保各自权限
binlog-ignore-db = performance_schema
binlog-ignore-db = information_schema
1 | # 这里向从库同步时忽略test1,test2库 |
slave端:
replicate-do-db 设定需要复制的数据库(多数据库使用逗号,隔开)
replicate-ignore-db 设定需要忽略的复制数据库 (多数据库使用逗号,隔开)
replicate-do-table 设定需要复制的表
replicate-ignore-table 设定需要忽略的复制表
replicate-wild-do-table 同replication-do-table功能一样,但是可以通配符
replicate-wild-ignore-table 同replication-ignore-table功能一样,但是可以加通配符
1 | # 例如:从库忽略复制数据库test3,但是需要说明的是,其实从库的relaylog中是从在关于test3的相关日志,只是从库没有使用罢了。 |
报错解决:
1、报错:Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the –replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).
1 | # 查看主从UUID是否相同 |
2、报错:Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: ‘Could not find first log file name in binary log index file’
从机器:
1 | stop slave; |
主机器:
1 | show master status; |
从机器
1 | CHANGE MASTER TO MASTER_LOG_FILE='binlog.000011',MASTER_LOG_POS=157; |