Mysql 主从复制
Mysql 主从复制
搭建主从
# Slave 机器执行 change master to
CHANGE MASTER TO
MASTER_HOST='192.168.100.171',
MASTER_USER='test',
MASTER_PASSWORD='passwd123',
MASTER_PORT=3306,
MASTER_LOG_FILE='master-bin.000006',
MASTER_LOG_POS=2556,
MASTER_CONNECT_RETRY=10;
验证
mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
从库复制主库的部分表
思路为:1.master只发送需要的;2.slave只接收想要的
master端:
binlog-do-db 二进制日志记录的数据库(多数据库用逗号```,隔开) binlog-ignore-db 二进制日志中忽略数据库 (多数据库用逗号,隔开)
1、binlog-do-db=YYY 需要同步的数据库,不在内的不同步。(不添加这行表示同步所有)
# 这里主库只同步 test1 ,test2库
[mysqld]
binlog-do-db = test1,test2
2、binlog-ignore-db = mysql 这是不记录binlog,来达到从库不同步mysql库,以确保各自权限 binlog-ignore-db = performance_schema binlog-ignore-db = information_schema
# 这里向从库同步时忽略test1,test2库
[mysqld]
binlog-ignore-db = 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功能一样,但是可以加通配符
# 例如:从库忽略复制数据库test3,但是需要说明的是,其实从库的relaylog中是从在关于test3的相关日志,只是从库没有使用罢了。
[mysqld]
replicate-ignore-db = test3
# 增加通配符的两个配置
replicate-wild-do-table=db_name.% 只复制哪个库的哪个表
replicate-wild-ignore-table=mysql.% 忽略哪个库的哪个表
报错解决:
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).
# 查看主从UUID是否相同
/var/lib/mysql/auto.cnf
# 查看 mysql 配置文件的 server-id 是否一致,例如:
主:server-id=1
从:server-id=2
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'
从机器:
stop slave;
主机器:
mysq> show master status;
File Position
binlog.000010 157
mysql> flush logs;
因为刷新日志file的位置会+1,即File变成为:binlog.000011
从机器
CHANGE MASTER TO MASTER_LOG_FILE='binlog.000011',MASTER_LOG_POS=157;
start slave;
show slave status\G;