使用docker 搭建环境
1. mysql 单体环境搭建
docker pull mysql:5.7
mkdir -p /home/data/mysql57
docker run -d -p 3306:3306 --restart=always --name mysql57 -eTZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=root -v /home/data/mysql57:/var/lib/mysql --privileged=true mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
mkdir -p /home/data/mysql577
docker run -d -p 3307:3306 --restart=always --name mysql57 -eTZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=root -v /home/data/mysql577:/var/lib/mysql --privileged=true mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
因为MySQL 没有给镜像配置数据卷映射 , 所以加上也不会同步出来 , 想在外面修改配置需要复制出来后再映射 不然就会变成空文件夹
2. 环境分配
3306 为master 3307 为slave
分别进去容器
docker exec -it mysql57 /bin/bash
apt-get update
apt-get install -y vim
vim /etc/mysql/my.cnf
在 mysql57
中添加
[mysqld]
## 同一局域网内注意要唯一
server-id=100
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
添加完成后需要 重启服务 service mysql restart
在重启下容器 docker restart mysql57
然后给slave 分配一个账号 和权限[REPLICATION SLAVE
REPLICATION CLIENT
]
在3307 上修改
[mysqld]
## 设置server_id,注意要唯一
server-id=101
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
添加完成后需要 重启服务 service mysql restart
在重启下容器 docker restart mysql577
3. 配置 启动
- 连接 master 3306
show master status;
File和Position字段的值后面将会用到,在后面的操作完成之前,需要保证Master库不能做任何操作,否则将会引起状态变化,File和Position字段的值变化。
- 添加slave 账号
因为slave 要连接master 所以要在master 创建一个slave账号
主库添加 slave 账号 赋权 [REPLICATION SLAVE REPLICATION CLIENT]
- 连接slave 3307
change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306
, master_log_file='mysql-bin.000001', master_log_pos= 2830, master_connect_retry=30;
命令说明:
master_host :Master的地址,指的是容器的独立ip,可以通过docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id
查询容器的ip
master_port:Master的端口号,指的是容器的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
- 查看slave 3307 状态
show slave status;
正常情况下,SlaveIORunning 和 SlaveSQLRunning 都是No,因为我们还没有开启主从复制过程。
-
在从库中使用
start slave
开启主从复制过程,然后再次查询主从同步状态show slave status
; -
然后可以在主数据库中创建一个库
test_slave
测试 -
然后在从库查看是否同步,未生成则使用
show slave status
查看报错,查询对应的情况
-
常见的错误有连接不上,或者表库不存在之类的,需要重新操作
-- 停止
stop slave;
-- 查看主库状态
change master to master_log_file='mysql-bin.000002',master_log_pos=2565;
-- 启动同步
start SLAVE;