docker中如何实现MySQL主从

一:安装docker

二:拉取镜像

docker pull mysql:5.7

三:环境介绍

数据库主节点master
docker run -p 3306:3306 --name master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
# 查看masterIP地址
docker inspect master | grep 'IPAddress' | awk -F: '{print $2}' | tail -n 1
72.17.0.2
数据库从节点slave
docker run -p 3307:3306 --name slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
apt-get update && apt-get install vim
# 查看slaveIP地址
docker inspect slave | grep 'IPAddress' | awk -F: '{print $2}' | tail -n 1
172.17.0.3
进入容器(主从,执行下列代码)
docker -exec -it master /bin/bash
apt-get update && apt-get install vim

四:修改配置文件

master
vim /etc/mysql/mysql.conf.d/mysqld.cnf 

server-id=1
log-bin=mysql-bin #开启二进制文件
#binlog-do-db=demo    #需要同步的二进制数据库名;
binlog-ignore-db=information_schema    #不同步的二进制数据库名,如果不设置可以将其注释掉;
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
#log-slave-update  #这个是把更新的记录写到二进制文件中;  
slave
vim /etc/mysql/mysql.conf.d/mysqld.cnf 

server-id=2 # 这个必须要有,但是id号不能相同
relay-log=/var/lib/mysql/relay.log  # 这个文件如果mysql创建不了,手动创建记得修改权限
重启
service mysql restart

五:重启容器

master
docker start master
slave
docker start slave
警告重新进入一下容器
master
1>锁表,先加锁,防止两边数据不一致;如果业务还未上线,这个就没有必要了
mysql> flush tables with read lock;

2>创建授权用户
mysql> grant replication slave on *.* to 'slave'@'172.17.0.3' identified by '123456';

3>查看binglog信息,只有打开二进制日志,这句命令才有结果,表示当前数据库的二进制日志写到什么位置
mysql> show master status\G;
*************************** 1. row ***************************
             File: mysql-bin.000002
         Position: 154
     Binlog_Do_DB: 
 Binlog_Ignore_DB: information_schema,mysql,performance_schema,sys
Executed_Gtid_Set: 
1 row in set (0.00 sec)


# 注意:此时千万不要往里面写东西
slave
mysql> change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000002', master_log_pos=154;
参数说明:
    master_host:        master ip
    master_user:        同步用户
    master_password:    密码
    master_port:     端口
    master_log_file:    master上面查看到的二进制日志名
    master_log_pos:     master上面查看到的POS值

mysql>slave start;

mysql> show slave status \G;
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes

六:测试

1

image-20200917221351846

2

image-20200917221449018

3

image-20200917221708804

4

image-20200917221841828

posted @ 2020-09-17 22:28  为了等  阅读(535)  评论(0编辑  收藏  举报