MySQL版本:5.7,Linux版本:CentOS 7.4
MySQL主从复制的目的是实现数据库冗余备份,将master数据库的数据定时同步到slave库中,一旦master数据库宕机,可以将Web应用数据库配置快速切换到slave数据库,确保Web应用有较高的可用性。
MySQL主从同步是一个异步复制的过程,要实现复制,受限需要在master上开启bin-log日志功能,bin-log日志用于记录在master库执行的增删改更新操作的sql语句,整个过程需要开启3个线程,分别是master开启I/O线程,slave开启I/O线程和SQL线程。
vim /etc/my.cnf
在[mysqld]
字段中添加:
log-bin=master-bin
binlog-format=ROW
server-id=1
systemctl restart mysqld
create user ‘tongbu‘@‘%‘ identified by ‘123456‘;
grant replication slave on *.* to ‘tongbu‘@‘%‘ identified by ‘123456‘;
show master status;
vim /etc/my.cnf
在[mysqld]字段中添加:
server-id=2
log-bin=mysql-bin
binlog-format=ROW
change master to master_host=‘192.168.66.11‘,master_user=‘tongbu‘,master_password=‘123456‘,master_log_file=‘master-bin.000001‘,master_log_pos=154;
start slave;
show slave status\G
在主库创建一个数据库:create database test123;
在数据库中新建一个表:create table t0(id int,name varchar(20));
查看从库有没有新建的表
在/etc/my.cnf中添加:binlog-do-db=ipcc
(多个数据库用逗号隔开,不加这一行默认同步所有库)
在/etc/my.cnf中添加:replicate-do-db=ipcc
指定需要同步的表:replicate-do-table=ipcc.cdr
如果发生网络异常导致主从同步错误,或者在已有数据基础上搭建主从复制,需要解决数据不一致问题。
flush tables with read lock;
,将数据库设置为全局读锁。stop slave;
2、将同步错误的SQL跳过一次,set global sql_slave_skip_counter=1;
3、启动slave,start slave;
unlock tables;
解锁。flush tables with read lock;
,将数据库设置为全局读锁。unlock tables;
解锁。情况:从库上执行show slave status\G
,报错last_error:1062
,sql线程已停止工作。
原因:从库上执行了写操作,然后在主库上执行了相同的SQL语句,主键冲突,主从复制状态就会报错。
解决:
在从库执行delete删除操作,再在主库执行更新操作,由于从库已经没有该数据,导致主从数据不一致。
解决方法:在从库执行show slave status
,根据错误信息所知道的binlog文件和position号,在主库上通过mysqlbinlog命令查找在主库执行的哪条SQL语句导致的主从报错。把从库上丢失的这条数据补上,然后执行跳过错误。如果从库丢失了很多数据,需要考虑重新配置主从环境。
原文:https://www.cnblogs.com/XY-Heruo/p/14346446.html