MySQL读写分离

MySQL

MySQL主从复制

MySQL读写分离是基于主从复制的。

MySQL主从复制是一个异步的复制过程,底层是基于MySQL数据库自带的二进制日志功能。就是一台或多台MySQL数据库(slave,即从库)从另一台MySQL数据库(master,即主库)进行日志的复制,然后再解析日志并应用到自身,最终实现从库的数据和主库的数据保持一致。MySQL主从复制是MySQL数据库自带功能,无需借助第三方工具。

MySQL复制过程分成三步:

  1. master将改变记录到二进制日志(binary log)
  2. slave将master的binary log拷贝到它的中继日志(relay log)
  3. slave重做中继日志中的事件,将改变应用到自己的数据库中(read and replay)

配置

前置条件:准备两台服务器,分别安装好mysql并启动服务成功。

配置主库

第一步:修改mysql数据库的配置文件/etc/my.cnf

[mysqld] log-bin=mysql-bin #[必须]启用二进制日志 server-id=100 #[必须]服务器唯一ID

第二步:重启mysql服务

systemctl restart mysqld

第三步:登录mysql数据库,执行下面sql

GRANT REPLICATION SLAVE ON *.* to ‘xiaoming’@’%’ identified by ‘123456’;

上面的sql作用是创建一个用户xiaoming,密码为123456,并且给xiaoming用户授予replication slave权限。通常用于建立复制时所需要用到的用户权限,也就是slave必须被master授权具有该权限的用户才能通过该用户复制。

第四步:执行sql

show master status

记录下File和Position这两个数据,比如File是mysql-bin.000005,Position是441

配置从库

第一步:修改mysql数据库的配置文件/etc/my.cnf

[mysqld] server-id=101 #[必须]服务器唯一ID

第二步:重启mysql服务

systemctl restart mysqld

第三步:登录mysql数据库,执行下面sql

stop slave;

change master to master_host=’<your master ip>’, master_user=’xiaoming’, master_password=’123456’, master_log_file=’mysql-bin.000001’, master_log_pos=441;

start slave;

第四步:执行sql

show slave status

即可查看主从复制情况Slave_IO_RunningSlave_SQL_Running