mariadb 如何将一个大型MySQL数据库从utf8转换为utf8mb4?

b5buobof  于 2022-11-08  发布在  Mysql
关注(0)|答案(1)|浏览(235)

我有一个MySQL服务器(运行在Debian bullseye上的MariaDB Server版本10.5),数据库容量为600 GB。由于兼容性问题,我不得不从UTF-8切换到UTF8 MB 4。
我已经发现了一些关于它的东西,但是我仍然不确定最好的方法。因为这是一个生产系统,回滚只能在测试系统上进行,所以我担心数据的完整性,并担心之后可能会出现问题,例如性能方面的问题。
转换数据库的最佳和最安全的方法是什么?有什么特殊的考虑吗?
谢谢你的建议。

gtlvzcf8

gtlvzcf81#

本文将详细介绍此过程。https://mathiasbynens.be/notes/mysql-utf8mb4
左、右;
因此,整个过程中最大的问题是数据完整性。我们的意思是,我们希望数据不会丢失。因此,作为第一步,我建议创建数据库备份。一旦您有了此副本,如果出现问题,您就可以随时使用此副本来保护您。安全第一!因此,让我们来详细说明此过程。
1.创建数据库的备份
1.将MySQL服务器至少升级到v5.5.3,因为这是UTF8MB4开始受支持的版本
1.修改数据库、表和列。您可以执行以下操作


# For each database:

ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

# For each table:

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

# For each column:

ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

# The above line is just an example for a `VARCHAR` column.)

现在,由于mysql已经保持了这个功能向后兼容,那么你应该不会看到任何奇怪的行为(数据丢失)。
1.检查列和索引键的最大长度。从utf8转换为utf8 mb 4时,列或索引键的最大长度(以字节为单位)不变。因此,如果您有一个tinytext,则可以存储的最大数据量为255字节。因此,随着开销的增加,您可以存储的数据将减少。因此,一般情况下,请特别检查您的tinyx字段(您应该检查所有字段,但较小的字段更有可能耗尽字节)。
1.修改连接、客户端和服务器字符集。通常,只要您有utf8,您就应该用utf8mb4替换。
1.运行mysqlcheck -u root -p --auto-repair --optimize --all-databases,以避免遇到一些奇怪的错误,其中UPDATE语句没有任何效果,即使没有抛出任何错误。

相关问题