安装主机
docker run --name mysql-master -v /home/mysql/master/data:/var/lib/mysql -v /home/mysql/master/conf:/etc/mysql -p 12345:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
看了网上其他人安装的过程,不是少了配置文件的挂载就是挂载目录出错,这里注意mysql5.7的配置文件目录是在/etc/mysql。
接着在自己挂载的配置文件目录找到my.cnf文件,vim修改
vim my.cnf
加上下面的配置项
[mysqld]
log-bin=mysql-bin
server-id=1
开启二进制日志,设置id为1表示master
连接mysql,可以在docker连也可以用navicat等数据库工具
docker exec -it mysql-master bin/bash
连接:
mysql -uroot -proot
创建一个专门用来复制二进制日志文件的账号
grant replication slave on *.* to 'hrr'@'%' identified by 'hrr';
flush privileges;
然后执行
show master status;
记录此时的file与position,不要操作这个数据库,后面配置从机需要
安装从机
同主机安装,有点小区别:
docker run --name mysql-slave -v /home/mysql/slave/data:/var/lib/mysql -v /home/mysql/slave/conf:/etc/mysql -p 12346:3306 --link mysql-master:master -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
注意这里的–link,因为docker里的主从机network是不互通的,把从机链接到主机,简化名称master,让他们之间可以互通
进入从机
docker exec -it mysql-slave bash
mysql -uroot -proot
根据刚才得到的主机日志文件与position信息,将从机连接到主机
change master to master_host='master', master_user='hrr', master_password='hrr', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=581, master_connect_retry=30;
注意master_port要是docker主机内部实际的端口
start slave;
开启slave
然后查看
show slave status\G;
Slave_IO_State: Waiting for master to send event
Master_Host: master
Master_User: hrr
Master_Port: 3306
Connect_Retry: 30
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 581
Relay_Log_File: 6774ae81bc25-relay-bin.000034
Relay_Log_Pos: 367
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
....
Master_Server_Id: 1
Master_UUID: 8976b929-bc8b-11e9-bab3-0242ac110005
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
....
1 row in set (0.00 sec)
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
这两个参数为yes就表示主从同步成功
然后主机新建库新建表,新增数据,从机相应也会有相同的数据
结束!