文章目录
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
查看评论