---
title: "将 MariaDB 转储迁移到另一个版本"
description: "将 MariaDB 10.3 到 12 的转储转换为可在 MariaDB 10.11 及以上导入的脚本，表、键、序列和数据相同，并报告每项更改。"
canonical: https://intosql.com/zh-cn/mariadb-to-mariadb
last_updated: 2026-10-15
---

# 将 MariaDB 转储迁移到另一个版本

拖入由 mariadb-dump、mysqldump、phpMyAdmin 或 Adminer 生成的转储，格式为 .sql 或 .sql.gz，即可下载可在 MariaDB 10.11 及以上导入的脚本。UUID、INET4、INET6、JSON 和序列保持不变，对于 11.7 之前的版本，VECTOR 会变为其浮点数的 JSON 数组，每项更改都会列在报告中。

[MariaDB 到 MariaDB 迁移指南](https://intosql.com/docs/migrations/mariadb-to-mariadb)

[MariaDB 到 MariaDB 的数据类型](https://intosql.com/docs/types/mariadb-to-mariadb)

## 文件与脚本之间的变化

每一行是转换器应用的一条规则，以及该规则更改你的数据时在报告中写入的记录。

| 文件中 | 脚本中 | 报告记录 |
| --- | --- | --- |
| utf8mb4_0900_* and utf8mb4_uca1400_* collations | utf8mb4_0900_* 改为 utf8mb4_unicode_520_ci（二进制排序规则用 utf8mb4_bin） | `collation_replaced` |
| zero, partial or impossible dates (0000-00-00, 2024-02-30) | 保留 |  |
| TIME | TIME，包括时长 |  |
| TINYINT(1), BOOL | TINYINT(1) |  |
| UNSIGNED and ZEROFILL | 保留 |  |
| ENUM and SET, the '' error value included | 保留 |  |
| JSON | JSON（由 MariaDB 检查的 LONGTEXT） |  |
| NUL bytes in text | 保留 |  |
| AUTO_INCREMENT | AUTO_INCREMENT，带表的计数器 |  |
| MyISAM AUTO_INCREMENT on the second column of a key, in a table that isn't MyISAM in the dump | 列上的一个索引，整个表一个计数器 | `myisam_group_autoincrement` |
| ON UPDATE CURRENT_TIMESTAMP | 保留 |  |
| generated columns | 与源数据一样为 VIRTUAL 或 STORED |  |
| generated columns with functions IntoSQL doesn't read | 普通列 | `generated_not_translated` |
| INVISIBLE columns | INVISIBLE 列 |  |
| CHECK constraints | 保留 |  |
| CHECK constraints with functions IntoSQL doesn't read | 不创建 | `check_skipped` |
| CHECK ... NOT ENFORCED | 不创建 | `check_not_enforced` |
| expression defaults, and defaults on TEXT, BLOB, JSON and GEOMETRY | 保留 | `default_not_translated` |
| functional indexes, KEY ((expr)) | 不创建 | `index_skipped` |
| keys and indexes on a prefix, c(20) | 保留 |  |
| FULLTEXT indexes | 保留 |  |
| SPATIAL indexes | 保留 |  |
| foreign keys | 保留，以 FOREIGN_KEY_CHECKS=0 导入 |  |
| GEOMETRY, POINT, POLYGON... | 保留，带每个值的 SRID |  |
| INET4, INET6, UUID (MariaDB) | 保留 |  |
| BINARY, VARBINARY, BLOB | 保留 |  |
| PARTITION BY | 单个表 | `partitions_dropped` |
| WITH SYSTEM VERSIONING (MariaDB) | WITH SYSTEM VERSIONING，从当前的行开始 |  |
| Aria, ColumnStore, CONNECT, Spider, RocksDB (MariaDB) | 保留 |  |
| CREATE SEQUENCE (MariaDB) | CREATE SEQUENCE，带下一个值 |  |
| views, triggers, procedures, functions and events | 在报告中列出 | `not_converted_objects` |
| NOT NULL columns with values that become NULL | 去除 NOT NULL | `not_null_relaxed` |
| text that isn't valid in its character set | 错误的字节变为替换字符 | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | 按原样复制 | `mojibake_suspected` |
| dumps without CREATE TABLE | 根据值推断类型 | `no_schema` |
| geometries in a dump without CREATE TABLE | GEOMETRY |  |
| SET NAMES utf8 from utf8mb4 tables | 已转换，并给出警告 | `dump_lost_four_byte_chars` |
| dumps without SET NAMES whose text isn't UTF-8 | 按 Latin-1 (Windows-1252) 读取 | `charset_guessed` |
| sjis, cp932, gbk, big5 dumps | 按 UTF-8 读取，并给出警告 | `unsupported_charset` |
| UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rows | 求值 |  |
| other expressions in rows | NULL | `expression_value` |
| DEFAULT in VALUES | 该列的默认值 | `default_keyword_filled` |
| DEFAULT in VALUES without a literal default | NULL | `default_keyword_null` |
| REPLACE and INSERT IGNORE | 普通行 | `replace_as_insert` |
| types IntoSQL doesn't know | LONGBLOB | `unknown_type` |
| values that don't fit their column | NULL | `invalid_value_null` |
| unreadable geometries | NULL | `bad_geometry` |
| TIMESTAMP | 保留，按转储声明的时区导入 |  |
| VECTOR(n) (MariaDB 11.7+) | json，浮点数存为数组 | `type_replaced` |

## 将脚本导入 MariaDB

脚本先创建表、复制行，再添加键、索引和外键，因此导入速度快，并会在遇到第一个错误时停止。

```shell
mariadb --default-character-set=utf8mb4 mydb < mariadb.mariadb.sql
```

外键按转储中的声明创建，导入行时使用 FOREIGN_KEY_CHECKS=0，与 mysqldump 的做法相同。

对于较大的转储，请在服务器所在的机器上运行客户端；如果单行非常大，请调高 max_allowed_packet。

IntoSQL Pro 可以通过桌面应用或命令行将文件直接导入 MariaDB，无需生成脚本。

## 如何转储 MariaDB 以获得最佳结果

转换器读取转储中的内容。以下选项能让转储保留更多数据：

- --default-character-set=utf8mb4 会保留表情符号和其他 4 字节字符，而 utf8mb3 转储在转换器读取之前就会丢失它们。
- --hex-blob 将二进制列和 VECTOR 值写为十六进制，在系统之间复制时不会损坏。
- --routines --triggers --events 会将这些对象加入转储，以便报告列出它们。

## 哪些内容不会转换

视图、触发器、存储过程、函数等用 MariaDB 自己的语言编写的对象，会按名称列在报告中，绝不会被悄悄丢弃，你可以先在要导入的 MariaDB 版本上逐一检查再重建。

## 关于在 MariaDB 版本之间迁移的问题

### 我的转储会被上传吗？

不会。转换器在你的浏览器中运行，分块从磁盘读取转储，因此转储不会离开你的电脑。桌面应用和命令行也在你的电脑上转换。

### 转储可以多大？

转换器从不把整个转储放进内存：它按范围读取文件两次，边读边写出脚本。几 GB 的转储可以在浏览器、桌面应用和命令行中转换。

### 转储可以来自哪些 MariaDB 版本？

由 MariaDB 10.3 到 12 的 mariadb-dump 和 mysqldump 写出的转储，每个表一条 INSERT 或每行一条均可。每个测试转储都来自 MariaDB 10.11、11.4 和 11.8，并与其源数据逐个单元格比较。

### UUID、INET6、JSON 和 VECTOR 列会保留吗？

保持不变，包括 VECTOR，它需要 MariaDB 11.7 或更高版本。JSON 仍为 JSON，并保留其有效性检查。

### AUTO_INCREMENT 值和序列会保留吗？

会。AUTO_INCREMENT 和序列保持不变，从某个序列取值的默认值继续从该序列取值。

### 存储过程和触发器怎么处理？

它们会按名称在报告中列出，但不会转换，因此你可以在重新创建之前对照要导入的 MariaDB 逐个检查。

### 脚本可以导入哪些 MariaDB 版本？

MariaDB 10.11 及更高版本，无论转储由哪个版本写出。每个测试转储都能在 10.11 和 11.4 上导入。

## 从 MariaDB

- [MariaDB 到 PostgreSQL](https://intosql.com/zh-cn/mariadb-to-postgresql)
- [MariaDB 到 MySQL](https://intosql.com/zh-cn/mariadb-to-mysql)
- [MariaDB 到 SQLite](https://intosql.com/zh-cn/mariadb-to-sqlite)
- [MariaDB 到 SQL Server](https://intosql.com/zh-cn/mariadb-to-sql-server)
- [MariaDB 到 Oracle](https://intosql.com/zh-cn/mariadb-to-oracle)

## 到 MariaDB

- [MySQL 到 MariaDB](https://intosql.com/zh-cn/mysql-to-mariadb)
- [PostgreSQL 到 MariaDB](https://intosql.com/zh-cn/postgresql-to-mariadb)
- [SQL Server 到 MariaDB](https://intosql.com/zh-cn/sql-server-to-mariadb)
- [SQLite 到 MariaDB](https://intosql.com/zh-cn/sqlite-to-mariadb)
- [Oracle 到 MariaDB](https://intosql.com/zh-cn/oracle-to-mariadb)

## 指南和所有组合

- [MariaDB 到 MariaDB 迁移指南](https://intosql.com/docs/migrations/mariadb-to-mariadb)
- [MariaDB 到 MariaDB 的数据类型](https://intosql.com/docs/types/mariadb-to-mariadb)
- [所有数据库组合](https://intosql.com/zh-cn/database-migration)
