docker mysql 主从同步(一主多备)
docker mysql 主从同步(一主多备)
获取mysql的docker镜像
镜像地址:[https://hub.docker.com//mysql](https://hub.docker.com//mysql)
docker pull mysql:tag
#docker pull mysql:5.7
主库的建立 启动脚本(master)
#! /bin/sh
cur_dir=$(pwd)
name=master
port=13306
data_dir=data_${name}
if [ ! -d ${data_dir} ] ; then
mkdir -p ./${data_dir}
fi
conf_dir=${name}_mysql_conf
if [ ! -d ${conf_dir} ] ; then
mkdir -p ./${conf_dir}
fi
mount_data_dir=${cur_dir}/${data_dir}
config_data_dir=${cur_dir}/${conf_dir}
docker run --name ${name}-mysql -v ${mount_data_dir}:/var/lib/mysql -v ${config_data_dir}:/etc/mysql/conf.d -p ${port}:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
启动之
进入容器 连上mysql
docker exec -it master-mysql /bin/bash
mysql -uroot -p123456
添加从库操作用户
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO repl@'172.17.0.%' IDENTIFIED BY '123456';
#退出mysql
ctrl+D
#退出容器
exit
记下这里的操作用户名:repl 以及密码:123456
编辑 mysql-master 配置
vi ./master_mysql_conf/master.cnf
[master.cnf]
[mysqld]
log_bin = mysql-bin
server_id = 10
重启master-mysql
docker restart master-mysql
ps 查看状态(进入master mysql用下列语句查看)
SHOW MASTER STATUS;
备库的建立 启动脚本(slave)
类似master的脚本(换个name跟port)
#! /bin/sh
cur_dir=$(pwd)
name=slave
port=13308
data_dir=data_${name}
if [ ! -d ${data_dir} ] ; then
mkdir -p ./${data_dir}
fi
conf_dir=${name}_mysql_conf
if [ ! -d ${conf_dir} ] ; then
mkdir -p ./${conf_dir}
fi
mount_data_dir=${cur_dir}/${data_dir}
config_data_dir=${cur_dir}/${conf_dir}
docker run --name ${name}-mysql -v ${mount_data_dir}:/var/lib/mysql -v ${config_data_dir}:/etc/mysql/conf.d -p ${port}:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
启动之
添加从库配置
vi ./slave_mysql_conf/slave.cnf
slave.cnf
[mysqld]
log_bin = mysql-bin
server_id = 2
relay_log = /var/lib/mysql/mysql-relay-bin
log_slave_updates = 1
#只读模式 只从master读数据过来
read_only = 1
重启slave 连接mysql
docker restart slave-mysql
docker exec -it slave-mysql /bin/bash
mysql -uroot -p123456
启动同步
CHANGE MASTER TO MASTER_HOST='172.17.0.2',
MASTER_USER='repl',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=0;
#开始同步
START SLAVE;
MASTER_USER:前面写的操作用户 repl
MASTER_PASSWORD:前面写的操作用户的密码 123456
MASTER_LOG_FILE: 默认尾缀应该是000001
MASTER_LOG_POS: 写0 就是从头开始 写master的status显示的值就是从此刻开始
ps
MASTER_HOST 可以通过docker 查看 master-mysql的docker ip 我的是172.17.0.2 故而写172.17.0.2