Mysql 主从复制

搭建主从

1
2
3
4
5
6
7
8
9
10
# 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;

验证

1
2
3
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 需要同步的数据库,不在内的不同步。(不添加这行表示同步所有)

1
2
3
# 这里主库只同步 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

1
2
3
# 这里向从库同步时忽略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功能一样,但是可以加通配符

1
2
3
4
5
6
7
# 例如:从库忽略复制数据库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).

1
2
3
4
5
6
# 查看主从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’

从机器:

1
stop slave;

主机器:

1
2
3
4
5
6
mysq> show master status;
File Position
binlog.000010 157

mysql> flush logs;
因为刷新日志file的位置会+1,即File变成为:binlog.000011

从机器

1
2
3
CHANGE MASTER TO MASTER_LOG_FILE='binlog.000011',MASTER_LOG_POS=157;
start slave;
show slave status\G;