说明
MySQL使用的是5.7版本,其实用Docker装数据库就是图个方便,生产环境还是不建议哈!
本文重点在主从复制,需要部署单机版请查看另外一个教程:CentOS 7 使用Docker方式安装部署MySQL 5.7
第一步,分别在机器上装好docker并启动(不会使用docker的话请先百度了解一下)
第二步,分别在机器上创建挂载目录,如下
主库机器
mkdir -p /usr/local/docker/mysql/data/
从库机器
mkdir -p /usr/local/docker/mysql/data/
第三步,分别以docker方式部署mysql,如下
主库
docker run -dit --name mysql-5.7-master -p 3306:3306 -v /etc/localtime:/etc/localtime:ro -v /usr/local/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my1234 mysql:5.7 --lower_case_table_names=1 --server-id=100 --log-bin=mysql-bin
从库
docker run -dit --name mysql-5.7-slave -p 3306:3306 -v /etc/localtime:/etc/localtime:ro -v /usr/local/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my1234 mysql:5.7 --lower_case_table_names=1 --server-id=101 --log-bin=mysql-slave-bin --relay_log=edu-mysql-relay-bin --log_slave_updates=1
说明
- lower_case_table_names设置不区分大小写。
- MYSQL_ROOT_PASSWORD设置root用户密码,本例子中账号密码都设置为my1234,连接请用该账号密码。
- /etc/localtime:/etc/localtime:ro设置时区跟随宿主机。
- 端口随自己修改,修改后注意docker容器的映射端口要跟着改。
- server_id注意要唯一。
- log-bin开启二进制日志功能。
- relay_log配置中继日志。
- log_slave_updates复制的数据写入日志中。
第四步,主库创建数据同步的用户slave,如下
并授予slave用户REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据
# 进入容器
docker exec -it mysql-5.7-master /bin/bash
# 进入mysql
mysql -uroot -pmy1234
# 创建用户
CREATE USER 'slave'@'%' IDENTIFIED BY 'root';
# 授予用户
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
第五步,备份主库数据到从库(如果是新建数据库,跳过这一步),如下
1. 在主库上加锁,使只有只读权限,防止新数据的写入
# 进入容器
docker exec -it mysql-5.7-master /bin/bash
# 进入mysql
mysql -uroot -pmy1234
# 加锁
flush table with read lock;
2. 查看当前主库状态,记下这个数值,后面要用
show master status;
3. 备份数据
# 进入容器
docker exec -it mysql-5.7-master /bin/bash
# 进入mysql
mysql -uroot -pmy1234
# 备份数据
mysqldump -uroot -pmy1234 --all-databases|gzip > dump.sql.gz
# 释放锁
unlock tables;
4. 将文件传到从库所在机器,ip,路径自行替换
# 复制数据到宿主机
docker cp mysql-5.7-master:/dump.sql.gz /usr/local/docker/mysql
# 服务器传输
scp /usr/local/docker/mysql/dump.sql.gz root@从库机器ip:/usr/local/docker/mysql
5. 恢复数据到从库,路径自行替换
# 解压文件
gzip -d /usr/local/docker/mysql/dump.sql.gz
# 移动文件到挂载目录下
mv /usr/local/docker/mysql/dump.sql /usr/local/docker/mysql/data/dump.sql
# 进入容器
docker exec -it mysql-5.7-slave /bin/bash
# 进入mysql
mysql -uroot -pmy1234
# 恢复数据,慢慢等吧,比较耗时
source /var/lib/mysql/dump.sql
第六步,配置从库进行同步,如下
1. 配置同步
# 进入容器
docker exec -it mysql-5.7-slave /bin/bash
# 进入mysql
mysql -uroot -pmy1234
# 配置同步
change master to master_host='主库机器ip', master_user='slave', master_password='my1234', master_port=3306, master_log_file='mysql-bin.000002', master_log_pos=46781778;
说明
- master_user和master_password为第四步在主库创建的用户和密码
- master_log_file和master_log_pos均为第五步第2点查看的主库状态(新创建的库直接用"show master status;"命令查看主库状态即可得到)
2. 开启同步
# 开启同步
start slave;
# 查看从库同步状态
show slave status;
说明
- Slave_IO_Running为读取master的binaryLog的线程
- Slave_SQL_Running为执行SQL的线程
- 如图,Slave_IO_Running和Slave_SQL_Running都为YES即配置成功