一、Mysql简介
Mysql 是一款跨平台的数据库系统是,被广泛地应用在中小型网站、大中型企业应用中。体积小、速度快,且开放源码,这些优点促使 Mysql 数据库市场占有率很高,而不必支付任何费用。
二、迁移原理
Mysql为关系型数据库,迁移的重点是保证数据库的数据一致性、业务连续性。二性都和Mysql的数据写入机制有关。
如下图描述的是Mysqldump数据写入原理:
当数据库有新数据需要同步更新时,会先将要修改的数据(原数据)写入undolog,方便用户后期回滚。之后会将要更新的数据读取到缓冲池中,并将这一数据写redolog buffer。然后写入redolog,在redolog落盘前,执行器还会将数据写入binlog。相对于redolog数据在数据页上的修改,binlog记录的是DDL和DML。在binlog数据落盘后,redo标记为已提交,数据在redolog上执行落盘。最后将buffer pool中的数据落入磁盘。
Mysql的日志系统记录了数据修改记录,binlog可以通过记录的sql语句复运行,将数据恢复。redolog可以通过对数据页的按序修改,完成对数据的恢复。Mysqldump和Xtrabackup就是基于这两种日志应运而生的Mysql数据迁移工具。
三、迁移方法、迁移工具
1、Mysqldump迁移
Mysqldump原本为Mysql官方的备份恢复工具,基于数据的逻辑备份,可以满足Mysql离线迁移的要求。
Mysqldump依靠sql文件进行全量数据的恢复,依靠按序运行二进制日志中的逻辑sql语句,完成对增量数据的恢复,支持Mysql的所有引擎:
- 拷贝全量数据时,数据库生成一份当前数据库的快照文件,数据库管理系统根据这份快照,dump出数据库的全量数据文件;
- 查看源端数据库是否处于开启状态,如果不处于开启状态则开启,并且重新启动数据库;
- 当数据库感知到有数据更新时,会把对应的逻辑语句写入binlog;
- 在这期间,无须关闭数据,当到了割接时间点,需要业务侧断开业务,并且确保所有数据落盘到binlog文件;
- 将sql文件和binlog文件传送至目标端后,先从sql文件中获取全量数据;
- 然后通过binlog,在目标端的DBMS上重新执行binlog中的sql逻辑语句,来完成增量数据的迁移。
2、Xtrabackup迁移
Xtrabackup为第三方的物理备份工具,可以实现Mysql数据的快速迁移。
Xtrabackup依靠拷贝源数据库的表数据和表结构文件加上redolog对表数据和表结构文件的补充修改,达成全量加增量数据的恢复,暂时只支持InnoDB,XtraDB,MyISAM和MyRocks四种引擎的数据表迁移:
- 执行xtrabackup后,会有一个后台进程将Mysql数据库中redolog的数据变化同步至xtrabackup_log;
- 同时,后台进程会拷贝源端数据库的表数据和表结构文件;
- 根据数据库中同步数据的页变化至xtrabackup_log;
- 将xtrabckup_log中的数据同步至已拷贝的表数据和表结构文件中;
- 回滚未提交数据;
- Mysql根据更新后的表结构和表数据文件还原数据库和数据表。
#个人学习整理资料,部分素材来源于互联网,如涉及侵权,请留言我会尽快处置。