24 05 2020

1、拉取MySQL5.7镜像到本地

docker pull mysql:5.7


2、准备MySQL配置文件

在本地host主机上自定义某个目录(如 /data/mysql/conf/),先创建两个文件master.conf 和 slave.conf,分别用于配置主从两个节点

/data/mysql/conf/master.conf

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
log_bin = log   # 开启二进制日志,用于从节点的历史复制会放
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
server_id = 1 # 需保证主库和从库的server_id不同,假设主库设为1
replicate-do-db=fileserver  # 需要复制的数据库名,需复制多个的话则重复设置这个选项


/data/mysql/conf/slave.conf

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
log_bin = log   # 开启二进制日志,用于从节点的历史复制会放
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
server_id = 2 # 需保证主库和从库的server_id不同,假设从库设为2
replicate-do-db=fileserver  # 需要复制的数据库名,需复制多个的话则重复设置这个选项


3、Docker分别运行MySQL主从两个容器

将mysql主节点运行起来

mkdir -p /data/mysql/datam  // 创建主库数据存放文件夹

docker run -d --name mysql-master -p 13306:3306 -v /data/mysql/conf/master.conf:/etc/mysql/mysql.conf.d/mysqld.cnf -v /data/mysql/datam:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

运行参数说明:
--name mysql-master 容器的名称设为mysql-master
-p 13306:3306 将host的13306端口映射到容器的3306端口
-v /data/mysql/conf/master.conf:/etc/mysql/mysql.conf.d/mysqld.cnf     master.conf配置文件挂载
-v /data/mysql/datam:/var/lib/mysql    mysql容器内数据挂载到host的/data/mysql/datam, 用于持久化
-e MYSQL_ROOT_PASSWORD=123456   mysql的root登录密码为123456


将mysql从节点运行起来

mkdir -p /data/mysql/datas  // 创建从库数据存放文件夹

docker run -d --name mysql-slave -p 13307:3306 -v /data/mysql/conf/slave.conf:/etc/mysql/mysql.conf.d/mysqld.cnf -v /data/mysql/datas:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

运行参数说明:
--name mysql-slave 容器的名称设为mysql-slave
-p 13307:3306 将host的13307端口映射到容器的3306端口
-v /data/mysql/conf/slave.conf:/etc/mysql/mysql.conf.d/mysqld.cnf     slave.conf配置文件挂载
-v /data/mysql/datas:/var/lib/mysql    mysql容器内数据挂载到host的/data/mysql/datas, 用于持久化
-e MYSQL_ROOT_PASSWORD=123456   mysql的root登录密码为123456


4、登录MySQL主节点配置同步信息

// 登录主节点mysql
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY 'slave';  // 创建同步用户

flush privileges;

create database fileserver default character set utf8mb4;


再获取status, 得到类似如下输出

show master status \G;

image.png



5、登录MySQL从节点配置同步信息

stop slave;

create database fileserver default character set utf8mb4;

CHANGE MASTER TO MASTER_HOST='本机ip如192.168.x.x',master_port=13306,MASTER_USER='slave',MASTER_PASSWORD='slave',MASTER_LOG_FILE='log.000003',MASTER_LOG_POS=797;
# 注意其中的日志文件和数值要和主库 show master status 的值一致

start slave;


再获取从库status, 得到类似如下输出

show slave status \G;

image.png


到这时说明主从配置已经完成,可以尝试在主mysql的fileserver的数据库里建表操作下,然后在从节点上检查数据是否已经同步过来