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