MySQL Workbenchのマイグレーションで文字化け

SQLServerのデータベースをMySQLに変換しようと、MySQL Workbenchのマイグレーションの機能を使ってみた。スルスルとテーブル構造やデータを変換できた。これはすごい。

と思っていたら、日本語で格納した項目はすべて???で文字化け。ダメじゃん、と思って、いろいろ調べてみた。MySQL Workbenchに文字コードを設定できる設定はないし、さてどうしたものか。

どうせ最後にはMongoDBのコレクションに変換する予定なので、CakePHPのシェルで変換プログラムを書いている。そのプログラムからSQLServerを直接見に行けばいいじゃない、と思ってFreeTDSだのODBCだのCentOSにインストールしてやってみると接続はできた。しかし、Linux, Mac OS X, FreeBSDからはSQLServerは接続できないとCakePHPのドキュメントには書いてある。実際に/Config/databese.phpにSQLServerをデータソースとして設定しても接続できなかった。CakePHPのソースを負っていくとPDOのライブラリが見つからない云々というエラーとなる。

それでも、しつこく調べてみると、無理矢理CakePHPのSQLServerのデータソースを書き換えてSQLServerに接続する方法があって試してみたけど接続できるが文字化けという同じ結果だった。しかし、pearのDB.phpだと文字化けせずにうまく接続できる。でも、今さらDB.phpなんて使うなんてね・・・。

と、諦めているときに、とても当たり前のことに気が付いた。とても恥ずかしいこと・・・。

何とMySQLで文字コードの設定を何もしていなかった。ここのサイトに書いているように/etc/my.iniに

[mysqld]

character-set-server=utf8

[mysql]
default-character-set=utf8

[mysqldump]
default-character-set=utf8

を設定しみる。今度は、MySQL Workbenchのマイグレーションで文字化けせずに、うまくSQLServerからMySQLに変換できた。

やれやれ、大変な回り道をしてしまった。もっと早く気付けよ > 自分。

MySQL WorkbenchのER図は文字化けするのね。

今まではEclipseで動くERMasterを使っていたけど、EclipseからNetBeansに開発環境を変えたので、何かよいER図を書けるツールを探していた。見つけたのは、MySQL Workbenchの中にあるER Diagramの機能。PhpStormにもER図を書く機能があるらしいが、こちらはNetBeansがダメだったら試してみる。

元々は、SQL Serverのデータベースを使ったサイトを、オープンソースに持っていきたいので、そのデータベースのER図が欲しいということからだった。MySQL WorkbenchだとSQL ServerからMySQLへのマイグレーションもできるので便利。ささっとSQL ServerからMySQLにデータベースを変換する。あとはER図を掻き出してみる。

ここまでは簡単にできた。SQL Serverの項目の名前の付け方がよろしくないので、関連付けをするとおかしな名前になってしまうのはしかたない。

問題としては、日本語になっている項目名が文字化けする位でしょうか。環境設定のフォントの指定をメイリオにしても直らなかった。日本語にしているところが問題なのですが。

ERMasterのNetBeans版が出ないかな。ERMasterは使いやすい。

#WordPress サイトの負荷分散の実験

KVMで2つ仮想サーバーを立ち上げて、Wordpressのサイトをリプリケーションして、サーバーの冗長化と負荷分散の実験してみました。

最初に1つのサーバーにWordpressをインストールして、それからKVMのクローンでサーバーをもう一つ作ってしまいます。IPアドレスを別にして2つWordpressのサイトが動く状態にします。

次に、MySQLのリプリケーションの設定をします。設定方法は、

辺りを参考にしました。Wordpressの負荷分散は、HyperDBというプラグインを使用します。これもまた、

辺りを参考に設定します。

これで、片方のサーバーのMySQLを停止してもWordpressのサイトを参照できるかを確認します。

よく考えれば当たり前なのですが、MySQLをマスターにリプリケーションに設定したほうのMySQLを停止したら、参照ができるが更新ができないようになっていました。これで成功なのです。マスターのMySQLに障害が発生したら、スレーブのMySQLからDBを復旧する手順になるのでしょう。

更新は、強制的にマスターサーバーになります。これはHypeDBの機能なのでしょう。スレーブサーバーで更新してしまったら、MySQLのリプリケーションのトラブルになってしまいます。

記事を追加したら、すぐにスレーブサーバーでも参照できるようになります。こちらはMySQLのリプリケーションが正常に動作してしているからです。

マスターとスレーブの切り替えは、DNSのラウンドロビンの機能で実現できそうです。必ず管理ページからはマスターのMySQLのデータベースに格納されるかが確認する必要がありますが、こちらはローカルにDNSを置いていないので未確認です。

以上でWordpressの二重化の実験は完了と言いたいところですが、一つ忘れていました。Wordpressのメディア機能でアップロードしたファイルは、マスターに存在することになります。スレーブのサーバーにアクセスした場合は、存在しないことになります。そこで、/var/www/wp-content/uploads/以下のファイルをマスターからスレーブサーバーに同期を取ってあげないといけません。

cronでrsyncを実行していいのですが、ここではlsyncdでサーバー間をリアルタイム(数秒の遅延はありますが)で同期を取ってしまいます。

を参考に設定しました。これでマスターとスレーブのWordpressのサイトで、アップロードされた画像が正しく参照できるを確認します。

違うPHPのバージョンを切り替えできるようにする。

昔CakePHPで作成したWebサイトの機能追加を行っているのですが、そのサイトはPHP4なのです。テストするため、PHP4の環境が必要です。

PCですとXAMPPで一発インストールなのですが、みんなで参照するLinuxサーバーではそうはいきません。今まではyumで簡単にインストールしていきましたが、PHP4は古いバージョンなのでyumでのパッケージインストールもできません。

しかたないのでソースからコンパイルです。PostgeSQLとかMySQLもソースからインストールしていきます。今回はとても時間がかかる。PHP4 だけではなく、いまはPHP5 もテストで使うであろうと考えて、切り替えるようにしておきます。参考になったのは、

【PHP】複数バージョンのPHPを使う方法

です。違いはApacheがパッケージでインストールしているとか、PHPのバージョンの違いです。

以上、自分が設定したことを忘れそうなので、手順はEvernoteにメモしておきます。

CakePHP 1.3によるWebアプリケーション開発 オープンソース徹底活用

CakePHP辞典 Pocket詳解

MySQLのデータベースをリストアしたときの文字化けと途中エラーの対応

500Mバイト位のダンプされたSQLデータをリストアしたときの問題と対応方法の覚え書き。詳しい対応方法は、こちらから。

まずは途中で、

ERROR 2006 (HY000) at line 803997: MySQL server has gone away

とエラーが発生した。これは実行するクエリが大きすぎるため。MuSQLのリファレンスマニュアルに書いてあった。ここを参照のこと。今回は、my.iniの設定を

max_allowed_packet=128M

にした。

リストアしたデータベースを覗いてみると、見事に文字化け。ダンプされたSQLファイルは正しくUTF-8になっているので、リストアの問題。SQLのファイルの最初に

SET NAMES utf8;

を追加する。今度は正常にリストアしたことを確認して完了。

そういえば、昔同じことで悩んだことがあるかも・・・。

So-net SNSのサービス終了で考えた。

So-net SNSサービス終了との発表がありました。So-net SNSは、OpenPNEの大きな事例として注目していました。また、So-net SNSで運営しているSNSに参加していました。

終了の理由として、収益と運営にかかるコストのバランス、ユーザー数の伸びとのことですが、無料で広告だけでサービスするのは辛いものがあります。

OpenPNE自体は、PHPとMySQLが動くサーバーがあれば簡単に動作するので、私のほうに連絡いただければ設定はできますが、サーバー設定料と使用料はいただきます。OpenPNEのソースコードを読み込んでいますので、カスタマイズも可能です(ちょっと宣伝モードです)。

今は、無料のサービスはいろいろありますが、いつサービスを停止するのがわかりません。以前は、写真のアルバムサービスをどこにするかを考えていましたが、継続してサービスしてくれることが大事です。

たとえば、FlickrとかPicasaウェブアルバムとか、写真ファイルを預かってくれるサービスがありますが、永遠にサービスをやってくれるとは限りません。預けて手元のデータを消してしまうと、突然のサービス停止なんてなると痛い目を会うことになりそうです。やはり、クラウドコンピューティングは永続的ではありません。バックアップを手元に残す必要はありそうです。

CakePHPでMySQLを使うと文字化けする件。単純なミス。

CakePHPでMySQLを使うと、phpMyAdminでみると日本語で格納したテキストが文字化けする件。app/config/database.phpの設定をGoogleで検索して確認しました。

参考にしたサイトは、ここ。MySQLのマニュアルを読めよ。> 自分

‘encoding’ => ‘utf8’

にしなければいけないところ、

‘encoding’ => ‘utf-8’

にしていました。何て単純なミスなの。

買ってあった本をまた買った。

また、やってしまいました。既に買ってあった本をまた買ってしまいました。

今日、地元の本屋でめぼしい本を買って帰ったら、同じ本がありました。読んでいないのが原因なのでした。せっかくサイトで蔵書管理してもダメみたい。

本の山をかたづけていたら、その本が、まだあった。これで3冊目。相当へこんでいます。

3冊買った本は、以下の本です。どこかで売ろうか・・・。

レンタルサーバー会社からのMySQLバージョンアップの回答。#wordpress

先ほどの記事でWordPressが2.9になったことで、MySQLのバージョンが古いので、レンタルサーバー会社にアップデートを依頼した件、早速回答がありました。珍しく回答が速い。

回答は予想通りアップデートしないとのこと。もし、新しいMySQLを使いたかったら別のサーバーに移ってくれとのこと。ただし、移行は自分で行えと。

でも、アップデートしないということは、既に4.0はサポートされてなかったはず。こんなことで大丈夫なのでしょうか? これが普通のサーバー会社の対応? まあ、バージョンアップしたときのリスクを負いたくないというのは当たり前の考えかもしれませんが、もし何か問題があったらどうするのでしょうか?



WordPress2.9アップデートでレンタルサーバー会社にMySQLのアップデートを依頼 #wordpress

前の記事に書いているように、今借りているレンタルサーバーにインストールされているMySQLのバージョンが古いので、WordPress2.9へのアップデート失敗しまいます。そこでレンタルサーバー会社にMySQLのアップデートの依頼をしました。

しかし、結果は見えていますので、ダメ元です。

4.0.27というのはあまりにも古い。サポートは既に終了しているはずだが。同じレンタルサーバー会社で借りている他のサーバーは、4.1.21ですので、まだいいか? でも、MySQLの4.1系もそろそろサポートが終了するはずだったか・・・。