1. 场景需求
今天老板要求 docker 搭建mysql 主从同步,头皮发麻,无从下手,要求:使用docker,并说明使用docker搭建得好处,实现原理,搭建具体过程。
2. 参考答案
好处:
l 一台服务器可以运行多个docker容器。
l docker 容器之间相互独立,互不冲突。
l docker 使用步骤简便。
具体实现步骤:
- 3. 首先基于docker拉取mysql镜像
docker pull mysql:5.7 |
- 4. 使用下载好的镜像,启动主从两个容器
docker run -p 3339:3306 --name mymysql –e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 # 主 docker run -p 3340:3306 --name mymysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 # 从 |
- 5. 配置主从
docker exec -it 627a2368c865 /bin/bash # 进入容器,627a2368c865是容器的id,而mysql-master是容器的名称 apt-get update apt-get install vim # 在容器中手动安装 vim |
- 6. vi my.cnf,进入/etc/mysql目录下,对my.cnf进行编辑
[mysqld] server-id = 100 log-bin = mysql-bin |
service mysql restart # 重启mysql docker start mysql-master # 启动容器 |
- 7. 创建主从所需权限用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456' # 创建用户 GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%' # 设置权限 |
- 8. 配置从数据库
[mysqld] server-id = 101 |
service mysql restart # 重启mysql docker start mysql-master # 启动容器 |
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= 254, master_connect_retry=30; |
这里需要注意的是,有两个参数来自于主库,可以通过主库中运行show master status 查看得到,分别是master_log_file以及master_log_pos。
最终在从库执行show slave status查看从库状态即可。看到IO与SQL线程处于活跃状态即为正常。