AngryRED

Easier & Better

基于docker部署MySQL读写分离库

28 Apr 2020 » mysql, docker

本文记录:如何通过docker搭建本地的MySQL读写分离库。

第一步,创建mysql的工作目录

分别为主库和从库创建配置目录及工作目录等。

主库:
mysql
 - master
   - conf
   - data
   - logs
从库:
mysql
 - slave
   - conf
   - data
   - logs

第二步,添加配置文件

1 在主库目录master/conf目录下,创建文件my.cnf,并加入以下内容

[mysqld]
log-bin=mysql-bin
server-id=1

2 在从库目录slave/conf目录下,创建文件my.cnf,并加入以下内容

[mysqld]
log-bin=mysql-bin
server-id=2

注意:主库和从库的server-id要不一样。

第三步,创建主库

运行docker命令:

docker run --restart=always -p 3307:3306 -v /mysql/master/conf:/etc/mysql -v /mysql/master/logs:/var/log/mysql -v /mysql/master/data:/var/lib/mysql --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 

这样,主库就创建好了,端口是:3307,ROOT密码是:123456。

注意:-v 后面的参数是本地目录映射到docker目录,冒号前面是本地目录,要与你在第一步中创建的主库的目录相一致。

第四步,创建从库

运行docker命令:

docker run --restart=always -p 3308:3306 -v /mysql/slave/conf:/etc/mysql -v /mysql/slave/logs:/var/log/mysql -v /mysql/slave/data:/var/lib/mysql --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

这样,从库就创建好了,端口是:3308,ROOT密码是:123456。

第五步,主库设置

1 创建并授权从库同步用户

通过客户端或命令行连接主库,然后运行命令:

GRANT REPLICATION SLAVE ON *.* to 'user'@'%' identified by 'mysql';

这样,就在主库中创建了一个密码为“mysql”的“user”用户。

2 查询主库的binlog信息,并记录。

运行命令:

show master status;

会得到如下类似的信息:

'mysql-bin.000003', '429', '', '', ''

第六步,从库设置

通过客户端或命令行连接从库,然后运行命令,从库中的同步信息:

change master to master_host='127.0.0.1', master_user='user', master_log_file='mysql-bin.000003', master_log_pos=429, master_port=3307, master_password='mysql';

最后,启动从库同步:

start slave;

运行成功后,主从库就配置好了。

最后

查看从库的运行状态:

show slave status \G;

SlaveIORunning 和 SlaveSQLRunning 都是Yes,说明主从复制已经开启。

后记

为了安全起见,从库中最好创建一个只读的用户,避免写入,进而避免主从同步的不必要麻烦。