小言_互联网的博客

Docker - mysql 主从复制,主从同步

233人阅读  评论(0)

Docker - mysql 主从复制,主从同步


1、pull 镜像,启动容器

pull 镜像

docker pull mysql:5.7

启动容器

docker run -p 3307:3306 --name mysql_master -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
docker run -p 3308:3306 --name mysql_slave -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

2、查看运行状态

docker ps

检查连接


可以看到,全都OK

3、配置容器

进入到主库容器

docker exec -it mysql_master /bin/bash

更新

apt-get update

安装VIM命令

apt-get install vim


配置从库,进入从库容器

docker exec -it mysql_master /bin/bash

更新

apt-get update

安装VIM命令

apt-get install vim

4、配置mysql

使用数据库工具连接到 mysql

1、配置主库
vim /etc/mysql/my.cnf

编辑配置文件并写入如下内容

[mysqld]
server-id=100  
log-bin=mysql-master-log-bin

重启主库

service mysql restart

重启主库容器

docker start mysql_master

进入主库

docker exec -it mysql_master mysql -u root -p

创建账户

CREATE USER 'slave'@'%' IDENTIFIED BY 'slave';

授权账户

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

2、配置从库
vim /etc/mysql/my.cnf

编辑配置文件并写入如下内容

[mysqld]
server-id=101
log-bin=mysql-slave-log-bin
relay_log=mysql-slave-relay-log

重启从库

service mysql restart

重启主库容器

docker start mysql_slave

3、主从链接

查看主库的状态

查看主库,从库在docker里面的IP

docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql_master
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql_slave

进入从库,执行命令链接主库

CHANGE MASTER TO MASTER_HOST='172.17.0.2', 
MASTER_USER='slave', MASTER_PASSWORD='slave', 
MASTER_PORT=3306, MASTER_LOG_FILE='mysql-master-log-bin.000001', 
MASTER_LOG_POS= 617, 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秒

查看从库的状态

show slave status;

默认状态下,没有开启主从复制过程,需要开启

开启主从复制

start slave

然后再看,已经变yes

5、测试主从复制

进入主库,创建一个数据库,建立一个表,然后插入一条数据

CREATE DATABASE `test` /*!40100 COLLATE 'utf8mb4_general_ci' */;
CREATE TABLE `test` (
	`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
	PRIMARY KEY (`id`)
)
COLLATE='utf8mb4_general_ci'
;
INSERT INTO `test`.`test` (`id`) VALUES ('1');

这是master 的数据

看看从库的数据

可以了。


转载:https://blog.csdn.net/qq_15071263/article/details/101532436
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场