1.docker创建mysql主库 docker run -p 3307:3306 --name mysql_master -v /docker/mysql_master/conf:/etc/mysql/conf.d -v /docker/mysql_master/logs:/logs -v /docker/mysql_master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
--name指定运行之后的容器的名称为mysql-master;-v指定了容器中指定目录挂载到宿主机上的某个目录,这样做的目的在于防止容器中配置的数据丢失,因为docker容器在重启之后是不会保留前一次在其内部运行的相关数据的;-p表示宿主机上的某个端口映射到docker容器内的某个端口,这里也就是将宿主机的3306端口映射到容器内部的3306端口;-e表示指定当前容器运行的环境变量,该变量一般在容器内部程序的配置文件中使用,而在外部运行容器指定该参数。这里的MYSQL_ROOT_PASSWORD表示容器内部的MySQL的启动密码;-d参数指定了当前容器是在后台运行。
通过容器id方式,这里的id就是上面docker ps中展示的id
docker exec -it fa4afaeb24c4 /bin/bash
通过容器名称方式,这里的名称就是创建容器时指定的名称,也就是mysql-master
docker exec -it mysql-master /bin/bash
2.在/docker/mysql_master/conf创建 my.cnf文件并重启服务service mysql restart docker 重启
[mysqld]
同一局域网内注意要唯一
server-id=1
开启二进制日志功能
log-bin=mysql-bin
3.创建一个用户rep 用来主从
CREATE USER 'rep'@'%' identified by '123456';
GRANT REPLICATION SLAVE ON . TO 'rep'@'%';
4.创建从服务器
docker run -p 3308:3306 --name mysql_slave -v /docker/mysql_slave/conf:/etc/mysql/conf.d -v /docker/mysql_slave/logs:/logs -v /docker/mysql_slave/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
5.在/docker/mysql_slave/conf创建从库配置文件 进入 镜像 docker exec -it 9c81451a21e4 /bin/bash 重启service mysql restart docker 重启
[mysqld] server-id=2
6.查看 docker 镜像ip docker inspect --format=’{{.NetworkSettings.IPAddress}}’ 容器名称/容器id
在从库执行如下命令 CHANGE MASTER TO MASTER_HOST='172.17.0.9', MASTER_PORT=3306,MASTER_USER='rep',MASTER_PASSWORD='123456';
change master to master_host='172.17.0.9', master_port=3306,master_user='rep',master_password='123456', master_log_file='mysql-bin.000001',master_log_pos=956;
7.start slave; 启动slave 查看主从状态 show slave status;
1.mysql主从不同步解决 show slave status; 查看同步状态及错误
stop slave; set global sql_slave_skip_counter =1 ; start slave;