1.docker拉取mysql5.6
docker pull mysql:5.7
2.启动两个mysql对外开放不同端口(应用本地配置跟本地数据目录-v参数)
docker run -p 3339:3306 --name mastermysql --privileged=true -v /data/docker/mysql/conf/master.cnf:/etc/mysql/my.cnf -v /data/docker/mysql/master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
docker run -p 3340:3306 --name slave1mysql --privileged=true -v /data/docker/mysql/conf/slave1.cnf:/etc/mysql/my.cnf -v /data/docker/mysql/slave1/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
注意datadir数据保存目录(docker内部目录 run时挂载到外部于此相同)
因为配置都是事先配置好的所以直接启动就好,然后进master机器配置同步账户
CREATE USER 'slave1'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave1'@'%';
注意这个用户会在slave的mysql中用到
master机器中查看File和Position字段:show master status;slave做同步用到
查看mater的对外ip,后面做同步用
在slave中进入mysql,执行
change master to master_host='192.168.0.4', master_user='slave1', master_password='123456', master_port=3306, master_log_file='mysql-bin.000004', master_log_pos= 887, master_connect_retry=30;
master_host :Master的地址,指的是容器的独立ip,可以通过docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id查询容器的ip
master_port:Master的端口号,指的是容器的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
在Slave 中的mysql终端执行show slave status \G;用于查看主从同步状态。
正常情况下,SlaveIORunning 和 SlaveSQLRunning 都是No,因为我们还没有开启主从复制过程。使用start slave开启主从复制过程,然后再次查询主从同步状态show slave status \G;。
测试本地配置和本地数据目录是否被应用
再去看目录
大功告成!
主从不同步及解决方式自行百度