linux :cenos7
docker pull mysql:5.6
docker run -p 3309:3306 --name mymysqlmaster2 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.6
docker run -p 3310:3306 --name mymysqlslave2 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.6
master对外映射的端口是3309,slave对外映射的端口是3310。因为docker容器是相互独立的,每个容器有其独立的ip,所以不同容器使用相同的端口并不会冲突。这里我们应该尽量使用mysql默认的3306端口,否则可能会出现无法通过ip连接docker容器内mysql的问题。
docker ps
docker exec -it 容器id /bin/bash
docker exec -it ec61ee948cd8 /bin/bash
进入配置文件夹
cd /etc/mysql
更新命令,有点久,耐心等待
apt-get update
安装vim命令,有点久,耐心等待
apt-get install vim
vim编辑my.cnf
[mysqld]
## 同一局域网内注意要唯一
server-id=100
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
重启mysql服务
service mysql restart
重启mysql服务会导致容器停止,重启容器
docker start mymysqlmaster2
进入容器
docker exec -it ec61ee948cd8 /bin/bash
进入mysql
mysql –u root -p
在Master数据库创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。
CREATE USER 'slave'@'%' IDENTIFIED BY 'root';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
进入从库
docker exec -it 3f059d45a02c /bin/bash
进入
cd /etc/mysql
更新
apt-get update
安装vim命令
apt-get install vim
vim编辑my.cnf
[mysqld]
## 设置server_id,注意要唯一
server-id=101
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
重启
service mysql restart
docker start mymysqlslave2
docker exec -it 3f059d45a02c /bin/bash
进入mysql
mysql –u root -p
CREATE USER 'slave'@'%' IDENTIFIED BY 'root';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
用navicat打开mysql主数据库,查询以下语句。
show master status
File和Position字段的值后面将会用到,记住查询出来的值
查看容器ip
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id
docker inspect --format='{{.NetworkSettings.IPAddress}}' mymysqlmaster2
在slave 中进入 mysql,执行
change master to master_host='172.17.0.4', master_user='slave', master_password='root', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 1832, master_connect_retry=30;
这句话代表,从数据库可以从主数据同步数据,包含了通信的ip地址和文件,和重试的参数。
其中
master_host:主数据库的ip,即刚才查看容器ip的查询结果
master_user:用于同步的数据库用户
master_password:用户的密码
master_log_file,master_log_pos为主数据库show master status查出来的数据。
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
start slave
打开navicate连接mysql从数据库查看状态
show slave status
看到这两个参数为yes的话,就安装配置完成了。
在主库创建数据库db5,发现从数据库自动创建了db5了,验证完毕。