前置条件:服务器已配置Docker环境
1.查询mysql镜像
docker search mysql;
拉取镜像
docker pull mysql
2.创建两个mysql容器
执行命令docker images; 查到到我们拉取的镜像
执行命令创建主容器mysql-master
docker run -di --name=mysql-master -p 33308:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
创建从容器mysql-slave
docker run -di --name=mysql-slave -p 33309:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
-p 代表端口映射,格式为 宿主机对外暴露的端口:容器运行端口 -e 代表添加环境变量 MYSQL_ROOT_PASSWORD是root用户的登陆密码
33308与33309端口 是楼主在阿里云机器上对外暴露的端口
3.修改主容器配置
执行命令进入到Master容器内部
docker exec -it mysql-master /bin/bash
docker容器是轻量级的嘛,所以有些操作命令是不支持的,我们还需要安装一下
yum install -y which
查看mysql安装文件夹
which mysql
执行下面的命令查看配置文件my.cnf所在位置
/usr/bin/mysql --verbose --help|grep -A 1 'Default options'
/etc/my.cnf是我们的配置文件 执行命令vi /etc/my.cnf (如果报错vi: command not found,执行yum install vi)
#保证唯一性
server-id=1
#开启binlog日志并设置文件名字
log_bin=master-bin
保存完 重启容器
docker stop mysql-master;
docker start mysql-master;
4.修改从容器配置
进入容器
docker exec -it mysql-slave /bin/bash
修改配置文件 (假如报错vi: command not found 执行yum install vi)
vi /etc/my.cnf
把下面的配置粘贴进去
#保证唯一性
server-id=2
#开启relay日志并设置文件名字
relay_log=slave-relay
保存 重启容器
docker stop mysql-slave;
docker start mysql-slave;
5.配置主从关系
进入主容器
docker exec -it mysql-master /bin/bash
然后执行命令 连接到mysql服务
mysql -uroot -p123456
执行命令查看master状态
show master status;
可以看到binlog文件,还有文件中的索引位置。Binlog_Do_DB和Binlog_Ignore_DB这两个字段是表示需要记录binlog文件的库或者不需要记录binlog文件的库(即不需要同步的数据库)。暂时没有配置,就表示是针对全库记录日志。
然后在从容器中 连接到mysql服务 执行如下语句
change master to master_host='172.17.0.3',
master_user='root',
master_password='123456',
master_port=33308,
master_log_file='master-bin.000002',
master_log_pos= 154;
master_host :Master的地址
master_user master_password:用于同步数据时,用到的主库的用户、密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,根据你在主容器执行show master status;查询到什么,就配置什么。
master_log_pos:从哪个 Position 开始读,都是对应master中的值
执行完毕后 启动slave就可以了
start slave;
查看从节点信息
show slave status \G;
现在去主库建库、表,写数据,从库都会把数据同步过去了
参考博文