一、前言
MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展。多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升数据库的负载性能。
下图就描述了一个多个数据库间主从复制与读写分离的模型(来源网络):
在一主多从的数据库体系中,多个从服务器采用异步的方式更新主数据库的变化,业务服务器在执行写或者相关修改数据库的操作是在主服务器上进行的,读操作则是在各从服务器上进行。如果配置了多个从服务器或者多个主服务器又涉及到相应的负载均衡问题,关于负载均衡具体的技术细节还没有研究过,今天就先简单的实现一主一从的主从复制功能。
二、实现MySQL主从复制需要进行的配置
- 主服务器:
- 启用二进制日志。
- 为当前节点设置一个全局唯一的server_id。
- 创建有复制权限的用户账号 REPLIACTION SLAVE ,REPLIATION CLIENT。
- 从服务器:
- 启动中继日志。
- 为当前节点设置一个全局唯一的server_id。
- 使用有复制权限的用户账号连接至主节点,并启动复制线程。
- 运行环境配置
- 测试环境:
主节点:192.168.20.128
从节点:192.168.20.129
mysql版本:mysql-5.7.22
linux:centos6.4
2.编辑主节点配置文件并开启二进制和配置server_id(全局唯一)
vi /etc/my.cnf
#主从复制配置
log-bin = mysql-bin #开启二进制日志
server-id =1 #全局唯一server_id
3.启动mysql服务,并连接mysql
mysql -u root -prootroot
4.查看日志信息
4.1查看二进制日志是否开启
show global variables like '%log%';
4.2查看主节点二进制日志列表
show master logs;
4.3查看主节点的server id
show global variables like '%server%';
5.在主节点上创建有复制权限的用户
GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO dengchao@’192.168.20.129’ IDENTIFIED BY '1234';
6.刷新权限
flush privileges;
7.编辑从节点配置文件
vi /etc/my.cnf
#开启中继日志
log-bin=mysql-bin
server-id=2
8.启动从节点mysql服务,并登陆mysql
mysql -u root -proot
9.查看从节点日志信息
9.1查看中继日志是否开启
show global variables like '%log%';
9.2 查看server 相关信息
show global variables like '%server%';
10.在从节点配置访问主节点的参数信息
添加 主节点主机,访问主节点的用户名及密码,主节点二进制文件信息。
注意:主节点的二进制文件一定要是二进制列表中的最后一个二进制文件。
change master to master_host='192.168.20.128',master_user='dengchao',master_password='1234',master_log_file='mysql-bin.000011',master_log_pos=1274;
11.查看从节点的状态信息
因为没有启动 从节点的复制线程,IO线程 和 SQL 线程都为NO.
12.启动复制线程
START SLAVE 可以指定线程类型:IO_THREAD ,SQL_THREAD, 如果不指定,则两个都启动。
13.再次查看从节点状态信息
show slave status\G;
15.测试
15.1.在主节点创建数据库,并查看主节点二进制日志信息
15.2.在从节点查找二进制日志信息,并查看test数据库是否复制成功
至此一主一从mysql配置就完成了