mysql AB复制
主从复制的基本过程如下(一定要背下来找工作的时候,只要你投的有数据库运维这个方向就没有不问的):
1)、Mysql Slave端的IO进程连接上Master,向Master请求指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;
2)、Master接收到来自Slave的IO进程的请求后,负责复制的IO进程根据Slave的请求信息,读取相应日志内容,返回给Slave 的IO进程。并将本次请求读取的bin-log文件名及位置一起返回给Slave端。
3)、Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的 bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”;
4)、Slave的Sql进程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行的内容,并在自身执行。
配置步骤:
主服务器:192.168.60.116 master.com
从服务器:192.168.60.117 slave.com
主服务器的配置——
[root@master ~]# mkdir /backup/ #设置binlog目录
[root@master ~]# chown -R mysql.mysql /backup/ #设置权限
[root@master ~]# mysqldump -u root -p123 --all-databases > /all.sql #全备
[root@master ~]# scp /backup/all.sql 192.168.60.117:/backup/ #将全备拷贝至从服务器
[root@master ~]# vim /etc/my.cnf #开启binlog日志
[mysqld]
socket=/var/lib/mysql/mysql.sock#开启binlog日志
server-id=1
log-bin=/backup/master
log-bin-index=/backup/master[mysql]
socket=/var/lib/mysql/mysql.sock
[root@master ~]# systemctl restart mysqldd #重启mysql使配置生效
(重启不成功多killall mysqld几次)
[root@master ~]# mysql -uroot -p123
MySQL [(none)]> grant replication slave on *.* to slave@'192.168.60.117' identified by '123';
#授权从服务器账号slave
从服务器的配置——
[root@slave ~]# mysql -uslave -p123 -h 192.168.60.116 #测试主服务器给的账号能不能登录
[root@slave ~]# mysql -uroot -p123 < /backup/all.sql #将主服务器的全备导入,做同步
[root@slave ~]# vim /etc/my.cnf #设置从服务器实例的唯一标识符server-id
[mysqld]
socket=/var/lib/mysql/mysql.sock
server-id=2[mysql]
socket=/var/lib/mysql/mysql.sock
[root@slave ~]# systemctl restart mysqldd #重启使配置生效
[root@slave ~]# mysql -u root -p123
切换到主服务器看一下偏移量:
MySQL [(none)]> stop slave; #停止主从复制服务线程
MySQL [(none)]> change master to master_host='192.168.60.116', master_user='slave', master_password='123', master_log_file='master.000002', master_log_pos=451;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
#配置从服务器的主库连接信息
MySQL [(none)]> start slave; #开启主从复制服务线程
MySQL [(none)]> show slave status\G; #查看从服务器复制状态详情
报错——
Slave_IO_Running: No
Slave_SQL_Running: Yes
原因一:
从服务器的主库连接信息配置错误,偏移量不对,或者主服务器的偏移量发生了变化
解决方法:
查看一下主服务器的偏移量,重新再配置从服务器的主库连接信息。
原因二:
主服务器的uuid和从服务的uuid相同,这可能是从同一台原型机克隆下来的缘故。
解决方法:
主服务器:
[root@master ~]# vim /usr/local/mysql/data/auto.cnf[auto]
server-uuid=d2183533-e9fe-11ef-94b3-000c297e0973[root@master ~]# systemctl restart mysqldd
从服务器:
[root@slave ~]# vim /usr/local/mysql/data/auto.cnf
[auto]
server-uuid=d2183533-e9fe-11ef-94b3-000c297e0972[root@slave ~]# systemctl restart mysqldd