1 首先拉取mysql镜像 我选择的是mysql5.7
docker pull mysql:5.7
2 在宿主机上准备挂载的目录
我的准备截图:
mkdir /dockerData/mysqlData -p
cd /dockerData/mysqlData
mkdir mysqlMaster
mkdir mysqlSlave
cd mysqlMaster
mkdir data conf logs
cd ../mysqlSlave
mkdir data conf logs
(打错了 是创建confs不是conf 请注意 如果上面是conf 那么下面容器启动的挂载目录需要保持一致)
3 准备mysql配置文件
进入 /dockerData/mysqlData/mysqlMaster/confs
创建 my.cnf
内容如下:
[mysqld]
server-id=3306 #任意自然数n,只要保证两台MySQL主机不重复就可以了。
log-bin=mysql-bin #开启二进制日志
#auto_increment_increment=2 #步进值auto_imcrement。一般有n台主MySQL就填n
#auto_increment_offset=1 #起始值。一般填第n台主MySQL。此时为第一台主MySQL
#binlog-ignore=mysql #忽略mysql库【我一般都不写】
#binlog-ignore=information_schema #忽略information_schema库【我一般都不写】
#replicate-do-db=aa #要同步的数据库,默认所有库
进入 /dockerData/mysqlData/mysqlSlave/confs
创建 my.cnf
内容如下:
[mysqld]
server-id=3307 #任意自然数n,只要保证两台MySQL主机不重复就可以了。
log-bin=mysql-bin #开启二进制日志
#auto_increment_increment=2 #步进值auto_imcrement。一般有n台主MySQL就填n
#auto_increment_offset=1 #起始值。一般填第n台主MySQL。此时为第一台主MySQL
#binlog-ignore=mysql #忽略mysql库【我一般都不写】
#binlog-ignore=information_schema #忽略information_schema库【我一般都不写】
#replicate-do-db=aa #要同步的数据库,默认所有库
4 准备工作做完了 现在开始启动容器
master 启动指令
docker run
--privileged=true
--name mysqlmaster -d
-v /dockerData/mysqlData/mysqlMaster/data:/var/lib/mysql
-v /dockerData/mysqlData/mysqlMaster/confs:/etc/mysql/conf.d
-v /dockerData/mysqlData/mysqlMaster/logs:/logs -e MYSQL_ROOT_PASSWORD=pps123
-p 3306:3306 mysql:5.7
--privileged==true 赋予权限 避免一些奇妙问题
--name 给容器起名
-v 将mysal数据挂载到宿主机上的相应目录
-e mysql root用户的密码设置
-p 宿主机的端口对应容器的端口
slave 启动指令
docker run
--privileged=true
--name mysqlslave -d
-v /dockerData/mysqlData/mysqlSlave/data:/var/lib/mysql
-v /dockerData/mysqlData/mysqlSlave/confs:/etc/mysql/conf.d
-v /dockerData/mysqlData/mysqlSlave/logs:/logs
-e MYSQL_ROOT_PASSWORD=pps123
-p 3307:3306 mysql:5.7 //注意
5 ok 如果你的配置文件没乱写 那么都会启动成功了
docker ps
如果两个都正常运行了 那么就会显示
三 开始配置主从设置
1 进入mysqlmaster容器内部
docker exec -it mysqlmaster /bin/bash
2 登录mysql
mysql -uroot -ppps123
3
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
GRANT REPLICATION SLAVE ON *.* to 'root'@'%' identified by 'pps123'; --主机赋权限给root用户这个用户可以通过密码pps123 复制我的数据
flush privileges; --刷新权限
4 执行 show master status
记住这个结果 等会要用 file 表示 主机的二进制日志文件叫什么 position 从机应该从什么开始地方复制
5 进入从机mysqlslave容器 同样的操作 进入 mysql
执行指令:
change master to
master_host='172.17.0.2', --master的ip ! 请注意这个ip不是宿主机的 是mysqlmaster主机器的
master_user='root', --master的帐号密码
master_password='pps123',
master_log_file='mysql-bin.000003', --master 查询的file名 注意上面!
master_port=3306, --master 端口 !!!为容器端口 不是宿主机端口
master_log_pos=1269;
请注意ip不是宿主机的 是主机容器的 可以通过docker insepct mysqlmaster获得
端口也不是宿主机的 是主机容器的
6 执行指令
start slave;
show slave status;
7 查看是否成功
画红线的都是yes 才算成功!!!!
8 ok 大功告成