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

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

大部分的wiki文章都是用西class牙文写的,不想通过创build具有错误字符集的转储来搞砸它。

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; 

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

 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为该数据库正确生成备份?

mysqldumpshow create table通常是非常可靠的工具,不应该自己改变编码。 如果他们使用“二进制”字符集,那么实际上是给予表的字符集(不一定是 )。 你能重新检查数据库浏览器中的当前表字符集吗?

我会尝试一个简单的,简单的mysqldump到一个文件,恢复转储到镜像数据库,并仔细看特殊字符。 与使用phpMyAdmin进行备份不同的是,从命令行执行的备份往往在我的经验中运行良好。

备份数据库是一件非常重要的事情,所以为了获得它,

我build议testing你的备份策略,不仅仅是因为对语言的关注,而且是因为对于很多组织来说,最糟糕的一次最臭名昭着的场景之一就是从未经过testing并且多年来做错了的备份 – 在最终需要的时候,不在那里工作。 整个备份过程应该被testing。

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

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

看到这些参考资料

Unicode字符和Unicode联合体 ,我认为这也可能有帮助: 为ISO-8859-1设置MySQL字符集

我也build议进行第二次安装并将备份恢复到它。 这有三件事情:

  1. 它有助于validation备份过程本身是否正常工作
  2. 它提供了一个testing真实世界数据的地方,
  3. 它提供了一种额外的“备份”,与完全恢复相比,花费更less的开销 – 由于各种原因,这可能在不同的时间被certificate是有用的。

如果您不想停止服务器进行备份,我强烈build议您查看Xtrabackup。 该工具执行InnoDB(和XtraDB)表的在线备份。 我在我的生产服务器上使用它。 它不会过分强调它们,并且可以执行增量备份。