1 总结
1:主从复制最大缺陷就是延迟。
2: 设置完主从关系之后,主机创建的库和表,会,同步到从机。
3:设置完主从关系之前,主机创建的库和表,不会,同步到从机。
4:要是主机一开始就有一个test库,从机没有,这时候,我删除主机的test库,从库复制会报错。后续的复制将会停止。( slave-skip-errors=all 解决)
2 搭建前的准备
2.1复制的基本原则
- 每个slave只有一个master
- 每个slave只能有一个唯一的服务器ID
- 每个master可以有多个slave
- mysql版本尽量一致,防止出问题。
- 两台服务能ping通
- MySQL主从是基于binlog的,主上须开启binlog才能进行主从。
1 编辑主库的配置文件
vim /etc/my.cnf
2 主库配置
[mysqld]
#开启日志
log-bin = mysql-bin
#binlog级别 (statement:只记操作命令,有可能导致主从数据不一致,row:数据一致 mixed:)
binlog_format=row
#设置服务id,主从不能一致 ,一般设置为ip最后一段
server-id = 19
#设置需要同步的数据库
binlog-do-db=aa_db
#屏蔽系统库同步
binlog-ignore-db=mysql
binlog-ignore-db=bb_db
3 重启
systemctl restart mysqld
4、登录主库:
mysql -uroot -p
5 创建用户
降低密码强度(不建议使用)
SELECT @@VALIDATE_PASSWORD_POLICY;
set global validate_password_policy = 0;
set global validate_password_length=1;
6 授权主从复制专用账号(给从库复制数据使用的)
GRANT REPLICATION SLAVE ON *.* TO 'db_sync'@'%' IDENTIFIED BY 'db_sync';
7 刷新权限
flush privileges;
8 查看主库信息,注意:记录一下file和Position,从库配置时用
show master status;
从库配置
[mysqld]
#设置3306端口
port = 3306
# 允许最大连接数
max_connections=1000
#开启日志
log-bin = mysql-bin
#设置服务id,主从不能一样 ,一般设置为ip最后一段
server-id = 18
#复制异常处理方式 (不配置这个,报错将停止复制数据,重要)
slave-skip-errors=all
#设置需要同步的数据库 (一般不用)
replicate_wild_do_table=test_db.%
#屏蔽系统自带的库的同步 (重要)
replicate_wild_ignore_table=mysql.%
replicate_wild_ignore_table=information_schema.%
replicate_wild_ignore_table=performance_schema.%
从库登录
mysql -u root -p
根据主库信息,执行
CHANGE MASTER TO MASTER_HOST='主库ip',MASTER_PORT=3306,MASTER_USER='db_sync', MASTER_PASSWORD='db_sync',MASTER_LOG_FILE='file信息',MASTER_LOG_POS=Position信息;
4、启动服务
# 开启
mysql> start slave;
# 停止
mysql> stop slave;
# 重启
mysql> reset slave;
5、确认Slave_IO_Runing以及Slave_SQL_Runing两个状态位是否为“Yes”,如果不为 Yes,
请检查error_log,然后排查相关异常。
mysql>show slave status;
提示: flush table with read lock; unlock tables;
验证:
1:主库新建用户并授权,从库也能登录。
2:建立关系后所有新建的表和库都会同步,但是没建立关系之前主库就创建的东西不会同步。
3 问题
3.1 主从复制报错
在设置主从关系之前,我的主机mysql上,有一个test库。当我设置了主从关系后,这个test库也不会复制到我的从机的mysql里。但是之后,主机所有创建的库和表都会同步。
单是当我删除主机的test库的时候,由于从机没有test库就会报错。复制将会停止。
解决1 从机配置(还可以具体到哪个码)
slave-skip-errors=all