12月份原来在炎黄的服务器空间就要过期了, 想了想是不是继续续费的问题, 最终决定还是搬到同济网服务器吧. 毕竟是一个经常关心的服务器, 几乎每天都来维护, 放在自己手里毕竟还是放心一点. 无奈同济网服务器上的MySQL字符集还是老的3.25版本的latin1字符集, MySQL的版本也过低, wordpress装不上. 更新字符集的问题老早就提出来了, 只是这个过程实在太复杂, 一直没实施. 其实这其中的每个细节我都仔细想过, 只是没有操作出来而已. 不过即便如此, 今天在真正操作的时候心里也是没底的.

起了个大早, 6点半就开始在Linux主机上工作, 一直做到下午, 一共转了近1000万行SQL数据, 把字符集成功转换成了gbk. 功在当代利在千秋的事情. 从此我们的服务器用上了最新版本的MySQL, Apache和PHP.

如何做的呢? 说下大概过程吧. MySQL的文档里讲推荐逐步升级, 3.x要先升级到4.0, 然后4.1, 然后5.0. 我觉得没必要, 另外4.0这样的老版本根本找不到下载了, 这个文档写的太XX了. 首先在MySQL 3.x里用mysqldump把数据导成SQL文件, 按照数据库导出, 大型数据库要注意对导出后的文件进行分割, 用如下命令:

split -l 100000 filename

进行按行分割, 我们的BBS分成了8个100万行的文件. 这样操作的原因是一旦出错, 修改的时候打开起来方便, 不至于每次打开一个3GB的大文件. 然后升级MySQL到5.0, 建数据库, 整理选成gbk_chinese_ci, 然后在每个将要导入的文件开头加上:

set names 'gbk';

然后用如下命令导入:

mysql -uroot -ppassword --default-character-set=gbk -f target_db < source.sql

这样的话, 就会在phpMyAdmin里面正确看到我们的母语. 别告诉我你不行. 我行你就行, 不然对不起孔子, 也对不起王选.

MySQL是一个优秀的小型数据库,应用很广。但是新版本出来之后,困扰PHPMyAdmin用户的问题也出现了:

shell> mysql
Client does not support authentication protocol requested
by server; consider upgrading MySQL client

官方的说法是

MySQL 4.1 and up uses an authentication protocol based on a password hashing algorithm that is incompatible with that used by older clients. …..

如果你升级mysql到4.1以上版本后遇到以上问题,请先确定你的mysql client 是4.1或者更高版本.(WINDOWS下有问题你就直接跳到下面看解决方法了,因为MYSQL 在WINDOWS是client和server一起装上了的)
请使用以下两种方法之一
其一:
[code=’sql’]mysql> SET PASSWORD FOR
-> ’some_user’@’some_host’ = OLD_PASSWORD(’newpwd’);[/code]
其二:
[code=’sql’]mysql> UPDATE mysql.user SET Password = OLD_PASSWORD(’newpwd’)
-> WHERE Host = ’some_host’ AND User = ’some_user’;
mysql>; FLUSH PRIVILEGES;[/code]
上面用户名密码的部分请按自己实际情况修改….
这样做后,连接就会正常了@!
但是在我的应用中,只有第二种方法管用…