Mysql 主从部署
基于
Docker
的Mysql
主从部署测试,Mysql
版本为8.0.18
准备工作
从Docker
镜像仓库拉取Mysql
的镜像(由于只是为了测试主从部署,所以并没有刻意的去限定版本)
1 | // 拉取Mysql镜像到本地 |
为了简化测试过程的docker命令编写,这边使用了docker-compose
辅助进行容器创建控制操作。
为了实现主从部署,我们还需要修改一些配置文件。根据Docker Mysql官方的镜像描述称可通过VOLUMES
进行配置文件的挂载进行配置文件的加载。
但实际进行操作后发现Docker Mysql连接时会抛出UNKNOW variable
的异常。后改用启动参数方式设置配置参数,经测试可用。
1 | // docker 命令 |
1 | # docker-compose 配置 |
具体配置内容如下
Master端:
1 | server_id=1 // 节点标识,不可重复 |
slave端:
1 | server_id=[primary identity] // 节点标识 不可重复 |
权限配置
由于需要进行主从同步,我们需要让从数据库有权限从主数据库取到binlog并进行同步。则我们需要在主数据库进行一个账户权限的开放。
1 | CREATE USER '[username]'@'%' IDENTIFIED WITH mysql_native_password BY '[your password]'; |
完成这两步之后再进行一个登录的尝试,成功登录后,账户权限的开放就完成了。
主从同步
在完成账户权限的开放后,我们就需要建立主从之间的连接了。
首先既然是主从同步,从数据库需要知道主数据库的地址,连接用户名密码,要读取的binlog日志文件,以及从日志文件开始同步的位置。
数据库的连接地址,用户名密码我们都知道了,那么binlog日志文件和同步的位置我们从哪里获取呢。
我们可以在主数据库执行SHOW MASTER STATUS;
。
File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
---|---|---|---|---|
mysql-bin.000003 | 155 | datebase name |
日志文件,对应的就是File字段。日志文件开始同步的位置,对应的就是Position字段。
切换到从数据库,我们就需要开始配置连接主数据库的内容了。
1 | CHANGE MASTER TO |
在配置完主数据库后,就可以通过执行START SLAVE;
命令进行主从同步的过程。通过SHOW SLAVE STATUS\G;
命令,可以查看主从同步情况,若连接无问题,则slave_io_running
和slave_sql_running
值都为YES。
我们可以在主数据库插入一条数据,然后回到从数据库查看情况。若主数据库插入成功之后从数据库没有同步成功,则我们可以通过SHOW SLAVE STATUS\G;
命令的ERROR_MSG
查看原因。