![如何正确备份 mediawiki 数据库(mysql)而不弄乱数据?](https://linux22.com/image/510495/%E5%A6%82%E4%BD%95%E6%AD%A3%E7%A1%AE%E5%A4%87%E4%BB%BD%20mediawiki%20%E6%95%B0%E6%8D%AE%E5%BA%93%EF%BC%88mysql%EF%BC%89%E8%80%8C%E4%B8%8D%E5%BC%84%E4%B9%B1%E6%95%B0%E6%8D%AE%EF%BC%9F.png)
我想使用 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 字符集
我还建议进行第二次安装并将备份恢复到其中。这有三件事:
- 它有助于验证备份过程本身是否正常运行
- 它提供了一个使用真实世界数据进行测试的地方;
- 它提供了一种额外的“备份”,与完整恢复相比,其开销更少——这可能在不同时间因不同原因而有用。
答案3
如果您不想停止服务器进行备份,我强烈建议您查看 Xtrabackup。此工具可执行 InnoDB(和 XtraDB)表的在线备份。我在生产服务器上使用它。它不会给服务器带来太大压力,并且可以执行增量备份。