我想使用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为该数据库正确生成备份?
mysqldump和show 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议进行第二次安装并将备份恢复到它。 这有三件事情:
如果您不想停止服务器进行备份,我强烈build议您查看Xtrabackup。 该工具执行InnoDB(和XtraDB)表的在线备份。 我在我的生产服务器上使用它。 它不会过分强调它们,并且可以执行增量备份。