准备多个mysql容器
--name 容器的名称命名
-p 暴露端口,端口的映射 上述是本机的3307端口映射到容器内的3306端口,访问本机3307就能访问容器内的数据库(3306端口)
--privileged=true 赋予容器内以root用户来操作
-it 交互运行
--hostname docker1 容器内hostname,我是为了区分docker添加的,如果用不到可以去掉
-e MYSQL_ROOT_PASSWORD=123456 环境参数配置,配置mysql root角色的密码
-e MYSQL_DATABASE=ymq 创建一个ymq的数据库,用不到的可以删除掉
-e MYSQL_USER=user
-e MYSQL_PASSWORD=pass
`-v 非常重要,相当于docker容器的宝贵文件(相关配置,相关数据,相关日志)存放到容器外(即云服务器中),这样做的目的是不把数据放在容器内,保障数据安全`
-v /home/mysql/docker-data/3307/conf:/etc/mysql/conf.d
-v /home/mysql/docker-data/3307/data/:/var/lib/mysql
-v /home/mysql/docker-data/3307/logs/:/var/log/mysql -d mysql:5.7
-d 后台运行容器,并返回容器ID;
mysql:5.7 运行的镜像文件
mysql1
docker run --name mysqldocker1 -p 3306:3306 --privileged=true -it -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=ymq --hostname docker1 -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -v /home/mysql/docker-data/mysql1/conf:/etc/mysql/conf.d -v /home/mysql/docker-data/mysql1/data/:/var/lib/mysql -v /home/mysql/docker-data/mysql1/logs/:/var/log/mysql -d mysql:5.7
mysql2
docker run --name mysqldocker2 -p 3307:3306 --privileged=true -it -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=ymq --hostname docker2 -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -v /home/mysql/docker-data/mysql2/conf:/etc/mysql/conf.d -v /home/mysql/docker-data/mysql2/data/:/var/lib/mysql -v /home/mysql/docker-data/mysql2/logs/:/var/log/mytsql -d mysql:5.7
mysql3
docker run --name mysqldocker3 -p 3308:3306 --privileged=true -it -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=ymq --hostname docker3 -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -v /home/mysql/docker-data/mysql3/conf:/etc/mysql/conf.d -v /home/mysql/docker-data/mysql3/data/:/var/lib/mysql -v /home/mysql/docker-data/mysql3/logs/:/var/log/mytsql -d mysql:5.7
配置相关容器
查看Docker内容器状态
docker ps
现在是启动成功了,但是没有配置主从相关配置,所以我们下一步要配置MySQL。
因为运行的时候我们将容器内的配置目录挂载到本机的/home/mysql/docker-data/
下
所以我们将对应容器的配置文件复制到对应目录下的conf目录下
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
#datadir=/home/mysql/docker-data/3307/data
#socket=/home/mysql/docker-data/3307/mysql.sock
character_set_server=utf8
init_connect='SET NAMES utf8'
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
#log-error=/home/mysql/docker-data/3307/logs/mysqld.log
#pid-file=/home/mysql/docker-data/3307/mysqld.pid
#驼峰命名
lower_case_table_names=1
#主服务器唯一ID
server-id=4122
#启动二进制日志
log-bin=mysql-bin
#设置不要复制的数据库(可以设置为多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库
binlog-do-db=ymq
#设置logbin格式,格式有三种 STATEMENT & ROW & MIXED
binlog_format=STATEMENT
#步长,在双主插入时配置
#auto_increment_increment=2
#步长起始位置
#auto_increment_offset=1
#rpl_semi_sync_master_enabled=1
#rpl_semi_sync_master_timeout=10000
导入配置文件后需要重启所有mysql容器
#先查看所有容器
docker ps
#然后一个个重启相应的容器
docker restart 容器id
#因为我容器只有这三个mysql 所以我以这样方式重启全部容器
docker restart $(docker ps -aq)
配置master
进入docker1
docker exec -it 容器ID/容器名字 /bin/bash
进入mysql
根据容器的配置 我设置的密码为123456
在master mysql添加权限
GRANT REPLICATION SLAVE,FILE,REPLICATION CLIENT ON *.* TO 'repluser'@'%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
查看master的二进制文件
show master status;
配置slave
docker exec -it 容器ID/容器名字 /bin/bash
注意当看到光标前显示 root@docker2 和 root@docker3 时才表明进入成功
如果需要退出用exit进行退出。
进入slave的mysql并设置master信息
change master to master_host='172.24.7.187',master_port=3306,master_user='repluser',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=154;
开启slave,启动SQL和IO线程
start slave;
查看slave的状态
show slave status\G;
如果都为YES 就表明配置成功,主从复制搭建完成!!