本文主要讲的是docker中安装的mysql搭建主从复制,其实和网上的一些其他教程是一样的,主要是记录下自己遇到的问题。
1、首先进入mysql容器中:
2、 进入mysql安装目录,修改配置文件:
注意:这里不是 etc/mysql/my.cnf, 而是 etc/mysql/mysql.conf.d/mysqld.cnf ;
很多教程都是修改的前者,会导致mysql重启失败,这是本人遇到的坑。
编辑此配置文件,主库增加如下配置:
server-id = 1
log-bin=master-bin //主服务器日志文件//
log-slave-updates=true //从服务器更新二进制日志//
#可选配置
#binlog-do-db=mstest //要同步的mstest数据库
#binlog-ignore-db=mysql //要忽略的数据库
(如果容器内没有用安装vim,请参考:https://blog.csdn.net/HXNLYW/article/details/90238247):
从库增加如下配置:
server-id = 2
relay-log=relay-log-bin //从主服务器上同步日志文件记录到本地//
relay-log-index=slave-relay-bin.index //定义relay-log的位置和名称//
3、主从数据库修改完配置均需要重新启动:
4、主库创建同步用户:
用第三方工具(navicat)连接到主数据库,依次执行如下语句,看到截图内容,则表示主库配置成功:
CREATE USER 'replication'@'192.168.145.%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.145.%';
show master status;
截图:
5、从库配置主库通信
同样用第三方工具(navicat)连接到从数据库,依次执行如下语句,如截图内容,Slave_IO_Running,Slave_SQL_Running
都是 Yes,则表示从库配置成功:
CHANGE MASTER TO MASTER_HOST='192.168.145.145', MASTER_USER='replication', MASTER_PASSWORD='123456', MASTER_LOG_FILE='master-bin.000008', MASTER_LOG_POS=635;
START SLAVE;
show slave status;
截图:
Slave_IO_State
#从站的当前状态 Slave_IO_Running: Yes
#读取主程序二进制日志的I/O线程是否正在运行 Slave_SQL_Running: Yes
#执行读取主服务器中二进制日志事件的SQL线程是否正在运行。与I/O线程一样
一些命令
查看主服务器的运行状态:
show master status;
查看从服务器主机列表:
show slave hosts;
获取binlog文件列表:
show binary logs;
查看指定binlog文件的内容:
show binlog events in 'mysql-bin.000001';
启动停止从库复制线程:
START SLAVE;
STOP SLAVE;
参考文章:https://segmentfault.com/a/1190000010867488
代码实现读写分离请参考(springboot+mysql):https://blog.csdn.net/HXNLYW/article/details/90519757