1.下载镜像,这里使用MySQL8.0.18
1 | 复制代码docker pull mysql:8.0.18 |
2.主库
创建my.cnf
1 | ini复制代码user=mysql |
创建容器
1 | bash复制代码sudo docker run -d --privileged=true \ |
参数说明
参数 | 说明 |
---|---|
-d | 后台运行 |
-v | 挂载文件或文件夹 |
-p | 端口映射 |
-e | 环境变量设置 |
–privileged=true | 拥有root权限 |
–name | 容器名称 |
创建数据同步用户
- 进入容器中的MySQL
1 | bash复制代码# 进入容器内部,并连接mysql |
- 创建账号
1 | sql复制代码CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; |
3.从库
创建从库容器
1 | bash复制代码sudo docker run -d --privileged=true \ |
- 主从同步
查看主库状态
- 进入主库容器中的MySQL
1 | bash复制代码# 进入容器内部,并连接mysql |
- 查看主数据库状态
1 | lua复制代码mysql> show master status; |
配置从库
- 进入从库中的MySQL
1 | bash复制代码# 进入容器内部,并连接mysql |
- 在从数据库中配置主从复制
1 | ini复制代码change master to master_host='10.0.0.165',\ |
- 参数说明
参数 | 说明 |
---|---|
master_host | 主库IP |
master_user | 同步的用户 |
master_password | 同步的密码 |
master_port | 同步的端口 |
master_log_file | show master status;查出来的File |
master_log_pos | show master status;查出来的Position |
master_connect_retry | 连接失败重试的时间间隔,单位为秒。 |
- 查看主从同步状态
1 | ini复制代码show slave status \G; |
- 开启主从同步
1 | ini复制代码start slave; |
- 当Slave_IO_Running和Slave_SQL_Running都为YES时就是成功
5.测试
- 在主库中创建数据库
- 在从库中查看
6.增加新节点
停止一个从库的主从复制
1 | ini复制代码# 进入容器内部,并连接mysql |
备份当前从库的所有数据
1 | css复制代码mysqldump -uroot -p --all-databases > sqlfile.sql |
- ps: 之前创建容器的时候,映射有文件夹,这条命令可以在有映射文件夹的地方执行,这样能直接在外面拿到sqlfile.sql ,也可以使用docker cp命令将sqlfile.sql文件拷贝出来
将导出的数据,导入新库里面
1 | bash复制代码source /var/log/mysql/sqlfile.sql; |
设置主库同步
1 | ini复制代码change master to master_host='10.0.0.165', \ |
- 参数说明
参数 | 说明 |
---|---|
master_log_file | 对应从库状态查询出来的Relay_Master_Log_file |
master_log_pos | 对应从库状态查询出来的Exec_Master_Log_Pos |
开启同步
1 | ini复制代码start slave; |
- 查看状态
show slave status \G;
开启第一步关闭的从库的主从复制
本文转载自: 掘金