前言:上章和拐友们讲解了数据库中的高阶语句,这章来讲讲数据库的主从复制,因为在实际的生产环境中,如果对MySQL数据库的读和写都在一台数据库服务器中操作,无论在安全性,高可用性,还是高并发等各个方面都是不能满足实际需求的,本章首先讲解MySQL主从复制和MySQL读写分离的原理,然后介绍如何配置MySQL主从复制

目录
1.5.3 半同步复制(Semi-Sync Replication)
1.5.4增强半同步复制(lossless Semi-Sync Replication、无损复制)

总结:master将数据保存在二进制日志中,I/O向dump发出同步请求,dump把数据发送给I/O线程,I/O写入本地的中继日志SQL会读取本地的中继日志数据,同步到自己的数据库中,完成同步



- master服务器:192.168.226.10
- slave1服务器:192.168.226.20
- slave2服务器:192.168.226.30
- systemctl stop firewalld
- setenforce 0 #关闭防火墙和增强功能

yum install -y ntp #安装ntp服务

- #修改配置文件
- vim /etc/ntp.conf
-
- server 127.127.226.0
- fudge 127.127.226.0 stratum 8
-

service ntpd start #重启服务

yum install ntp ntpdate -y #安装所需要的包

- service ntpd start
- /usr/sbin/ntpdate 192.168.226.10
- crontab -e
- */30 * * * * /usr/sbin/ntpdate 192.168.226.10

yum install ntp ntpdate -y #安装所需要的包

- service ntpd start
- /usr/sbin/ntpdate 192.168.226.10
- crontab -e
- */30 * * * * /usr/sbin/ntpdate 192.168.226.10

- vim /etc/my.cnf
- server-id = 1
- log-bin=master-bin #添加,主服务器开启二进制日志
- log-slave-updates=true #添加,允许从服务器更新二进制日志
- binlog_format = MIXED
-
- systemctl restart mysqld
-
- mysql -u root -p
- GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.226.%' IDENTIFIED BY '123456';
- #给从服务器授权
- FLUSH PRIVILEGES;
-
- show master status;
-
- #File 列显示日志名,Fosition 列显示偏移量

![]()


- vim /etc/my.cnf
- server-id = 2 #修改,注意id与Master的不同,两个Slave的id也要不同
- relay-log=relay-log-bin #添加,开启中继日志,从主服务器上同步日志文件记录到本地
- relay-log-index=slave-relay-bin.index #添加,定义中继日志文件的位置和名称
- relay_log_recovery = 1 #选配项
- #当 slave 从库宕机后,假如 relay-log 损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的 relay-log,并且重新从 master 上获取日志,这样就保证了relay-log 的完整性。默认情况下该功能是关闭的,将 relay_log_recovery 的值设置为 1 时, 可在 slave 从库上开启该功能,建议开启。
-
- systemctl restart mysqld
-
- mysql -u root -p
- change master to master_host='192.168.226.10' , master_user='myslave',master_password='123456',master_log_file='master-bin.000004',master_log_pos=775;
- #配置同步,注意 master_log_file 和 master_log_pos 的值要与Master查询的一致,这里的是例子,每个人的都不一样
-
- start slave; #启动同步,如有报错执行 reset slave;
- show slave status\G #查看 Slave 状态
- //确保 IO 和 SQL 线程都是 Yes,代表同步正常。
- Slave_IO_Running: Yes #负责与主机的io通信
- Slave_SQL_Running: Yes #负责自己的slave mysql进程




- vim /etc/my.cnf
- server-id = 3 #修改,注意id与Master的不同,两个Slave的id也要不同
- relay-log=relay-log-bin #添加,开启中继日志,从主服务器上同步日志文件记录到本地
- relay-log-index=slave-relay-bin.index #添加,定义中继日志文件的位置和名称
- relay_log_recovery = 1 #选配项
- #当 slave 从库宕机后,假如 relay-log 损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的 relay-log,并且重新从 master 上获取日志,这样就保证了relay-log 的完整性。默认情况下该功能是关闭的,将 relay_log_recovery 的值设置为 1 时, 可在 slave 从库上开启该功能,建议开启。
-
- systemctl restart mysqld
-
- mysql -u root -p
- change master to master_host='192.168.226.10' , master_user='myslave',master_password='123456',master_log_file='master-bin.000004',master_log_pos=775;
- #配置同步,注意 master_log_file 和 master_log_pos 的值要与Master查询的一致,这里的是例子,每个人的都不一样
-
- start slave; #启动同步,如有报错执行 reset slave;
- show slave status\G #查看 Slave 状态
- //确保 IO 和 SQL 线程都是 Yes,代表同步正常。
- Slave_IO_Running: Yes #负责与主机的io通信
- Slave_SQL_Running: Yes #负责自己的slave mysql进程






本章就是和拐友们介绍了数据库中的主从分离和读写分离,由于主播今天比较忙,所以读写分离暂时拖到下期,未完持续~