如何正确备份 mediawiki 数据库(mysql)而不弄乱数据?

如何正确备份 mediawiki 数据库(mysql)而不弄乱数据?

我想使用 mysqldump 备份存储在 MySQL 服务器 5.1.36 中的 mediawiki 数据库。

大多数 wiki 文章都是用西班牙语撰写的,我不希望因为创建使用错误字符集的转储而搞乱它。

mysql> status
--------------
...
Current database:       wikidb
Current user:           root@localhost
...
Server version:         5.1.36-community-log MySQL Community Server (GPL)
....
Server characterset:    latin1
Db     characterset:    utf8
Client characterset:    latin1
Conn.  characterset:    latin1
...

使用以下命令:

mysql> show create table text;

我看到表创建语句将字符集设置为二进制

CREATE TABLE `text` (
  `old_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `old_text` mediumblob NOT NULL,
  `old_flags` tinyblob NOT NULL,
  PRIMARY KEY (`old_id`)
) ENGINE=InnoDB AUTO_INCREMENT=317 DEFAULT CHARSET=binary MAX_ROWS=10000000 AVG_ROW_LENGTH=10240

我应该如何使用 mysqldump 正确地为该数据库生成备份?

答案1

mysqldump并且show create table通常是非常可靠的主力,不应自行更改编码。如果他们使用“二进制”字符集,很可能这实际上是分配给表的字符集(不一定是,但是)。您可以在数据库浏览器中重新检查当前表的字符集吗?

我会尝试将转储简单复制mysqldump到文件中,将转储恢复到镜像数据库,然后仔细查看特殊字符。与使用 phpMyAdmin 进行的备份不同,根据我的经验,命令行备份通常效果很好。

答案2

备份数据库是一件至关重要的事情,所以要大力推广。

我建议测试您的备份策略,这不仅是因为担心语言问题,还因为对于许多组织来说,最常发生的臭名昭著的灾难场景之一是从未测试过备份,多年来一直做错备份 - 最终需要备份时,备份根本无法使用。整个备份过程都应该进行测试。

首先,停止所有服务器活动并进行操作系统备份。除了服务器停机之外,这绝不是一个坏主意。有些数据库系统可以让您在数据库系统运行时进行操作系统备份,并且仍然创建完全有效的备份!PostgreSQL 就是这样的系统 - 我强烈推荐它。

至于字符集,Unicode(又名 UTF-8)包含全部西班牙语,但 ISO-8859-1 被广泛选择。

请参阅以下参考资料:

Unicode 字符Unicode 联盟我认为这也可能有帮助:ISO-8859-1 的 MySQL 字符集

我还建议进行第二次安装并将备份恢复到其中。这有三件事:

  1. 它有助于验证备份过程本身是否正常运行
  2. 它提供了一个使用真实世界数据进行测试的地方;
  3. 它提供了一种额外的“备份”,与完整恢复相比,其开销更少——这可能在不同时间因不同原因而有用。

答案3

如果您不想停止服务器进行备份,我强烈建议您查看 Xtrabackup。此工具可执行 InnoDB(和 XtraDB)表的在线备份。我在生产服务器上使用它。它不会给服务器带来太大压力,并且可以执行增量备份。

相关内容