系列文章目录
docker 安装mysql 的主从复制
文章目录
- 系列文章目录
- 一、下载对应的镜像,生成容器
- 二、等待安装完成,用下载好的镜像,生成对应的容器
- 1.生成 主库 的容器
- 2.生成 从库 的容器
- 3.进入容器
- 1.docker exec -it 容器Id /bin/bash,再切换到目录:cd /etc/mysql。
- 2.需要安装 apt命令 和vim命令 方便编辑配置文件,apt-get update ,apt-get install vim。
- 3.安装成功后 修改配置文件 my.cnf (默认是没有的)
- 4.在master数据库(主库)中创建同步用户授予用户slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。
- 5.查询主库File和Position :show master status;
- 6.在容器外查询master_host 后面跟容器名字或者容器ID
- 7.进入从库Slave 中进入 mysql,执行代码
- 8.然后刷新一下 : flush privileges;
- 9.查看从库的状态 :show slave status \G;
- 问题:
一、下载对应的镜像,生成容器
示例:选择5.7版本,作为镜像下载
docker pull mysql:5.7
二、等待安装完成,用下载好的镜像,生成对应的容器
1.生成 主库 的容器
docker run -p 3339:3306 --name main_mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
-p : 映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
-e : 置顶的环境参数
--name : 对容器命名
MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。
出现如下提示,视为容器安装运行成功!
2.生成 从库 的容器
docker run -p 3340:3306 --name slave_mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
-p : 映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
-e : 置顶的环境参数
--name : 对容器命名
MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。
docker ps -a 查看当前mysql容器 ,可以看到容器的 ID
3.进入容器
1.docker exec -it 容器Id /bin/bash,再切换到目录:cd /etc/mysql。
2.需要安装 apt命令 和vim命令 方便编辑配置文件,apt-get update ,apt-get install vim。
记:如果安装apt 命令时,出现 apt-get: command not found ,可以换一种方法,使用 yum -y install vim 进行安装
3.安装成功后 修改配置文件 my.cnf (默认是没有的)
主库配置:
vim my.cnf
[mysqld]
## 同一局域网内注意要唯一
server-id=100
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
从库配置:
[mysqld]
## 设置server_id,注意要唯一
server-id=101
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
配置完成后,直接重启docker : docker restart 容器ID
4.在master数据库(主库)中创建同步用户授予用户slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。
1.进入主库容器 : docker exec -it 容器名或者id /bin/bash
2.进入主库mysql : mysql mysql -uroot -p123456
3.创建用户并授权,允许从库服务连接主库的服务
CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; 'slave'@'%' : 容器名字
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
4.刷新一下 :flush privileges;
5.查询主库File和Position :show master status;
6.在容器外查询master_host 后面跟容器名字或者容器ID
docker inspect --format=172.17.0.2 main_mysql IP,主库的名字,设置好之后,返回了IP
7.进入从库Slave 中进入 mysql,执行代码
change master to master_host='172.17.0.2', master_user='root', master_password='123456', master_port=3306, master_log_file='mysql-bin.000002', master_log_pos= 315, master_connect_retry=30;
参数:主库的IP,主库的账号密码,映射的端口,主库的bin log文件名字,主库查询的pos,见 第五步 !
8.然后刷新一下 : flush privileges;
9.查看从库的状态 :show slave status \G;
这两个参数的值 为 No, 是因为从库还未开启主从服务,需要在从库开启主从服务。命令:start slave;
问题:
`Slave_SQL_Running:No 解决办法
1.程序可能在slave上进行了写操作。
2.也可能是slave机器重起后,事务回滚造成的。
一般是事务回滚造成的:
解决办法:
mysql> stop slave ;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave ;
Slave_IO_Running: No
1.检查 IP POS 网管 是否正常匹配