MySQL主从复制
MySQL读写分离是基于主从复制的。
MySQL主从复制是一个异步的复制过程,底层是基于MySQL数据库自带的二进制日志功能。就是一台或多台MySQL数据库(slave,即从库)从另一台MySQL数据库(master,即主库)进行日志的复制,然后再解析日志并应用到自身,最终实现从库的数据和主库的数据保持一致。MySQL主从复制是MySQL数据库自带功能,无需借助第三方工具。
MySQL复制过程分成三步:
- master将改变记录到二进制日志(binary log)
- slave将master的binary log拷贝到它的中继日志(relay log)
- 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_Running
和Slave_SQL_Running