思路
- 创建主服务器,配置mysql
- 创建从服务器,配置mysql
- 主服务器中创建用户slave,复制master status 的文件名和position
- 改变从服务器的master配置
- 开启从服务器的slave
编辑mysql
配置
编辑master
配置,/Users/pan/code/docker/mysql/master
1 | [mysqld] |
编辑slave
配置,/Users/pan/code/docker/mysql/slave
1 | [mysqld] |
生成服务器
生成主服务器
1 | docker run --name mysql_master -v /Users/pan/code/docker/mysql/master:/etc/mysql/conf.d -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest |
生成从服务器
1 | docker run --name mysql_slave -v /Users/pan/code/docker/mysql/slave:/etc/mysql/conf.d -p 33307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest |
进入主服务器
1 | docker exec -it mysql_master /bin/bash |
创建mysql
用户,授予权限
1 | CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; |
获取master 的 file 和position
1 | show master status; |
进入从服务器
改变从服务器的master连接
1 | change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='edu-mysql-bin.000001', master_log_pos=929, master_connect_retry=30; |
命令解释:
- master_host: Master 的IP地址
- master_user: 在 Master 中授权的用于数据同步的用户
- master_password: 同步数据的用户的密码
- master_port: Master 的数据库的端口号
- master_log_file: 指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
- master_log_pos: 从哪个 Position 开始读,即上文中提到的 Position 字段的值
- master_connect_retry: 当重新建立主从连接时,如果连接失败,重试的时间间隔,单位是秒,默认是60秒。
在 Slave 的 MySQL 终端执行查看主从同步状态
1 | show slave status \G; |
SlaveIORunning 和 SlaveSQLRunning 是No,表明 Slave 还没有开始复制过程。相反 SlaveIORunning 和 SlaveSQLRunning 是Yes表明已经开始工作了
执行以下命令,开始开启主从同步:
1 | start slave; |
有时
start slave
的时候会提示caching_sha2_password
相关的错误,多试几次貌似就可以了