よかろうもん!

アプリからインフラまで幅広くこなすいまどきのクラウドエンジニアが記す技術ブログ

MySQL

MySQLでcharacter_set_databaseがlatin1になってしまう問題の対応方法

アプリケーションのバージョンアップなどでテーブル追加を伴うスキーマ変更があった場合に、テーブル追加したところのデータだけ画面で「????」になって表示されてしまうことが稀にあります。 この対応方法について、発生理由と共に簡単に解説しておこう…

MySQLに関するTips

いざという時に忘れがちなので、メモとして残しておきます。 ■ Queryをキャッシュに格納しない query_cache_type が有効な場合に限り、使用できます。 mysql> SELECT sql_no_cache * FROM users; ■ 実行計画の確認 発行するSQLが遅いかなどを確認する際には…

mysqlのログファイルのサイズを変更する

バイナリデータを格納するために、BLOB型やその拡張のMEDIUMBLOB型を利用するシーンが時折あるかと思います。BLOB型を利用していて、サイズの大きなデータをDBに格納しようとすると、MySQLのログに以下のようなエラーログが出力されることがあります。 10090…

これを知っておかないと、MySQLサーバの再起動でDBデータの不整合が発生するかもしれません!

Railsに限らず、MySQL(Innodb)を利用したサービスを開発/運用しているなら、これから解説する内容を知っておかないと、予期しないデータ不整合を発生させてしまうかもしれません。 データ不整合が発生してしまったら、本来あるべき状態に戻すのはかなり難易…

実行されているSQLを確認/強制終了する方法

忘れない様に備考録として。MySQLがCPUリソースを占有している場合は、以下のコマンドで何が起こっているのかを調査できる。 mysql > SHOW FULL PROCESSLIST; Id User Host db Command Time State Info 11444 root localhost skip_test Sleep 53 NULL 12033 …

パスワード付きユーザを作成する時のTips

MySQLでユーザを作成する際に、ハイフン(-)等の特殊キーを含む場合は、ユーザ名をシングルクォート(')で括らないとエラーとなってしまいます。 パスワードを設定する場合も同様です。さらに、作成したユーザに対して、特定スキーマのみに全権限を与えるよう…

MySQLでViewを使うときに注意すること

MySQL 5系からViewが利用可能となりました。 そんなView機能を利用していて、ネットワーク構成が変更になった場合には気をつけておかなければならないことがあります。 それは、DEFINER節とSQL SECURITY節についてです。この2つの節の説明は以下のように述べ…

MySQLTunerを試してみた

RSSをチェックしてて、MySQL Tunerなるものがあるということを知ったので、さっそく試してみました。 利用するにはリポジトリからperlスクリプトをチェックアウトしてくるだけでOKです。 $ mkdir -p ~/tools/mysql-tuner $ cd ~/tools/mysql-tuner $ svn co …

innotopを使ってみた

innotopバージョン1.6.0をインすトールしてみまっす。 ソースコードは以下から落としてくる。 $ wget http://downloads.sourceforge.net/innotop/innotop-1.6.0.tar.gz?modtime=1194607129&big_mirror=0展開 $ tar xvzf innotop-1.6.0.tar.gz ; cd innotop-1…

migrateでストレージエンジンを指定

railsアプリケーションを動作させるためには、DBのmigrateをしてコマンド一発でテーブルの作成および変更ができます。そのため、利用者は安易に構築ができるようになるのですが、裏ではどのような処理が走っているのでしょうか? 今回はMySQLのドライバにつ…

ストレージエンジンの変更方法

alter tableを利用 mysqldumpコマンドを利用して出力されたファイルの中身を書き換える 以上の2つの方法がある。 http://dev.mysql.com/doc/refman/5.1/ja/mysql-cluster-multi-load-data-queries.html MySQL Clusterの制限事項 http://dev.mysql.com/doc/re…

InnoDBからNDBへの変換

ちょいと調べてみたけど、全然ヒットしない。 なのでMyISAMからInnoDBへの変換方法を調べてみると、データの入れなおしをしていることがわかった。 http://dev.mysql.com/doc/refman/4.1/ja/converting-tables-to-innodb.htmlやっぱりMySQL Clusterを利用す…