使用场景
- 主数据库服务器故障后,可切换到从数据库继续工作
- 不影响主数据库的性能的工作,比如在从数据库作备份、数据统计等工作
常见问题及解决方案
-
复制延迟
可以利用同步复制机制(Semi-sync)解决,但是影响性能,当主机写入时,确认更新已经同步到备机之后,再返回写操作成功。 主从架构是一种高可用的解决方案,并不是处理高并发的,处理高并发可利用redis缓存来解决。
运行原理
从一个mysql instance(master)复制到另一个mysql instance(slave)的过程我们称之为mysql主从复制。在mysql复制的过程中,主要由3个线程完成sql线程和IO线程在slave,另一个IO线程在matser。
mysql复制的基本过程如下:
- slave上的IO线程连接master,请求日志文件指定位置或者最开始的位置之后的日志内容
- master接收请求,并通过负责复制的IO线程根据请求的信息读取日志文件内容,将日志信息和master端的Binary Log文件的名称以及在Binary Log中的位置返回给slave的IO线程
- slaveIO线程接收到信息后,将日志内容写到Relay Log文件最末尾,并将master端的bin-log的文件名和位置记录到master-info文件中。下次请求时可告知master需要请求的位置
- slave的sql线程检测到Relay Log文件新增后,执行此日志文件的sql语句
实施环境
系统环境:centos7
MySQL版本:5.7.17
主服务器(master)IP:192.168.20.101
从服务器(slave)IP:192.168.20.99
配置
-
配置master服务器
[root] # vim /etc/my.cnf
修改如下内容:
server-id=101 #设置服务器唯一的id,默认是1 log-bin=mysql-bin #启用二进制日志
-
配置slave服务器
[root] # vim /etc/my.cnf
修改如下内容:
server-id=99 #设置服务器唯一的id,默认是1 replicate-do-db=cto #只同步cto库 slave-skip-errors=all #忽略因复制出现的所有错误
-
重启主从mysql服务
[root] # service mysqld restart
-
在master上给slave授权
[root] # >grant replication slave on *.* to slave@192.168.20.99 identified by "123456789";
-
查看master上数据库状态
[root] # >show master status;
- 在slave执行sql语句的同步
```
[root] # >change master to master_host='192.168.20.101', master_user='slave', master_password=rd='123456789', master_log_file='mysql-bin.000001', master_log_pos=442;
```
![](http://i2.51cto.com/images/blog/201804/10/aeb2590b148a1f5d2e7cbe9c380ff0f4.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
- 开启salve同步
[root] # >start slave;
- 查看slave同步状态
[root] # >show slave status \G;
-
检验 主(master)
从(slave)