大多数人都很清楚,在高并发的时候,如果所有的数据库操作都只通过一台数据库来操作,那数据库很大程度可能出现宕机,而宕机就有可能导致数据丢失,造成不良后果。所以在并发量高的情况下一般会使用主从同步来实现读写分离。本篇文章主要就是围绕主从同步实现读写分离这个主题去讲解。我们其实在Redis专题中也有提到过主从同步的概念,现在我们可以先看下主从同步和读写分离的具体概念。
概念
Mysql安装
首先,我们在两台centos 7.6的机器上分别安装Mysql服务,这里顺带提一下Centos 7如何使用yum安装Mysql。
1. 下载mysql的yum repository包
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
2. 使用yum命令安装yum repository包
yum -y install mysql57-community-release-el7-10.noarch.rpm
3. 安装Mysql服务
yum -y install mysql-community-server
4. 启动Mysql服务并且查看Mysql运行状态
systemctl start mysqld.service && systemctl status mysqld.service
5. 从日志中提取Mysql登录随机密码
grep "password" /var/log/mysqld.log
6. 登录mysql
mysql -uroot -p 随机密码
7. Mysql默认安装validate_password插件,所以对密码要求是必须同时包含大小字母,特殊字符和数字,我们可以先关闭validate_password验证修改mysql密码
set global validate_password_policy=0;
set global validate_password_length=1;
set global validate_password_mixed_case_count=2;
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
8. 开启远程登录并刷新权限。
use mysql;
grant all privileges on *.* to root@'%' identified by "123456";
flush privileges;
在两台centos上成功安装Mysql服务后,接下来进入正题,部署主从同步,实现主从数据库数据的复制,不过需要注意一点:在进行主从复制时,所有需要复制数据的数据表所有更新操作必须在主数据库中进行,否则可能导致主数据库表更新和从数据库表更新导致数据冲突出现不一致。我们已经准备好两个centos服务器,现在我准备采用一主一从的方式实现主从同步:
ip:49.235.28.88 /*设置成主数据库*/
ip:49.232.154.38 /*设置成从数据库*/
主从同步配置思路
配置主数据库
打开/etc/my.cnf配置文件,在[mysqld]节点下进行binlog二进制日志的配置,一般来说binlog有以下几个配置参数:
一般情况下我们在binlog_do_db和binlog_ignore_db两个参数之间只需要二选一进行配置。接下来我们通过实例将49.235.28.88配置成主数据库:
接着登录mysql,创建从数据库root用户权限,然后重启mysql服务并登录查看主数据库的状态:
配置从数据库
打开/etc/my.cnf配置文件,在[mysqld]节点下进行relay_log配置:
重启服务并登录,然后关联主数据库,然后启动slave并查看状态。如果可以查看到Slave_IO_Running以及Slave_SQL_Running都为Yes,则表示从数据库配置成功。slave_io是负责将主数据库的binlog日志文件copy到从数据库的relay_log文件中,slave_sql是依次执行relay_log文件里的sql语句,执行被动写操作,实现与主数据库数据的一致性。
测试主从同步
首先,进入主数据库,插入一条数据:
然后进入从数据库查看数据是否存在:
可以看到我们主数据库更新的数据可以同步到从数据库中,实现主从数据库数据同步。主从同步实现之后我们就可以在这个基础上实现数据库读写分离,减轻主数据库的负载。下一篇将着重介绍Mysql的读写分离。