Wordpress 超大数据库的导入

可能有人遇到过这种问题:想给 Blog 搬家,换主机时需要把导出的数据库重新导入到新的数据库主机中,但 MyPHPAdmin 对数据库大小的有限制,这个限制各个主机商不一样,有的 5M 有的 8M,抠门一点的只有 2M,当你的数据库大过这个限制时,根本无法导入。有时候就算没大过这个限制,也会在导入时超时。

那么怎么解决这个问题呢?你的主机支持 Shell 的话,你可以 SSH 登陆主机,执行如下的命令:

导出数据库:

mysqldump -h HOSTNAME -uUSERNAME -p DBNAME > exported_db.sql

导入数据库:

mysql -h HOSTNAME -uUSERNAME -p DBNAME < exported_db.sql

以上 HOSTNAME 是数据库主机名,USERNAME 和 DBNAME 分别是登陆 ID 和数据库名,导出的数据库存放在 exported_db.sql 文件里。

在 Shell 下导入数据库不再受到 MyPHPAdmin 中的导入大小限制,理论上数据库可以无限大。

hhalloyy 同学在自己的数据库上对以上的方法进行了验证,在此鸣谢。

Tags: ,

解决使用 MySQL 命令不能添加中文内容

下面来重现一下解决问题的过程。

我想为批量为我的blog上的一些帖子加上tag, 但不想一个帖子一个帖子的改,主要是太麻烦了,所以就想直接用 MySQL 命令来完成。我用的tag插件是 Jerome’s Keywords, 因此修改的主要的原理就是往数据库中的 wp_jkeywords 这个表里添加相应的 post_id 和 tag_name.

可以用命令:

INSERT INTO wp_jkeywords (post_id, tag_name) VALUES (帖子编号, tag名);

来完成。

不过在命令执行完后,我检查相应的帖子,发现所有的中文tag全部显示成了 ??, 第一个念头就是 Table 的编码不是 UTF8, 检查后发现已经是 UTF8 了。发信求助后在海豚的提醒下检查了一下 Collation 发现依然是默认的 latin1_swedish_ci 编码,不过由于没找到改变 Collation 的编码的选项,于是我在 wordpress 后台导出数据库,然后在 editplus 下把数据库中所有 character set latin1 改成 character set utf8 后重新导入, 然后在 phpMyAdmin 中检查导入的内容,发现所有的编码都已经变成 uft8 了。在 phpMyAdmin 后台看到中文数据显示正常,不再是以前看到的乱码。

接着打开我的 blog 后发现,所有的帖子内容都是 ?, 想起以前看到过的解决方案,于是打开 wp-include 目录把文件 wp-db.php 里

$this->dbh = @mysql_connect($dbhost,$dbuser,$dbpassword);
这行下加上
$this->query("SET NAMES 'utf8'");

再打开 blog 后显示正常。

以后再用 SQL 命令添加中文 tag 不再显示 ?? 了。至此问题解决。
———
总结:

  1. 必须把数据库完全(包括 Table, Field, 和 Collation)变成 UTF-8 格式才能用 SQL 命令处理中文字符。
  2. Wordpress 似乎对中文的处理不太理想,必须手动添加一行代码。

Tags: , , , ,