概论
在日常开发场景中,迁移数据库是非常常见的。但是线上业务系统进行迁移,并不是见一个简单的问题,必须考虑到迁移过程中线上系统的可用性、性能等。本文针对MySQL对迁移策略进行讨论。
实现方法
思路一:binlog
MySQL的binlog日志是一种二进制格式的日志,binlog记录所有的DDL和DML语句,以Event的形式记录,同时记录语句的执行时间。其主要的应用场景为:
- 数据恢复:通过日志数据恢复因为数据库宕机等不可抗力产生的数据丢失。
- 主从复制:多机备份,可以监听binlog日志,同步写库的更改。
这么一看,binlog简直完美符合数据迁移的场景。Mysql中的数据在大批量导出的时候会容易阻塞,导致数据库慢查询,然后我们的优化思路是在写数据到数据库的时候同时监听数据库binlog到其他库中。
好处:
- 不会因为数据导出的慢查询
- 监听binlog的方式可以使得代码解耦
思路二:双写
采用在写入数据库的时候再同时写入新的库,如果对性能要求比较高,可以将写入操作作为移步任务添加到一个线程安全队列。