前言:

在平时工作中,经常会遇到数据迁移的需求,比如要迁移某个表、某个库或某个实例。根据不同的需求可能要采取不同的迁移方案,数据迁移过程中也可能会遇到各种大小问题。本篇文章,我们一起来看下 MySQL 数据迁移那些事儿,希望能帮助到各位。

1.关于数据迁移

首先引用下维基百科中对数据迁移的解释:

数据迁移(data migration)是指选择、准备、提取和转换数据,并将数据从一个计算机存储系统永久地传输到另一个计算机存储系统的过程。此外,验证迁移数据的完整性和退役原来旧的数据存储,也被认为是整个数据迁移过程的一部分。

数据迁移是任何系统实现、升级或集成的关键考虑因素,通常以尽可能自动化的方式执行,从而将人力资源从繁琐的任务中解放出来。

数据迁移有多种原因,包括服务器或存储设备更换、维护或升级、应用程序迁移、网站集成、灾难恢复和数据中心迁移。

对于 MySQL 数据库,也会经常碰到数据迁移的需求,比如说从测试库迁到开发库,或者从一台机器迁移到另一台机器,可能只是迁移一张表,也可能需要迁移整个数据库实例。对于不同的需求可能要采取不同的迁移方案,但总体来讲,MySQL 数据迁移方案大致可以分为物理迁移和逻辑迁移两类。

2.迁移方案及注意点

物理迁移适用于大数据量下的整体迁移。物理迁移包括拷贝数据文件和使用 XtraBackup 备份工具两种。不同服务器之间可以采用物理迁移,我们可以在新的服务器上安装好同版本的数据库软件,创建好相同目录,建议配置文件也要和原数据库相同,然后从原数据库方拷贝来数据文件及日志文件,配置好文件组权限,之后在新服务器这边使用 mysqld 命令启动数据库。

使用物理迁移方案的优点是比较快速,但需要停机迁移并且要求 MySQL 版本及配置必须和原服务器相同,也可能引起未知问题。

相比来说,逻辑迁移适用范围更广,无论是部分迁移还是全量迁移,都可以使用逻辑迁移。逻辑迁移中使用最多的就是通过 mysqldump 等备份工具导出再导入了。

mysqldump 同样适用于不同版本不同配置之间的迁移,不过全量迁移时,笔者不建议使用 -A 参数备份全部数据库,特别是对于不同版本之间迁移,可能某些系统库稍有不同,迁移后容易出现未知问题。若使用 mysqldump 进行全量迁移,可以按照下面步骤操作:

#原库执行得到的创建数据库语句在新库执行(排除系统库)SELECTCONCAT('CREATEDATABASEIFNOTEXISTS','`',SCHEMA_NAME,'`','DEFAULTCHARACTERSET',DEFAULT_CHARACTER_SET_NAME,';')ASCreateDatabaseQueryFROMinformation_schema.SCHEMATAWHERESCHEMA_NAMENOTIN('information_schema','performance_schema','mysql','sys');#原库执行得到的创建用户语句在新库执行(排除系统用户)SELECTCONCAT('createuser\'',USER,'\'@\'',HOST,'\'''IDENTIFIEDBYPASSWORD\'',authentication_string,'\';')ASCreateUserQueryFROMmysql.`user`WHERE`User`NOTIN('root','mysql.session','mysql.sys');#原库执行showgrants得到用户权限然后逐一在新库执行(也可以复制那几张权限表到新库)showgrantsfor'testuser'@'%';#至此新环境已经存在要迁移的库和用户只是没有数据#原环境使用mysqldump备份除系统库外的所有库mysqldump-uroot-pxxxx-R-E--single-transaction--databasesdb1db2>db.sql#然后导入新环境mysql-uroot-pxxxx<db.sql
#备份单个库mysqldump-uroot-pxxxxx-R-E--single-transactio--databasesdb1>db1.sql#备份部分表mysqldump-uroot-pxxxxx--single-transactiondb1tb1tb2>tb12.sql#排查某些表mysqldump-uroot-pxxxxxdb1--ignore-table=db1.tb1--ignore-table=db1.tb2>db1.sql#只备份结构或数据mysqldump-uroot-pxxxxxtestdb--no-data>testdb_jiegou.sqlmysqldump-uroot-pxxxxxtestdb--no-create-info>testdb_data.sql

数据迁移过程中,可能会遇到各种错误,一步步去解决即可。建议在新库创建好用户并授予好权限后再迁移,这样可以避免出现视图及函数导入错误,因为视图及函数有个定义者的概念。新环境执行导入时,最好使用 root 等具有 SUPER 权限的管理员用户,也可以避免一些因权限产生的问题。

迁移完成后,对于新环境,我们还应该再次进行检查,比如表的个数是否相同,随机抽查几张表,数据是否相同、是否有乱码等。只有确定无误才大功告成。

总结:

本篇文章介绍了 MySQL 数据库数据迁移相关方案及注意点,总结如下思维导图:

更多相关文章

  1. MySQL系列多表连接查询92及99语法示例详解教程
  2. Linux下MYSQL 5.7 找回root密码的问题(亲测可用)
  3. MySQL 什么时候使用INNER JOIN 或 LEFT JOIN
  4. mybatisplus的坑 insert标签insert into select无参数问题的解决
  5. python起点网月票榜字体反爬案例
  6. 《Android开发从零开始》——25.数据存储(4)
  7. Android系统配置数据库注释(settings.db)
  8. Android中不同应用间实现SharedPreferences数据共享
  9. android图表ichartjs

随机推荐

  1. [置顶] Android 插件化 动态升级
  2. android 跨应用启动/绑定Service && aidl
  3. 杂谈(android基础知识点梳理笔记)
  4. android高级编程-android高级应用
  5. Android应用程序资源管理器(Asset Manager
  6. Android和IOS获取crash信息
  7. Android受手机制造商青睐 是福是祸
  8. Android事件分发机制 详解攻略,您值得拥有
  9. Android APP设计加载使用gif动图需要注意
  10. Android中textView自动识别电话号码,电子