【什么是 MySQL 主从备份】
引用一段最近很火的 ChatGPT(微软NewBing)给出的解释
MySQL的主从备份是为了确保数据安全,避免一台机器硬盘损坏导致数据永久丢失。主从备份的实现方式是将主数据库的数据同步到从数据库上,当主数据库出现故障时,可以快速切换到从数据库上,保证业务的正常运行。
在MySQL中,主从备份有两种实现方式:基于二进制日志的复制和基于GTID的复制。基于二进制日志的复制是MySQL自带的一种复制方式,它通过记录二进制日志来实现主从备份。而基于GTID的复制是MySQL 5.6版本之后引入的一种新的复制方式,它通过记录全局事务ID来实现主从备份。
这里我们不深究实现方式,以下介绍一种使用 docker-compose 配置主从备份实现读写分离的做法。
1. 首先,在服务器上创建一个存放 docker-compose 文件的目录,如:mysql-master-slave
ps:这里我假设你的服务器上已经安装好了 docker 以及 docker-compose。如果没有,请先参照有关 docker 安装配置的教程进行安装。
2. 在目录下方新建一个 docker-compose.yaml 文件,内容如下
ps:networks 节点中的 CIDR 和 IP 可自定义,后续会用到。
|
|
3. 在 mysql-master-slave 目录下新建目录 master、slave
4. 在 mysql-master-slave/master 和 mysql-master-slave 目录下方分别创建config目录
5. 在 master 和 slave 各自的 config 目录下方创建 docker-my.cnf 配置文件
mysql-master-slave/master/config/docker-my.cnf
|
|
mysql-master-slave/slave/config/docker-my.cnf
|
|
6. 执行 docker-compose up -d 运行两个MySQL主从容器
7. 使用root用户连接主库,创建用于同步数据的用户 repl ,并授予所需的权限(Replication)
|
|
其中 [从库所在容器的IP] 还可以通过 docker inspect mysql-readonly | grep IPAddress 查出
8. 连接主库,执行 show master status;
查询主库的状态信息,记录 File 和 Position 字段的值,下一步需要用到
查询结果示例:
|
|
9. 连接从库,执行以下命令以设置主库信息
需要将 MASTER_LOG_FILE 的值替换为上一步中 File字段 的值;
将 MASTER_LOG_POS 的值替换为上一步中 Position字段 的值;
|
|
10. 使用 Navicat 连接主库,备份需要同步的数据库,在从库中创建同名数据库,并从备份文件中还原
11. 连接从库,执行 start slave;
启动从库同步
12. 通过命令行形式连接从库,执行 show slave status\G; 查询从库的状态信息,确保 Slave_IO_Running 和 Slave_SQL_Running 的状态都为 Yes
如果不确定从库是否能正常连上主库,可以执行 docker exec -it mysql-readonly /bin/bash 进入到从库容器,
然后执行 mysql -h mysql-writeread -urepl -p,输入密码看是否能连上
13. 验证同步是否成功
① 在主库中设置了主从同步的表中创建一个 test 表,在从库中可以看到 test 表被同步过来
② 在主库中设置了主从同步的表中插入/修改/删除一条数据,在从库中可以看到数据修改后的结果
注意,同步可能会存在些许延迟