ようやくtritonnに移行完了
ハイパー長い戦いだった...。
とりあえず何をしていたかを書くと、
- mysqlで使っていたデータをtritonnに移し変えたい
- tritonnのセットアップは、http://d.hatena.ne.jp/kudzu/20100815/1281848093に書いてある通りでOK
- fulltext index作ったら*1sennaのlexicon size 0だった
- 何もmysqlの設定を変えず使っていたため、元々のmysqlの文字コード設定がlatin1で、euc-jpのデータを突っ込んでた
- その上mysqldumpがutf-8で吐き出そうとするので、さらにデータが壊れる。破損せずに出すには、
$ mysqldump -c -n -u mysql db --default-character-set=latin1 > dump
こんな感じ。
$ mysqldump -c -n -u mysql db --default-character-set=latin1 | sed -e 's/latin1/utf8/g' > dump
- データもeuc-jpからutf8に変換
$ mysqldump -c -n -u mysql db --default-character-set=latin1 | sed -e 's/latin1/utf8/g' | iconv -c -f EUC-JP-MS -t UTF-8//IGNORE > dump
- ちなみに-cとIGNOREは多分同じことをする気がするけど、一応つけておいた。つけないと詰まった。多分変なデータが入ってたと思う。
- nkf -Ewも試してみたけど、こっちはだめだった。多分おかしいデータのフィルタリングができないから?
- ちなみにubuntuでiconvをインストールしたい場合はapt-get install unicode。apt-get install iconvじゃない。
- 何故か文字コード変換したdumpをmysqlに読ませると、"Got a packet bigger than ‘max_allowed_packet’ bytes"というエラーが出る。
# mysql -u admin -p
mysql> set global net_buffer_length=1000000;
Query OK, 0 rows affected (0.00 sec)
mysql> set global max_allowed_packet=1000000000;
Query OK, 0 rows affected (0.00 sec)
した後に、
$ cat dump | /usr/local/tritonn/bin/mysql -u root cms2ch --max_allowed_packet=16M --default-character-set=utf8
- 何故かこのページのデータ http://copipe.cureblack.com/copipe/2010/02/15/14312 だけが変なデータがあったため、一行だけdeleteしてやり直した
- php側はeucを使っている
- my.cnfでinit-connect SET NAMES ujisだと何故か正しくエンコーディングが変換されない
- mysql_set_charset("ujis")なら直る。
- Ethnaで使われているDBライブラリのPEAR::DBはcharsetの変更をサポートしていない
- どうせDBは一つしかないし、面倒くさいからPEAR::DBを直接書き換えることにした。ファイルは/usr/share/php/DB/mysql.php。バージョン1.7.13らしい。
if (!$this->connection) {
if ( ($err = @mysql_error() ) != '') {
return $this->raiseError(DB_ERROR_CONNECT_FAILED,
null, null, null,
$err);
} else {
return $this->raiseError(DB_ERROR_CONNECT_FAILED,
null, null, null,
$php_errormsg);
}
}//ここに加える
mysql_set_charset("ujis");
これで切り替え完了。
あとはfulltext indexの作成と、スクリプト側でlike %foo%みたいなコードをmatch againstに書き換えるだけ。
結構しんどかったなぁ...。