MySQL 主从模式搭建
当单体数据库的读写能力成为系统瓶颈时,搭建数据库的主-从模式是一个很好的选择,通过实现读写分离,可以大幅度提升数据库的读写能力。
环境准备
使用docker安装两个mysql容器,分别映射到宿主机的3306、3307端口。 参考如下安装命令:
1
docker run -d --restart=always --name mysql --privileged=true -v /data/mysql/data:/var/lib/mysql -v /data/mysql/conf:/etc/mysql/conf.d -v /data/mysql/log:/var/log/mysql -p 3303:3306 -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=123456 mysql:latest
配置主库
- 修改主库配置文件my.cnf,增加如下内容后,重启主库。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 服务的唯一编号
server-id = 1
# 开启mysql binlog功能
log-bin = mysql-bin
# binlog记录内容的方式,记录被操作的每一行
binlog_format = ROW
# 减少记录日志的内容,只记录受影响的列
binlog_row_image = minimal
# 指定需要复制的数据库名为test
binlog-do-db = test
- 创建给从库同步数据的账号
1
2
3
4
5
6
# 创建账号
create user 'jason'@'%' identified by '123456';
# 授权
grant all privileges on *.* to 'jason'@'%' WITH GRANT option;
# 重新加载配置
FLUSH PRIVILEGES;
- 通过
show master status
查看主库状态,重点关注 File 和 Position 两列
1
2
3
4
5
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000005 | 737 | test | | |
+------------------+----------+--------------+------------------+-------------------+
配置从库
- 修改从库my.cnf文件,在[mysqld]加入下面的内容,然后重启从库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 服务的唯一编号
server-id = 2
# 开启mysql binlog功能
log-bin = mysql-bin
# binlog记录内容的方式,记录被操作的每一行
binlog_format = ROW
# 减少记录日志的内容,只记录受影响的列
binlog_row_image = minimal
# 指定需要复制的数据库名为test
replicate-do-db = test
- 执行如下同步命令
1
2
3
4
5
6
stop slave;
change master to master_host='192.168.164.101',master_user='jason',master_password='123456',master_log_file='mysql-bin.000005',master_log_pos=737,get_master_public_key=1;
start slave;
- 通过
show slave status
查看从库状态,如下两列均为yes时,表示主-从模式的mysql已经搭建成功。
1
2
3
4
5
+------------------+-----------------+
| Slave_IO_Running |Slave_SQL_Running|
+------------------+-----------------+
| yes | yes |
+------------------+-----------------+
本文由作者按照 CC BY 4.0 进行授权