Docker + Mysql 搭建主从数据库

搭建主从数据库

前期准备

  • 安装docker for 安装数据库
  • 安装Kitematic for docker的client
  • 安装navicat for 访问数据库

搭建流程

版本

  • docker (18.03.1-ce-win65 (17513))
  • mysql images (5.7.20)

搭建主数据库

  • 下载镜像
docker pull mysql:5.7.20
  • 准备配置
目录C:\Users\ZHANGLE6\Documents\Kitematic\mysql_3306\etc\conf 新建 my.cnf 文件

内容:
[mysqld]
## 同一局域网内注意要唯一
server-id=100  
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
  • 运行镜像
docker run -p 3306:3306 -v /c/Users/ZHANGLE6/Documents/Kitematic/mysql_3306/var/lib/mysql:/var/lib/mysql -v /c/Users/ZHANGLE6/Documents/Kitematic/mysql_3306/etc/conf/my.cnf:/etc/mysql/conf.d/my.cnf -e MYSQL_ROOT_PASSWORD=123456 --name mysql_3306 -d 7d83a47ab2d2
  • 进入容器环境
 > docker exec -it {containerId/Name} bash
  • 登录mysql
> mysql -u root -p
> Enter Password : 123456
  • 检查log-bin是否开启
> grep "log-bin" /etc/mysql/conf.d/my.cnf 
> show variables where variable_name like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
  • 授权
> grant replication slave on *.* to 'backup'@'%' identified by '123456';
> show grants for 'backup';
  • 看master状态
> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |      439 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

搭建从数据库

  • 准备配置(注意server-id必须不一样)
目录C:\Users\ZHANGLE6\Documents\Kitematic\mysql_3307\etc\conf 新建 my.cnf 文件

内容:
[mysqld]
## 设置server_id,注意要唯一
server-id=101  
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin   
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin 
  • 运行镜像
docker run -p 3307:3306 -v /c/Users/ZHANGLE6/Documents/Kitematic/mysql_3307/var/lib/mysql:/var/lib/mysql -v /c/Users/ZHANGLE6/Documents/Kitematic/mysql_3307/etc/conf/my.cnf:/etc/mysql/conf.d/my.cnf -e MYSQL_ROOT_PASSWORD=123456 --name mysql_3307 -d 7d83a47ab2d2
  • 进入容器环
 > docker exec -it {containerId/Name} bash
  • 连接master数据库
> change master to master_host='172.17.0.2', master_user='backup', master_password='123456', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos= 439, 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秒
  • 开启slave
start slave
  • 查看状态
show slave status \G;

重要参数:
Slave_IO_Running : ON (配置好,但是没有启动) /Yes (配置好,并且启动层高)
Slave_SQL_Running : ON (配置好,但是没有启动) /Yes (配置好,并且启动层高)

测试

现在开始,在主表做什么时候都会复制都从表

你可能感兴趣的:(SpringBoot)