MySQL数据迁移那些事儿

2023年 8月 12日 67.2k 0

前言:

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

1.关于数据迁移

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

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

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

2.迁移方案及注意点

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

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

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

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

# 原库执行 得到的创建数据库语句在新库执行 (排除系统库)
SELECT
CONCAT( 'CREATE DATABASE IF NOT EXISTS ', '`', SCHEMA_NAME, '`', ' DEFAULT CHARACTER SET ', DEFAULT_CHARACTER_SET_NAME, ';' ) AS CreateDatabaseQuery
FROM
information_schema.SCHEMATA
WHERE
SCHEMA_NAME NOT IN ( 'information_schema', 'performance_schema', 'mysql', 'sys' );

# 原库执行 得到的创建用户语句在新库执行 (排除系统用户)
SELECT
CONCAT( 'create user \'', USER, '\'@\'', HOST, '\'' ' IDENTIFIED BY PASSWORD \'', authentication_string, '\';' ) AS CreateUserQuery
FROM
mysql.`user`
WHERE
`User` NOT IN ( 'root', 'mysql.session', 'mysql.sys' );

# 原库执行 show grants 得到用户权限 然后逐一在新库执行 (也可以复制那几张权限表到新库)
show grants for 'testuser'@'%';

# 至此 新环境已经存在要迁移的库和用户 只是没有数据
# 原环境使用mysqldump备份除系统库外的所有库
mysqldump -uroot -pxxxx -R -E --single-transaction --databases db1 db2 > db.sql

# 然后导入新环境
mysql -uroot -pxxxx < db.sql

相关文章

Golang测试中的数据生成技巧

2023-08-07
数据
生成
技巧

SQL数据库触发器语法详解 (sql数据库触发器语法)

2023-08-06
数据库
语法
触发器

快速简单的删除Oracle数据库字段方法 (删除oracl数据库字段)

2023-08-06
数据库
字段
删除

如何打开社工数据库bak文件 (社工数据库bak怎么打开)

2023-08-06
数据库
打开
社工

实现数据库按拼音排序的方法和技巧 (数据库按拼音排序)

2023-08-06
数据库
排序
按拼音

探究Sybase数据库的性能和功能特点 (sybase数据库怎么样)

2023-08-06
数据库
性能
探究

SQL Server 如何成功建立自己的数据库? (sql server 建立数据库)

2023-08-06
数据库
自己的
建立

如何在Oracle中查看数据库触发器? (oracle查看数据库触发器)

2023-08-06
数据库
查看
触发器

数据库表数据量千万级,对性能影响有多大? (数据库表千万级数据量多吗)

2023-08-06
数据库
级数
有多大

如何使用Oracle按时间导出表数据库? (oracle按时间导出表数据库)

2023-08-06
数据库
导出
如何使用

数据库存储:帖子长期保存,信息永不丢失 (帖子存数据库)

2023-08-06
数据库
丢失
帖子

小米六数据库:全方位数据保障和优化方案 (小米六数据库)

2023-08-05
数据库
优化
小米

简易教程:使用dbe数据库实现数据连接 (dbe数据库 数据连接)

2023-08-05
数据
数据库
连接

Oracle实现多个数据库链接的简便方法 (oracle链接多个数据库)

2023-08-05
数据库
多个
链接

数据库索引:用哪种方法建立? (数据库索引用什么建的)

2023-08-05
索引
数据库
哪种

实现高效缓存同步:Redis数据库技巧大全 (redis 数据库缓存同步)

2023-08-05
数据库
缓存
同步

如何利用数据库实现高效的模糊匹配查询? (数据库实现模糊查询)

2023-08-05
查询
数据库
模糊

数据库有哪些安装方式和位置? (数据库是装在什么上)

2023-08-05
数据库
位置
装在

Lactmed数据库:妈妈们必备的喂养指南 (lactmed 数据库)

2023-08-05
数据库
必备
喂养

数据库设计中的主属性定义及作用 (数据库主属性是什么)

2023-08-05
数据库
定义
属性

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论