mysql replication by mysqldump & xtrabackup

本文介绍两种不停止MySQL服务增加从库的方法:使用mysqldump进行逻辑备份和使用Xtrabackup进行物理备份。详细步骤包括配置主从复制、备份及恢复等。

不停止 MySQL 服务增加从库的两种方式

现在生产环境MySQL数据库是一主一从,由于业务量访问不断增大,故再增加一台从库。前提是不能影响线上业务使用,也就是说不能重启MySQL服务,为了避免出现其他情况,选择在网站访问量低峰期时间段操作。

一般在线增加从库有两种方式,一种是通过mysqldump备份主库,恢复到从库,mysqldump是逻辑备份,数据量大时,备份速度会很慢,锁表的时间也会很长。另一种是通过xtrabackup工具备份主库,恢复到从库,xtrabackup是物理备份,备份速度快,不锁表。为什么不锁表?因为自身会监控主库日志,如果有更新的数据,就会先写到一个文件中,然后再回归到备份文件中,从而保持数据一致性。

服务器信息:

  • 主库:192.168.18.212(原有)
  • 从库1:192.168.18.213(原有)
  • 从库2:192.168.18.214(新增)
  • 数据库版本:MySQL5.5
  • 存储引擎:Innodb
  • 测试库名:weibo

一、mysqldump方式

MySQL主从是基于binlog日志,所以在安装好数据库后就要开启binlog。这样好处是,一方面可以用binlog恢复数据库,另一方面可以为主从做准备。

原有主库配置参数如下:

1. 主库创建同步账号

2. 从库配置MySQL

3. 备份主库

参数说明:

  • –routines:导出存储过程和函数
  • –single_transaction:导出开始时设置事务隔离状态,并使用一致性快照开始事务,然后unlock tables;而lock-tables是锁住一张表不能写操作,直到dump完毕。
  • –master-data:默认等于1,将dump起始(change master to)binlog点和pos值写到结果中,等于2是将change master to写到结果中并注释。

4. 把备份库拷贝到从库

5. 在主库创建test_tb表,模拟数据库新增数据,weibo.sql是没有的

6. 从库导入备份库

7. 在备份文件weibo.sql查看binlog和pos值

8. 从库设置从这个日志点同步,并启动

可以看到IO和SQL线程均为YES,说明主从配置成功。

9. 从库查看weibo库里面的表

发现刚才模拟创建的test_tb表已经同步过来!

二、xtrabackup方式(推荐)

在上面配置基础上做实验,先删除掉从库配置:

此时,从库现在和新装的一样,继续前进!

1. 主库使用xtrabackup备份

生成一个以时间为命名的备份目录:2015-07-01_16-49-43

2. 把备份目录拷贝到从库上

3. 从库上把MySQL服务停掉,删除datadir目录,将备份目录重命名为datadir目录

4. 在主库创建test_tb2表,模拟数据库新增数据

5. 从备份目录中xtrabackup_info文件获取到binlog和pos位置

6. 从库设置从这个日志点同步,并启动

可以看到IO和SQL线程均为YES,说明主从配置成功。

9. 从库查看weibo库里面的表

发现刚才模拟创建的test_tb2表已经同步过来。

更多Xtrabackup使用查看博文:http://blog.jobbole.com/94629/

### XtraBackupMySQL 主从复制配置 XtraBackup 是 Percona 提供的一个用于 InnoDB 存储引擎的热备份工具,支持在线进行数据库的物理备份,并且可以用于搭建主从复制环境。通过 XtraBackup 进行主从同步的配置通常包括以下几个关键步骤。 #### 备份主库数据 在主库上执行完整备份是配置主从复制的第一步。使用 `innobackupex` 工具可以创建一个一致性快照,同时保留事务日志信息,以便后续恢复和同步。以下是一个完整的备份命令示例: ```bash innobackupex --defaults-file=/data/dbdata/3306/my.cnf --user=root --password=kongzhong123 --port=3306 --socket=/data/dbdata/3306/mysql.sock --no-lock --slave-info --safe-slave-backup --compress --compress-threads=8 /data/bak_dir/mysql/3306/full/ > /data/bak_dir/mysql/3306/full.log 2>&1 ``` 该命令会生成一个压缩的完整备份,并将日志记录到指定文件中[^1]。 #### 恢复备份并准备从库 完成备份后,需要对备份进行“准备”操作,以确保其可用于恢复。以下是准备备份的命令: ```bash innobackupex --apply-log /data/bak_dir/mysql/3306/full/ ``` 如果使用了压缩备份,则需要先解压备份文件,再执行上述命令。准备好备份后,将其传输到从库服务器,并恢复到目标目录。 #### 配置从库 在从库上恢复备份后,需要配置从库以连接到主库。以下是在从库上设置主库信息的 SQL 命令: ```sql CHANGE MASTER TO MASTER_HOST='192.168.1.154', MASTER_USER='maxscale_monitor', MASTER_PASSWORD='maxscale123456', MASTER_PORT=3306, MASTER_LOG_FILE='master1-bin.000011', MASTER_LOG_POS=598081860, MASTER_USE_GTID=slave_pos, MASTER_CONNECT_RETRY=10; ``` 其中 `MASTER_LOG_FILE` 和 `MASTER_LOG_POS` 的值可以从主库的备份信息中获取,或者通过 `SHOW MASTER STATUS` 获取最新的二进制日志位置[^2]。 #### 启动从库复制线程 在从库上执行以下命令启动复制线程: ```sql START SLAVE; ``` 随后可以通过以下命令查看从库的状态: ```sql SHOW SLAVE STATUS \G ``` 确认 `Slave_IO_Running` 和 `Slave_SQL_Running` 状态均为 `Yes`,表示主从复制已经成功启动。 #### 注意事项 1. **GTID 与非 GTID 模式**:如果主库启用了 GTID(全局事务标识符),则从库也应启用 GTID 模式,并在 `CHANGE MASTER TO` 命令中指定 `MASTER_USE_GTID=slave_pos`。这有助于简化故障切换和复制拓扑管理。 2. **MySQL 版本兼容性**:不同版本的 MySQL 在复制行为上可能有所不同,尤其是在 GTID 的处理方面。确保主从库的 MySQL 版本兼容性,避免因版本差异导致的问题。 3. **网络连接与权限**:确保从库能够通过网络访问主库,并且用于复制的用户具有足够的权限(如 `REPLICATION SLAVE` 权限)。 4. **定期检查复制状态**:即使复制正常运行,也应定期检查从库的复制状态,确保没有延迟或错误。 5. **重启服务**:如果在配置过程中修改了 MySQL 的配置文件,可能需要重启 MySQL 服务以使更改生效。可以使用以下命令重启服务: ```bash service mysql restart ``` 此命令适用于基于 SysVinit 的系统。如果是 systemd 系统,则应使用 `systemctl restart mysql` [^3]。 6. **增量备份与恢复**:除了完整备份外,还可以使用 XtraBackup 进行增量备份。增量备份仅捕获自上次备份以来发生变化的数据页,适用于频繁备份需求。恢复时需先应用完整备份,然后依次应用增量备份。 7. **逻辑备份与物理备份的选择**:虽然 XtraBackup 提供了高效的物理备份方式,但在某些情况下(如跨版本迁移、表结构变更等),逻辑备份(如 `mysqldump`)可能更为合适。逻辑备份可以避免因存储引擎或版本差异导致的兼容性问题[^5]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值