进行 MariaDB (或 MySQL) 数据库迁移,最稳妥、最常用的方案是使用官方自带的 mysqldump 工具。它会将数据库中的表结构和数据导出为一个纯文本的 .sql 文件,然后在新服务器上导入。

下面为你梳理标准迁移的完整步骤(假设你从 服务器 A 迁移到 服务器 B)。

第一步:在源服务器(A)上导出数据
使用 mysqldump 命令。根据你的需求选择以下三种常见场景之一:

Bash

场景 1:仅迁移某一个指定的数据库(最常用)

mysqldump -u root -p --single-transaction --routines --triggers 数据库名 > /tmp/backup.sql

场景 2:一次性迁移多个指定的数据库

mysqldump -u root -p --single-transaction --routines --triggers --databases 库名1 库名2 > /tmp/backup.sql

场景 3:整机迁移(迁移所有的数据库、表、甚至包括用户权限)

mysqldump -u root -p --single-transaction --routines --triggers --all-databases > /tmp/backup.sql
💡 核心参数解析(避坑必备):

--single-transaction:如果在迁移生产环境,这个参数可以让 InnoDB 引擎在不锁表的情况下进行安全备份,不影响线上业务读写。

--routines 和 --triggers:确保把数据库里的存储过程、自定义函数和触发器一起带走,防止新服务器跑代码时报错。

第二步:将 .sql 转移到目标服务器(B)
在服务器 A 上,利用 scp 命令将导出的文件跨服务器安全传输到服务器 B 的 /tmp/ 目录下:

Bash

请将 192.168.1.100 换成服务器 B 的实际 IP

scp /tmp/backup.sql root@192.168.1.100:/tmp/
第三步:在目标服务器(B)上导入数据
在服务器 B 上,根据你第一步导出的范围,选择对应的导入方式:

情况 A:如果你第一步只导出了“某一个数据库”(场景 1)
新服务器上可能还没有对应的空库,你需要先手动创建一个同名的空数据库:

Bash

1. 登录 B 服务器的数据库

mariadb -u root -p

2. 创建一个干净的空库(注意字符集要与原库一致,通常是 utf8mb4)

CREATE DATABASE 数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
EXIT;

3. 在 Linux 命令行执行导入

mariadb -u root -p 数据库名 < /tmp/backup.sql
情况 B:如果你第一步使用了 --databases 或 --all-databases(场景 2、3)
因为 .sql 文件里已经自动包含了 CREATE DATABASE 的指令,你不需要手动建库,直接一行命令无脑导入即可:

Bash
mariadb -u root -p < /tmp/backup.sql
🛡️ 高级进阶:大文件迁移优化(10G 以上数据库)
如果你的数据库非常庞大,普通的导出导入会非常慢,甚至卡死。你可以利用 Linux 管道命令 进行“边压缩、边传输、边解压导入”,不仅速度极快,而且不占用服务器 A 和 B 的额外磁盘空间:

Bash

在服务器 A 上执行这一行,直接一步到位传给服务器 B 并完成导入:

mysqldump -u root -p --single-transaction --routines --triggers 数据库名 | gzip | ssh root@服务器B_IP "gunzip | mariadb -u root -p 数据库名"
🚨 迁移后的硬伤排查
版本兼容性:尽量保证服务器 B 的 MariaDB 版本大于或等于服务器 A。如果从高版本往低版本迁移,可能会因为某些新语法(如新版的 JSON 格式或严格模式)导致导入时报错。

刷新权限:如果你做了整机迁移(场景 3),导入后必须在服务器 B 上执行一次刷新权限命令,否则新用户可能无法登录:

SQL
FLUSH PRIVILEGES;

标签: none

添加新评论