1:主从复制最大缺陷就是延迟。
2: 设置完主从关系之后,主机创建的库和表,会,同步到从机。
3:设置完主从关系之前,主机创建的库和表,不会,同步到从机。
4:要是主机一开始就有一个test库,从机没有,这时候,我删除主机的test库,从库复制会报错。后续的复制将会停止。( slave-skip-errors=all 解决)
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:建立关系后所有新建的表和库都会同步,但是没建立关系之前主库就创建的东西不会同步。
在设置主从关系之前,我的主机mysql上,有一个test库。当我设置了主从关系后,这个test库也不会复制到我的从机的mysql里。但是之后,主机所有创建的库和表都会同步。
单是当我删除主机的test库的时候,由于从机没有test库就会报错。复制将会停止。
解决1 从机配置(还可以具体到哪个码)
slave-skip-errors=all