MySQL主从复制b.gif                                            

AB主从复制:

简称AB复制,在A主机上做create、update、insert、drop、delete等数据库、表、记录的增、删、改操作,B主机上会自动做数据库、表、记录的同步更新。
AB复制的工作原理(即工作过程):
1. 在主库上把数据更改记录到二进制日志(Binary Log)中。
2. 备库将主库上的日志复制到自己的中继日志(Relay Log)中。
3. 备库读取中继日志中的事件,将其重放到备库数据库之上。
dL4AAAAAAAAA&ek=1&kp=1&pt=0&bo=AAKfAQAAAAADEKk!&tl=1&su=0114029361&tm=1553176800&sce=0-12-12&rf=2-9
AB复制的一主一从模式工作过程:
A主机: create database db1 ----> 会将此命令自动写入本机的二进制日志文件中
B主机: I/O线程 监测并读A主机上的二进制日志文件新增的内容,且将新内容写入到B主机自己的中继日志文件中
SQL线程 读取B主机上中继日志文件中心的SQL语句,并且自动执行这些SQL语句。最终在B主机上创建了db1这个库。
网络拓扑:(1主1从)
mysql主服务器(master主人):192.168.11.11
mysql从服务器(slave随从、奴隶):192.168.11.12
项目准备:(在master、slave主机上分别做如下操作)
0.[选做]。安装mariadb-server服务器端软件、mariadb客户端软件,启动mariadb服务,查mariadb服务端口号3306。
yum install -y mariadb-server mariadb
systemctl restart mariadb
lsof -i :3306 或 netstat -atunlp | grep :3306
1.停止master、slave主机上的mariadb服务,并且清空/var/lib/mysql的所有数据。
systemctl stop mariadb
rm -rfv /var/lib/mysql/*
2.重启master、slave主机上的mariadb服务。并且查库、test库中是否有表(无表就OK)。
systemctl restart mariadb
mysql -uroot -e 'show databases;use test;show tables;'
AB复制的配置思路:
1.在A主机(master)上的/etc/my.cnf主配置文件中开启binlog二进制日志文件功能,并且给主机设置server-id唯一标识编号。重启mariadb服务。
2.在A主机上创建用于AB主从复制的用户账号,并查看master状态中的binlog日志文件的position位置数值。
3.在B主机上的/etc/my.cnf主配置文件中设置server-id唯一标识编号。。重启mariadb服务。
4.在B主机上用help change master查命令帮助,并用change master命令告诉B主机他的
master主人的正确信息
5.在B主机上用start slave启动mariadb的随从服务,并用show slave status查看AB主从复制的数据同步状态,要确认两个线程的yes状态。
AB复制的配置实施:
1.在A主机(master)上的/etc/my.cnf主配置文件中开启binlog二进制日志文件功能,并且给主机设置server-id唯一标识编号。重启mariadb服务。
vim /etc/my.cnf 做如下修改
[mysqld] 找到此行,添加如下蓝色字的3行功能选项
server-id=11 指定server-id为11,通常用本机IP的最后一组数
log-bin=master-bin 添加此行,指定二进制日志文件名为master-bin
skip_name_resolv=1 跳过域名解析功能
重启mariadb服务:
systemctl restart mariadb
2.在A主机上创建用于AB主从复制的用户账号,并查看master状态中的binlog日志文件的position位置数值。
mysql -uroot -e "grant replication slave on *.* to 'rep'@'192.168.11.%' identified by 'rep';"
mysql -uroot -e 'select user,host,password from mysql.user;
mysql -uroot -e 'reset master;show master status;'
dL4AAAAAAAAA&ek=1&kp=1&pt=0&bo=HgKkAAAAAAADEI0!&tl=1&su=015229729&tm=1553176800&sce=0-12-12&rf=2-9
3.在B主机上的/etc/my.cnf主配置文件中设置server-id唯一标识编号。重启mariadb服务。
vim /etc/my.cnf 做如下修改
[mysqld] 找到此行,添加如下蓝色字的3行功能选项
server-id=12 指定server-id为12,通常用本机IP的最后一组数
#log-bin=slave-bin 添加此行,指定二进制日志文件名为slave-bin
skip_name_resolv=1 跳过域名解析功能
重启mariadb服务:
systemctl restart mariadb
mysql -urep -prep -h192.168.11.11 -e 'status;'
测试rep用户是否能远程访问master主机的数据库服务
4.在B主机上用help change master查命令帮助,并用change master命令告诉B主机他的master主人的正确信息。
mysql
help change master to;
CHANGE MASTER TO
MASTER_HOST='
192.168.11.11',
MASTER_USER='
rep',
MASTER_PASSWORD='
rep',
MASTER_PORT=3306,
MASTER_LOG_FILE='
master-bin.000001',
MASTER_LOG_POS=
542,
MASTER_CONNECT_RETRY=10;
//是指从和主连不上是重试连接的时间为10秒
金老师的环境:
CHANGE MASTER TO
MASTER_HOST='
10.31.165.5',
MASTER_USER='
rep',
MASTER_PASSWORD='
rep',
MASTER_PORT=3306,
MASTER_LOG_FILE='
master-bin.000001',
MASTER_LOG_POS=
542,
MASTER_CONNECT_RETRY=10;
5.在B主机上用start slave启动mariadb的随从服务,并用show slave status查看AB主从复制的数据同步状态,要确认IO和SQL两个线程的yes状态。
mysql -uroot -p
start slave;
show slave status\G
注: \G 是分组(group)显示信息。
dLYAAAAAAAAA&ek=1&kp=1&pt=0&bo=eAIzAQAAAAADEH0!&tl=1&su=034199169&tm=1553176800&sce=0-12-12&rf=2-9
注:change master to设置的信息默认保存在/var/lib/mysql/master.info文件中,relay中继日志的设置信息默认保存在/var/lib/mysql/relay-log.info文件中。
ls /var/lib/mysql/
cat /var/lib/mysql/master.info
cat /var/lib/mysql/relay-log.info
cat /var/lib/mysql/mysql.sock 此套接字设备文件无法查看,是正常现象
5.测试主从复制的数据同步。
首先,在A主机(192.168.11.11)上创建一个名称为db1的库,并查库。
mysql
create database db1;
show database;
SHOW PROCESSLIST; 查mysql的内部进程(即线程)清单
dLgAAAAAAAAA&ek=1&kp=1&pt=0&bo=1QNxAAAAAAADEJI!&tl=1&su=0170169809&tm=1553176800&sce=0-12-12&rf=2-9
然后,在B主机上查库,看到了db1库,说明AB主机的数据自动同步成功。
mysql -uroot -e 'show databases;'
附加练习:实现AB主从复制的双主架构(互为主从)。
实现思路如下:
首先:A主的操作(1) -----> B从的操作(2)
然后:A从的操作(4) <----- B主的操作(3