yumで古いバージョンのmysql(5.1)をインストール
古いバージョンのアプリケーションは最初からはいっているリポジトリでは無い事が多い。
No package mysql51 available. No package mysql51-devel available. No package mysql51-server available. No package mysqlclient15 available.
1. リポジトリ設定ファイルを取得
wget http://dl.iuscommunity.org/pub/ius/stable/Redhat/5/x86_64/ius-release-1.0-11.ius.el5.noarch.rpm wget http://dl.iuscommunity.org/pub/ius/stable/Redhat/5/x86_64/epel-release-5-4.noarch.rpm
2.インストール
rpm -Uvh *-release*rpm
3. mysql5.1インストール
yum -y install mysql51 mysql51-devel mysql51-server mysqlclient15
MySQL4系の罠 query interrupt
MySQLで、モニタから適当にクエリ投げている時
「あっ、これは返ってこないな」とおもってCtrl+Cでクエリ実行を中断することがある。
業務で初めてつかったのはMySQL5.1で、そういう手段は特に問題はなかった。
レガシーな保守をすることになって業務では初めてMySQLで4.0を触った。
これで同様なことをするとCtrl+Cは実はモニタを抜けるだけで、クエリは実行されたままだ。
しかもストレージエンジンがMyISAMで、書き込みが多く走るテーブルの場合。。。
- 重いクエリを投げる
- 共有ロックがかかる(read only)
- 更新クエリがたまる
- (さらにクエリがたまると) コネクションの上限に達する
- Webサーバーからアクセスできなくなる
- フロントがテンポる^0^
[対策]
一度モニタを抜け、重いプロセスを確認
show processlist;
プロセスKill
kill 12345;
これで一応大丈夫。
※Killするときは間違って他のプロセスを切断しないこと
(特にReplicationのI/Oスレッド、クエリスレッド)
QFixHowm.vimが糞便利な件
今更感だけど。
アイディアとか、残しておきたいテキストとか、サクッとメモれるツールないかなーと
思っており、通常はmacのsticky使ったりEvernoteとかそこらへん。
vimでメモしやすいプラグイン見つけたから今日からつかってる
QFixHowm
- install
NeoBundle 'git://github.com/fuenor/qfixhowm.git'
NeoBundleならこれで。
- 設定
↓のような感じで保存先ディレクトリとか決めておく
"--------------------------------------------------------------------------- " QFixHowm "QFixHowmキーマップ let QFixHowm_Key = 'g' "howm_dirはファイルを保存したいディレクトリを設定。 let howm_dir = '~/Dropbox/memo' let howm_filename = '%Y/%m/%Y-%m-%d-%H%M%S.howm' let howm_fileencoding = 'utf-8' let howm_fileformat = 'unix' let QFixHowm_DiaryFile = 'diary/%Y/%m/%Y-%m-%d-000000.howm' "---------------------------------------------------------------------------
- 使い方
これだけで結構便利。
Editor
色々エディタ、IDE渡り歩いたけど、Vimがやはり安定かもしれない。
渡り歩いたエディタ/IDE
で、結局vimに落ち着いた。
vimな理由
- テキストエディタだから
- テキストエディタのくせに柔軟だから
- 細かいショートカットが多い
- その行の特定の文字列まで移動、削除、選択するのが簡単
- プラグインが豊富
- プラグインの管理はめんどいけど、neobundleいれたら楽ちんになった
- 矩形選択
- 割といろんなエディタにあるけど、各種ショートカットと組み合わせてすごい使いやすい
- window分割
数えきれないくらいあるんだけど、
vimshellいれて移動も全部ショートカットでできるし、
無理やりinsertモードはいって、コピーとかいろいろいできるしね。柔軟ですね
mysql4.0チューニング
諸事情で今となってはレガシーなmySQL4.0に大量のデータをプログラムからぶちこむことになり。。
1時的にでもパフォーマンスをあげなければいけなくなった。
条件
MySQL4.0対象テーブルのストレージエンジンはMyISAM、数百万レコード
3年以上稼働しており、枯れているのでmy.cnfはいじらず。。
検討
- 対象テーブルのindexを一旦解除し、index作成のオーバーヘッドを減らす。
- 対象テーブルのindexを試しに一つ削除してみる
mysql> drop index index_name on table_name;- 消し終わるのに45minかかってしまった。。これでは意味が無い。
- 試しにcreate indexしても同じくらいの時間を要する。一つのindexでこれだけ時間かかってはたまらない。
- alter table disable keysで一時的にindexを無効にしてみる
- ほぼ一瞬で完了。
- しかし、プログラムでデータインサートしており、その際に対象テーブルの参照も行われるので、indexがないことにより逆にめちゃくちゃ時間かかる
- ためしにalter table enable keysでindexしたところ、これも1時間近くかかる
- optimize table table_nameをしてみる
- analyze table table_nameをしてみる
- optimize tableのindexのみ版
- optimizeと比較してかなり早くおわった。
- ただしプログラム実行時間にそこまで違いがないような。。。
- alter table table_name key MyISAM
- 今度はこれで試す
- 対象テーブルのindexを試しに一つ削除してみる
mysqlリストア方法
結局切り戻すことになったのでメモ
構成
MySQL4.0ストレージエンジンはすべてMyISAM
マスター1台、スレーブ2台の冗長構成
方法
- slaveとmasterのmysqlを落とす
- 事前にバックアップしたmySQLのデータを用意します(自分の環境では/var/lib/mysql以下
- masterとslaveの全てに用意しておく(ex /var/lib/mysqlBK に展開
- /var/lib/mysqlを移動
- /var/lib/mysqlBKを移動
- mv /var/lib/mysqlBK /var/lib/mysql
データの移動自体はこれでOK
以下起動とレプリケーションの設定
補足
- my.cnfにレプリケーションの情報が書かれていること前提
- 今回はデータのみバックアップしており、binlogなどはバックアップしておらず。。本来ならbinlogもそのままリストアすればreset masterをする必要がない。また、マスタだけじゃなくスレーブもバックアップしてると、それらを元の場所へリストアするだけでちゃんと動く
mysqlBackup方法
MySQLを止めていいのであれば、データディレクトリごとバックアップOK
# /sbin/service mysql stop # tar cvzf mysql_backup.tar.gz /var/lib/mysql
mysqlのデータはMYI、MYD、frmファイルがある。
: users.MYD users.MYI users.frm :
それぞれ、下記のデータが保存されている。
テーブル名.frmファイル | どのようなカラム構成にてできているかなどのテーブル構造のデータ |
テーブル名.MYDファイル | テーブルのレコードデータ |
テーブル名.MYIファイル | そのテーブルに対して作成された複数のインデックスデータとテーブルの統計情報 |