MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展。多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升数据库的负载性能。
- 在本文中我们主要介绍 mysql 的主从复制,读写分离在以后的文章中会涉及到
实现MySQL主从复制需要进行的配置
- 主服务器:
- 开启二进制日志
- 配置唯一的
server-id
- 获得master二进制日志文件名及位置
- 创建一个用于slave和master通信的用户账号
- 从服务器:
- 配置唯一的
server-id
- 使用master分配的用户账号读取master二进制日志
- 启用slave服务
- 配置唯一的
- 环境准备
- 准备好两台云主机或者虚拟机
- 我准备的为
京东云
和腾讯云
的两台主机 ,系统为centos 7.4
- 我准备的为
- 主从数据库的版本最好可以一致
- 本实例讲解中为
Mysql 5.7.22
- 本实例讲解中为
- 主从数据库的内容最好可以一致
- 本次实例讲解中,Mysql 数据库都为空
- 准备好两台云主机或者虚拟机
主数据库
master
配置- 修改
my.cnf
文件 在[mysqld]
加上如下的配置
[mysqld] log-bin=mysql-bin #开启二进制日志 server-id=1 #设置server-id character_set_server=utf8 init_connect='SET NAMES utf8'
- 重启
mysql
如果是yum安装可以使用systemctl restart mysqld
- 登陆Mysql,创建用于同步的用户账号
CREATE USER 'repl'@'139.199.***.***' IDENTIFIED BY 'YourPassword9#'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'139.199.***.***'; FLUSH PRIVILEGES; 139.199.***.*** 这里填上自己从服务器的 ip
- 查看master状态,记录二进制文件名
mysql-bin.000001
和位置2930
mysql> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000001 | 2930 | | | | +------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)
- 修改
从数据库
slave
设置- 修改
my.cnf
文件 在[mysqld]
加上如下的配置
[mysqld] server-id=2 #设置server-id character_set_server=utf8 init_connect='SET NAMES utf8'
- 重启
mysql
如果是yum安装可以使用systemctl restart mysqld
- 登陆Mysql,并执行同步SQL语句
mysql> CHANGE MASTER TO -> MASTER_HOST='116.196.***.***', # 主服务器ip -> MASTER_USER='repl', # 主服务器登陆名 -> MASTER_PASSWORD='YourPassword9#', # 主服务器登陆密码 -> MASTER_LOG_FILE='mysql-bin.000001', # 二进制文件的名称 -> MASTER_LOG_POS=2930; # 二进制文件的位置
- 启动
slave
同步进程
mysql> start slave; Query OK, 0 rows affected (0.00 sec)
- 查看
slave
状态
mysql> show slave status\G; 如果以下两项都是 yes 就表示主从同步设置成功了 Slave_IO_Running: Yes Slave_SQL_Running: Yes
- 修改