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