您的位置 首页 > 资格资历

mysql数据库迁移(MySQL数据迁移那些事儿)

大家好,今天来为大家分享mysql数据库迁移的一些知识点,和MySQL数据迁移那些事儿的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!

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

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

数据迁移(datamigration)是指选择、准备、提取和转换数据,并将数据从一个计算机存储系统永久地传输到另一个计算机存储系统的过程。此外,验证迁移数据的完整性和退役原来旧的数据存储,也被认为是整个数据迁移过程的一部分。数据迁移是任何系统实现、升级或集成的关键考虑因素,通常以尽可能自动化的方式执行,从而将人力资源从繁琐的任务中解放出来。数据迁移有多种原因,包括服务器或存储设备更换、维护或升级、应用程序迁移、网站集成、灾难恢复和数据中心迁移。

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

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

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

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

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

#原库执行得到的创建数据库语句在新库执行(排除系统库)\nSELECT\nCONCAT('CREATEDATABASEIFNOTEXISTS','`',SCHEMA_NAME,'`','DEFAULTCHARACTERSET',DEFAULT_CHARACTER_SET_NAME,';')ASCreateDatabaseQuery\nFROM\ninformation_schema.SCHEMATA\nWHERE\nSCHEMA_NAMENOTIN('information_schema','performance_schema','mysql','sys');\n\n#原库执行得到的创建用户语句在新库执行(排除系统用户)\nSELECT\nCONCAT('createuser\\'',USER,'\\'@\\'',HOST,'\\'''IDENTIFIEDBYPASSWORD\\'',authentication_string,'\\';')ASCreateUserQuery\nFROM\nmysql.`user`\nWHERE\n`User`NOTIN('root','mysql.session','mysql.sys');\n\n#原库执行showgrants得到用户权限然后逐一在新库执行(也可以复制那几张权限表到新库)\nshowgrantsfor'testuser'@'%';\n\n#至此新环境已经存在要迁移的库和用户只是没有数据\n#原环境使用mysqldump备份除系统库外的所有库\nmysqldump-uroot-pxxxx-R-E--single-transaction--databasesdb1db2>db.sql\n\n#然后导入新环境\nmysql-uroot-pxxxx<db.sql\n

对于迁移部分库和部分表,也可以采用上方类似方案,只是备份时要按需备份,下面列举出几种常见的mysqldump备份场景:

#备份单个库\nmysqldump-uroot-pxxxxx-R-E--single-transactio--databasesdb1>db1.sql\n\n#备份部分表\nmysqldump-uroot-pxxxxx--single-transactiondb1tb1tb2>tb12.sql\n\n#排查某些表\nmysqldump-uroot-pxxxxxdb1--ignore-table=db1.tb1--ignore-table=db1.tb2>db1.sql\n\n#只备份结构或数据\nmysqldump-uroot-pxxxxxtestdb--no-data>testdb_jiegou.sql\nmysqldump-uroot-pxxxxxtestdb--no-create-info>testdb_data.sql\n

总得来说,使用mysqldump方案更加灵活,为了快速迁移,我们应该尽量减少备份内容,比如说排除无用的日志表。对于一些大表,我们也可以采用单独迁移的方案,比方说,db1中的tb1表特别大,我们可以在备份时先排除tb1,对于大表tb1,可以使用LOADDATA方式或舍弃再导入表空间的方式来迁移。

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

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

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

mysql数据库迁移和MySQL数据迁移那些事儿的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023