【Docker -Mysql5.7 配置主从】
1.创建 两个 mysql5.7 的容器
注意:系统是centos7,mysql默认密码为:root
从数据库用户名:slave
1.1 主数据库容器 (mysql-master)
创建容器:
docker run -p 3307:3306 --name mysql-master \
-v /home/traynor/mysql/master/log:/var/log/mysql \
-v /home/traynor/mysql/master/data:/var/lib/mysql \
-v /home/traynor/mysql/master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
1.1.1 创建成功之后检查容器挂载是否正常~
1.1.2 在**/home/traynor/mysql/master/conf**目录下新建 my.cnf,
文件内容为:
[mysqld]
## 设置server id 同一局域网中需要唯一
server_id=101
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能
log-bin=mall-mysql-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间,默认值为0 ,表示不自动清理
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave复制中断。
## 如:1062错误是指一些逐渐重复,1032错误是主从数据库不一致
slave_skip_errors=1062
1.1.3 重启mysql-master容器
1.1.4 进入mysql-master容器配置从数据库账户
让从数据库有权限从主数据库拉取数据,执行命令:
(1)进入容器
docker exec -it mysql-master /bin/bash
(2)登陆mysql:
mysql -uroot -proot
(3)设置 从数据库 账户信息:
CREATE USER 'slave'@'%' IDENTIFIED BY 'root';
GRANT REPLICATION SLAVE,REPLICATION SLAVE ON *.* TO'slave'@'%';
1.2 从数据库容器(mysql-slave)
创建容器:
docker run -p 3308:3306 --name mysql-slave \
-v /home/traynor/mysql/slave/log:/var/log/mysql \
-v /home/traynor/mysql/slave/data:/var/lib/mysql \
-v /home/traynor/mysql/slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
1.2.1 创建成功之后检查容器挂载是否正常~
1.2.2 在**/home/traynor/mysql/slave/conf**目录下新建 my.cnf,
文件内容为:
[mysqld]
## 设置server id 同一局域网中需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能
log-bin=mall-mysql-slave1-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间,默认值为0 ,表示不自动清理
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave复制中断。
## 如:1062错误是指一些逐渐重复,1032错误是主从数据库不一致
slave_skip_errors=1062
## relay_log 配置中继日志
relay_log=mall-mysql-relay-bin
## log_slave_updates 表示slave将复制时间写进自己的二进制日志
log_slave_updates=1
## slave设置为制度(具有 super 权限的除外)
read_only=1
1.2.3 重启mysql-slave容器
2. 配置容器:
2.1 进入mysql-master 容器
docker exec -it mysql-master /bin/bash
登录mysql:
mysql -uroot -proot
获取从数据库配置需要的信息:
show master status;
结果为:
mysql> show master status;
+-----------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------------+----------+--------------+------------------+-------------------+
| mall-mysql-bin.000001 | 965 | | mysql | |
+-----------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
2.2进入mysql-slave容器
docker exec -it mysql-slave /bin/bash
登录mysql
mysql -uroot -proot
设置登入住数据库:
CHANGE MASTER TO MASTER_HOST='主数据库ip', MASTER_USER='slave', MASTER_PASSWORD='root',MASTER_PORT=3307, MASTER_LOG_FILE='mall-mysql-bin.000001', MASTER_LOG_POS=154,MASTER_CONNECT_RETRY=30;
启动!!!
start slave;
配置完成
3. 检查配置
登入从数据库后,执行:
show slave status;
显示结果中,下面两项都是yes即为配置成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
可以在主数据库建表插入数据验证~