当前位置: 首页 > 科技观察

MySQL数据迁移那些事儿

时间:2023-03-12 19:59:44 科技观察

本文转载自微信公众号《MySQL技术》,作者MySQL技术。转载本文请联系MySQL技术公众号。前言:在日常工作中,经常会遇到数据迁移的需求,比如迁移某个表、某个库或者某个实例。根据不同的需求,可能会采用不同的迁移方案,在数据迁移过程中可能会遇到各种大小不一的问题。在这篇文章中,我们就来了解一下关于MySQL数据迁移的那些事儿,希望对大家有所帮助。1、关于数据迁移,首先参考维基百科对数据迁移的解释:数据迁移是指数据的选择、准备、提取和转换,将数据从一个计算机存储系统永久转移到另一个计算机存储系统的过程。此外,验证迁移数据的完整性和停用旧数据存储也被视为整个数据迁移过程的一部分。数据迁移是任何系统实施、升级或集成的关键考虑因素,通常以尽可能自动化的方式执行,从而将人力资源从繁琐的任务中解放出来。数据迁移的发生有多种原因,包括服务器或存储更换、维护或升级、应用程序迁移、网站集成、灾难恢复和数据中心搬迁。对于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'@'%';#这里已经是新环境了有要迁移的库和用户,但没有数据新环境mysql-uroot-pxxxxdb1.sql#备份部分表mysqldump-uroot-pxxxxx--single-transactiondb1tb1tb2>tb12.sql#排检查一些表mysqldump-uroot-pxxxxxdb1--ignore-table=db1.tb1--ignore-table=db1.tb2>db1.sql#Onlybackupstructureordatamysqldump-uroot-pxxxxxtestdb--no-data>testdb_jiegou。sqlmysqldump-uroot-pxxxxxtestdb--no-create-info>testdb_data.sql一般来说,使用mysqldump方案比较灵活。为了快速迁移,我们应该尽量减少备份内容,比如排除无用的日志表。对于一些大表,我们也可以使用单独的迁移计划。例如,db1中的tb1表非常大。我们可以在备份期间排除tb1。对于大表tb1,可以使用LOADDATA方式或者丢弃后再导入表空间进行迁移。数据迁移过程中,可能会遇到各种错误,一步步解决即可。建议在新库中创建用户并授予权限后再进行迁移,这样可以避免视图和函数的导入错误,因为视图和函数有一个定义者的概念。导入新环境时,最好使用root等具有SUPER权限的管理员用户,这样也可以避免一些权限带来的问题。迁移完成后,对于新的环境,我们应该再检查一下,比如表的数量是否相同,随机检查几张表,数据是否相同,是否有乱码等等。只有当你确定它是正确的时候才重新做。总结:本文介绍MySQL数据库数据迁移相关解决方案及注意事项,总结思维导图如下:图片