後はエラーが出た時に対応します。ブログを運用しながら移行しました。文字コードUTF-8のデータベースを新しく作り、そこにEUC-JPのデータベース全体からダンプしたファイルを使ってデータベース全体をリストアしました。ダンプ(バックアップ)はcronで毎日動かしていますが、リストアは初めてでした。今回移行したデータベースはPostgreSQLです。旧データベースはPostgreSQL7でしたが、新データベースはPostgreSQL9になっていました。一部のSQLでエラーが出ていたのでそちらも修正しました。テーブル結合を行っている場合、FROM句に全てのテーブル名がないと(結合はWHERE句に書いているので)エラーになるようになっったようです。言えば「どうして全てのテーブルを書いていないのに動くんだろう」と思った記憶があります(でもそのまま動かしていたなんて・・・)。ついでのついでで、html5へ移行もしました。いつも作っているソフトウェアはフィルシステムですし、滅多にデータベースなんて触らなくなってしまっているので、とても緊張しました。息するの忘れているんじゃあないかって自分で思いました。大切なサイトの移行が残っています。ブログは予行演習でした。良い勉強になりました。コメントTop↑SQLDBデータの一括置換2012年11月02日データベースに登録しているデータを一気に置換するコマンドはないかと調べてみました。【replace】関数で実現できるようです。'filed');で変更できます。使ったことがある気がしますが、忘れてました。ここまでは何の問題もなかったのですが、updateが処理した件数を取ってみて、驚きました。ありえない数だったのです。該当する件数は100件ほどなのに、処理件数は1000件近かったのです。処理件数はデータ全件数になるようです。全ての行に対してreplaceを実行するからでしょう。久々にMySQLを触りました。SELECTはできたのですが、INSERTがどうしてもできません。初めは文字コードが違っているので挿入できないのかと思ったのですが、どうやらそうではないらしい・・・エラー内容を取得できればヒントが得られるのに。PostgreSQLは【@】でエラーを吐かない様にしていなければ、エラー内容が吐き出されます。MySQLは【@】を取っても、エラーを吐いてくれません。すれば・・・と考えていると、ふと思い出しました。言えば、何かコマンドがあったような気がします。調べたらすぐ分かりました。【mysql_error()】で直前のエラー内容を取得できます。使わないと忘れるので、ソース中に残し、コメントアウトしておきます。昨日で東日本大震災からちょうど一年たちました。あっという間だった気もしますし、やっとという気もします。私は被災したわけではありませんが、1年前は激しい頭痛と吐き気に襲われ、眠れなかったのを覚えています。実際に被災された方は、どのようにお感じておられるのでしょうか。一人でも多くの方が、少しでも早く希望を持って生きられるようになることを願ってやみません。そのために、自分には何ができるのか。忘れないように、ずっと考え続けていかなければと肝に銘じました。TVを通してですが、被災地で力強く立ち上がっておられる方を拝見すると、私も負けてはいられない、と気持ちが奮い立つこともしばしばあります。私の方が励まされてしまいます。話は変わり、MySQLのまとめです。一応DB運用ができるようになったので、DBのバックアップと最適化ができるようにしました。BKファイルへのパスとなります。MySQLの定期的バックアップでも、このコマンドにはユーザーIDとパスワードが含まれています。これを隠したいので方法を探してみました。PostgreSQLのときには、パスワードファイルを作った記憶があります。MySQLでも同じようにできるはずです。リファレンスマニュアルどうやら【.my.cnf】に記述すれば自動で読んでくれるようです。調べてみると、すでに作成されていました。ユーザーIDとパスワードを抜いて動かしてみます。BKファイルへのパスこれでOKです。参考にしたサイトは、バックアップスクリプトを書いて、それをcronで実行する例ばかりだったのですが、上のコマンドをcronで実行しても動きます。私の場合、ファイル名を変えて履歴を取っておくというようなことはとりあえず必要ないので、単純にバックアップファイルを上書きしていきます。最適化MySQLの最適化を参考にしました。データベース名】です。データベース名となります。コメントTop↑SQLMySQLのトランザクション2012年02月06日MySQLでトランザクションを切るようにコーディングしていました。これをテストしようと、エラーを起こして、ロールバックしてみたのですが・・・なぜかロールバックされません。エラーは起きています。何度やってもダメです。何が原因なんでしょう。調べてみると、MySQLには、様々なテーブルがあり、テーブルの種類によってできることとできないこと、特徴が異なるようです。メジャーなものに、【MyISAM】と【InnoDB】があります。今回問題になっているトランザクションは、【MyISAM】ではできないことが判明しました。MySQL、MyISAMとInnoDBを選ぶ方法(このサイトは、やたらと何かを読み込んでいるようで、滅茶苦茶遅い。辺りが参考になります。デフォルトだと【MyISAM】が作られるようです。ううん、トランザクションくらいは普通に使いたいと思うんですが、そうでもないのかなぁ。パフォーマンスは落ちるようですが、トランザクションは必要なので、テーブルタイプを【InnoDB】に変更してみました。MySQLの基礎を学ぼう今回はロックをかけるほどの精度はいらないので、ロックについてはスルーします。トランザクションを始める前に、オートコミットをオフにする必要がある場合もあるようです。オフになっていても、安全のためオフにすればよいと思います。MySQLへの接続変数);でオフにできます。$objMySQLConID);mysql_close($objMySQLConID);となります。色々な例をみていると、【mysql_query】の2番目の引数【$objMySQLConID】がないものもあります。PHPのマニュアルをみると、なくてもいいとなってます。ないと気持ち悪くて仕方ないので、つけておきます。今回の開発はMySQLでやているのですが、どうもDBへの入出力で文字化けが起こります。今まで、サイトはEUC-JPでコーディングしていたのですが、MySQLはUTF-8ですし、UTF-8だからMySQLで動かしたいので、なんとかUTF-8の文字化けを解消したいです。調べると、解決方法が見つかりました。$objMySQLConID);これでOKなようです。