タグ別アーカイブ: DB

カーネルパラメータvm.swappiness によるスワップの最適化


Linuxでのswap

Linuxはメモリが潤沢にある場合でも、頻繁にSwap領域を使うようです。そのSwapする頻度を調節するカーネルパラメータがvm.swappiness(カーネル2.6以上から導入されたパラメータ)です。

用途

データベースサーバなどパフォーマアンスを求められるサーバで、頻繁にスワッピングが発生するのが困る場合などに有用。swapが発生するのを最小限にするために値を0〜10くらいにすると良い。

使用方法

vm.swappinessの値を確認する方法は以下です。値が小さいほうがSwapしにくくなる。つまり、小さくすればするほど物理メモリを使えるだけ使うようになる。0にすると物理メモリを使いきるまでswapしなくなる。

現在のswappinessの値を確認(デフォルト60)
# cat /proc/sys/vm/swappiness
60

vm.swappinessの設定変更

ファイルに追記(0に設定してカーネルパラメータを反映させる)
# vi /etc/sysctl.conf
 省略
 …
 vm.swappiness=0
 … 
 省略

設定を反映する
# sysctl -p

※rootユーザで実行を想定

【參考】

mysql5.0から5.5へアップグレードでてんやわんや


サーバのパッケージをアップグレードでMysql破損

以下のコマンドを実行した。。。

$ sudo yum update

remiのリポジトリを追加していたのを忘れていてアップグレードパッケージが30くらいあったんで確認もせず実行したらMysqlが死んだ・・・dumpとかとっておくべきだった~

というのもこのブログのサーバである。そのため一時期このサーバが全く使えなくなってしまった。やってしまった。。

とりあえずMysqlを元のバージョンへダウングレードして動作させようと思う

mysql再起動してもエラーとなって止まってしまうので戻そうということで、「/var/lib/mysql」のデータベースファイル群をまるっとコピーしてバックアップ。

その後5.0へダウングレード。

$ sudo yum downgrade mysql-server5.0.××

これで動くかと思った、、、mysql-server自体は起動できました。しかしSELECTなどSQLを実行した結果エラーとなった。。引き続き原因を探ろうということでステータスを確認

sql>show table status
「incorrect information in file mysql」というテーブルが多数ありデータが壊れている模様

こうなってしまったら、5.0で動かすのは難しそうだと思いました。

5.5へ再度アップグレード、起動時のエラーに対処し、データのアップグレード

やっぱり5.5に再度アップグレードしてmysqlを起動しログを見ながら確認、そしてmy.cnfを編集。。これを繰り返してエラーを減らしていく

# /etc/init.d/mysqld start
MySQL Daemon failed to start.
Starting mysqld:                                           [FAILED]

ログを見ながらmy.cnf変更していく(5.0から5.5にアップグレードしたことで使用できない設定があるようだ・・・)

120118 10:13:30  InnoDB: Waiting for the background threads to start
120118 10:13:31 InnoDB: 1.1.8 started; log sequence number 53172884
120118 10:13:31 [ERROR] /usr/libexec/mysqld: unknown option '--skip-locking' ←ここ
120118 10:13:31 [ERROR] Aborting
120118 10:16:28  InnoDB: Waiting for the background threads to start
120118 10:16:29 InnoDB: 1.1.8 started; log sequence number 53172884
120118 10:16:29 [ERROR] /usr/libexec/mysqld: unknown variable 'default-table-type=InnoDB' ←ここ
120118 10:16:29 [ERROR] Aborting

上記のオレンジ色の部分をmy.cnfから削除していく。。

この時点ですべてのエラーがなくなったらMySqlを起動し、データのアップグレードを実施
# /etc/init.d/mysqld start
# mysql_upgrade

という上記の作業を行うことで一応うごいたっぽいから、wordpressのDBをdumpして、バックアップを取っておく。もう一度再起動してエラーログ等を確認する。エラーログも吐かれていない。。これで問題なさそう!!

おそらく原因はアップグレードでデータが壊れた訳ではない。Mysql5.0から5.5にアップグレードしたときに5.5では使用できない設定がいくつかあったためだった。。その使用できないディレクティブを調整して変更や削除することでエラーがなくなった。

 

教訓

エラーの文字にビビってすぐにダウングレードしたのがだめだった。ダウングレードして動かんとか色々時間がかかった。少し落ち着いてまずはエラー内容を把握しておけばすぐにmy.cnfの設定を変えることで対応できたとわかったはずなのに。。。

エラーメッセージはデバッグを行う前に必ず一通り目を通す!!!

 

 

 

 

ねこのおもむき

mysqldumpのよく使うオプション


mysqldumpについてオプションなどのまとめ

mysqlを最近よく使います。テーブルの構造を変更するときにdumpを念のためとっておこうということが多々あります。そのときにはmysqldump コマンドを使用するのですが、よく利用するオプションをまとめます。

よく使うオプション

mysqldump -B -c -u[ユーザ名] -h[ホスト名] -p[パスワード(入力なしでもよい)] [ DB名 [table名..] ] > dump.sql
「-u」        ユーザ指定 
「-p」        パスワードの指定を入力
「-h」        接続先ホスト
「-B(--databases)」 create db 文を含む
「-c」        dump中のInsert文にカラム名の指定を入れる

その他のたまに使用するオプション
「–no-create-info」 create table を含まないダンプ データのみのバックアップ
「–no-data」    データを含まないテーブル構造のみのバックアップ createtable文のみ
「–skip-add-drop-table」 drop tableの文を吐き出さない。
「–skip-extended-insert」 1行ずつのInsert文で出力される(diffを取る時に便利)
参考
http://www.key-p.com/blog/ohnishi/article.php?id=7
http://dev.mysql.com/doc/refman/5.1/ja/mysqldump.html

他で参考になる!

% mysqldump --opt --single-transaction --flush-logs -uroot DB名
https://github.com/hnakamur/chef-cookbooks/blob/master/mysql/templates/default/backup_mysql_db.sh.erb#L30