基于Docker的MySql主从复制

一 创建MySql Master服务镜像

1.创建目录及文件mysql-master并进入

mkdir mysql-master
cd mysql-master
touch Dockerfile
touch mysql.cnf

2.编辑相关文件

FROM mysql:latest 
COPY mysql.cnf /etc/mysql/conf.d/mysql.cnf


[mysqld]
log-bin=mysql-bin   #[必须]启用二进制日志
server-id=1           #设置为主机ip

3.构建镜像

docker build -t mysql-master .

4.启动镜像

docker run --privileged=true -p 3308:3306 --name mysql-master -v /var/docker/mysql/data-master/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_USER=dev -e MYSQL_PASSWORD=dev -d mysql-master

5.连接到启动的MySQL服务,执行授权命令

GRANT REPLICATION SLAVE ON *.* TO 'repl_dev'@'%' IDENTIFIED BY 'repl_dev'; 

6.查看从节点连接参数

FLUSH TABLES WITH READ LOCK;
UNLOCK TABLES; 
SHOW MASTER STATUS; --file和position参数要用于从节点配置

二 创建从节点镜像

1.创建目录及文件mysql-master并进入

mkdir mysql-slave
cd mysql-slave
touch Dockerfile
touch mysql.cnf

2.编辑相关文件

FROM mysql:latest 
COPY mysql.cnf /etc/mysql/conf.d/mysql.cnf


[mysqld]
#log-bin=mysql-bin   #[必须]启用二进制日志
server-id=2           #设置为主机ip
relay-log=slave-relay-bin

3.构建镜像

docker build -t mysql-slave .

4.启动镜像

docker run --privileged=true -p 3308:3306 --name mysql-slave -v /var/docker/mysql/data-slave /:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_USER=dev -e MYSQL_PASSWORD=dev -d mysql-slave 

5.连接到启动的MySql服务,执行以下命令(其中各个参数值需要根据步骤一种的相关配置来进行设置)

change master to 
master_host='10.10.10.221',
master_port=3308,
master_user='repl_dev',
master_password='repl_dev',
master_log_file='mysql-bin.000003',
master_log_pos=433;
START SLAVE;

6.查看并测试

show slave status 

如果Slave_IO_State字段的值为 Waiting for master to send event

此时,连接Master服务器,创建数据库,数据表,并插入数据,查询刷新slave节点,可以看到数据已经同步过来了

你可能感兴趣的:(MySQL)