CentOS6中MySql5.6数据库主从复制/读写分离(一)

前言

众所周知,随着用户量的增多,数据库操作往往会成为一个系统的瓶颈所在,而且一般的系统“读”的压力远远大于“写”,因此我们可以通过实现数据库的读写分离来提高系统的性能。

思路

通过设置主从数据库实现读写分离,主数据库负责“写操作”,从数据库负责“读操作”,根据压力情况,从数据库可以部署多个提高“读”的速度,借此来提高系统总体的性能。

基础知识

要实现读写分离,就要解决主从数据库数据同步的问题,在主数据库写入数据后要保证从数据库的数据也要更新。
主从数据库同步的实现思路如图:
CentOS6中MySql5.6数据库主从复制/读写分离(一)
主服务器master记录数据库操作日志到Binary log,从服务器开启i/o线程将二进制日志记录的操作同步到relay log(存在从服务器的缓存中),另外sql线程将relay log日志记录的操作在从服务器执行。
记住这张图,接下来基于这个图实际设置主从数据库。

主从数据库设置的具体步骤

首先要有两个数据库服务器master、slave(也可以用一个服务器安装两套数据库环境运行在不同端口,slave也可以举一反三设置多个),我们穷人就买虚拟云服务器玩玩就行 0.0。以下操作假设你的两台服务器上都已经安装好了mysql服务。

主服务器配置(master)

1. 打开编辑mysql数据库配置文件

vi /etc/my.cnf

2. 在主服务器master上配置开启Binary log,主要是在[mysqld]下面添加:

#[必须]启用二进制日志
log-bin=mysql-bin
#[必须]服务器唯一ID,默认是1,一般取IP最后一段,此次配置为1
server-id=1
sync-binlog=1

如图:
CentOS6中MySql5.6数据库主从复制/读写分离(一)

3.进入mysql ,在主服务器上创建备份专用账户

grant replication slave on *.* to 'yhhybackup'@'192.168.2.%' identified by '654321';
show master status;

CentOS6中MySql5.6数据库主从复制/读写分离(一)

这里推荐使用192.168.2.% ,百分号结尾
备份专用账户及密码:yhhybackup/654321

4.刷新权限

flush privileges;

CentOS6中MySql5.6数据库主从复制/读写分离(一)

5.查看master(主服务器)的状态

show master status;

如果显示Empty set (0.00 sec),说明刚才的配置没有生效,重启mysql即可service mysqld restart
CentOS6中MySql5.6数据库主从复制/读写分离(一)

6.重启mysql

service mysqld restart

从服务器配置(slave),与以上配置类似,下面简写了

1. 打开编辑mysql数据库配置文件

vi /etc/my.cnf  
relay-log=mysql-relay
#[必须]服务器唯一ID,默认是1,一般取IP最后一段 
server-id=2
read-only=TRUE

如果你的从服务器下面再挂从服务器,启用二进制日志就是必选的!

2.重启mysql服务

msyql service mysqld restart

3. 启动从服务器复制功能

change master to
master_host='192.168.2.119',master_user='yhhybackup',master_password='654321',master_log_file='mysql-bin.000001',master_log_pos=220;
start slave;

//注意master_log_pos值经常会变化,记得执行如下命令前先执行"show master status;",得到最新的Position列,154数字前后无单引号。
CentOS6中MySql5.6数据库主从复制/读写分离(一)

  • 踩坑记录
    如果执行change mastaer … 这条命令出现错误为:
ERROR 1198 (HY000): This operation cannot be performed with a running slave; run STOP SLAVE first

解决: 先停掉slave即可

mysql> stop slave;

参数描述:
master_host=主服务器IP
master_user=在主服务器上创建的备份用户名
master_password=备份用户密码
master_log_file=查询master(主服务器)的状态得到的File列的值
master_log_pos=Position列的值
start slave:启动从服务器复制功能

4.检查从服务器复制功能状态

show slave status \G

CentOS6中MySql5.6数据库主从复制/读写分离(一)
主要查看以下两项:

Slave_IO_Running: Yes
lave_SQL_Running: Yes
Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。
以上操作过程,主从服务器配置完成。

我在一次配置过程中忘记在主服务器上创建备份用户,Slave_IO_Running 就一直处于“connect”状态。

主从数据库测试工作

1.在主数据库上创建库和表

mysql -uroot -p123456
create database db_test_slave; 
use db_test_slave; 
create table tb_test(id int(3), name varchar(50)); 
insert into tb_test values(1,'hello slave'); 
show databases;

2.在从测试库上查看

mysql -uroot -p123456
show databases;
use db_test_slave; 
select * from tb_test;

文章借鉴于:
mysql5.7主从复制 https://blog.csdn.net/huanyu12/article/details/79786030
读写分离 https://blog.csdn.net/starlh35/article/details/78735510
mysql 远程访问设置 https://blog.csdn.net/qq_36698956/article/details/81699043