各位同学大家好,今天给大家分享一下数据库的主从复制和读写分离。为什么我们要做这些呢:我们知道,随着项目用户并发量的增加,应用层通过各种第三方技术以及微服务架构达到了需求,但是瓶颈会卡在的数据库上;因此,我们需要对数据库进行优化,其中一种方法就是读写分离。顾名思义,读写分离就是把数据库的读和写操作分在不同的库进行;主从复制是读写分离的前提。
这篇文章,我们先介绍Mysql的主从复制,好为后面读写分离作准备。
首先,什么叫做主从复制,即当主数据库进行数据的增删改操作时,从数据库也要进行一个同样的操作,以确保和主数据库的数据保持一致,即主从复制。今天我们来写一个一主一从的示例来实现主从复制。
首先我们需要准备两个mysql数据库,版本最好一致,这里我们使用Mysql5.6进行演示,主从信息如下
主数据库 Linux(Centos7.3)
从数据库 Linux(Centos7.3)
其实主从复制的本质思想就是,从数据库通过监听主数据库的一个二进制文件,当主数据库进行数据变化时,会将变化记录在这个二进制文件中,此时从数据库因为对此文件进行了监听,所以进行了同样的同步操作。
开启二进制日志
配置唯一的server-id
获得master二进制日志文件名及位置
配置唯一的server-id
读取master二进制日志
启用slave服务
1.找到my.cnf文件
2.进入vim视图模式
在mysqld中添加log-bin=mysql-bin(开启二进制日志),server-id=1(设置server-id),如下图所示武汉门禁
master mysql配置完毕,我们来登录master mysql查看我们具体的二进制文件名和位置
3.重启mysql
4.连接mysql
5.输入mysql命令进行master状态查看(如下所示)
二进制文件名(mysql-bin.000001)和位置(347653 )
同样找到my.cnf配置文件,添加server-id
1.找到my.cnf文件
2.进入vim视图模式
在mysqld中添加server-id=2(设置server-id),如下图所示
slave mysql配置完毕,我们来登录slave mysql进行与master mysql 的关联
3.重启mysql
4.连接mysql
5.输入mysql命令进行主数据库绑定(如下图所示),MASTER_LOG_FILE为你的二进制文件名(可能不一样),MASTER_LOG_POS为你的位置(可能不一样)
6.启动slave同步进程
7.查看状态(如下图所示,当Slave_IO_Running和Slave_SQL_Running都为YES的时候就表示主从同步设置成功了。)
当然我们也可以通过stop slave命令来关闭slave同步或者更换master。
最后我们在主数据库中创建一个数据库,你会发现当你在master中创建表或者是在表中插入数据时,新航道雅思班我们的slave都会跟着同步进行这些操作,此时你的主从复制就算是大功告成了。
最后,我们来分析一下会遇到的问题:实际上,主从复制这个过程就是从数据库监听二进制日志文件,并用相应的sql语句建库,建表,插入数据。但会有这样的问题:我们在从数据库删除了一个表,然后主数据库再去删除表,这个时候从数据库就会找不到表,错误会一直积累在slave,导致无法进行主从复制。
解决方法:
之后再用mysql> show slave status\G 查看:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
ok,现在主从同步状态正常了。