カテゴリー別アーカイブ: データベース

カーネルパラメータ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ユーザで実行を想定

【參考】

[mac] homebrewでMySQLをインストール


 
 
homebrewでmysqlをインストールする際に注意する点などを書いてみます。
普通に以下のコマンドでインストールできます。
インストール後になんやら出てきますが、初期設定方法が書かれている(長いので省略します)。

% brew install mysql
・・・出力省略・・・

これはいつでも、以下のコマンドを実行することで確認できる
% brew info mysql

次の手順で進めていく(以下の内容は % brew info mysql で出力される内容に全て書いてある)

  1. 初期化コマンドの実行
  2. mysqlサーバの起動 これでmysqlは使用可能になる
  3. 自動起動の設定
1.初期化コマンドの実行(出力結果で重要な箇所は赤色 ユーザの作成とデーモンとして動かす設定)
% unset TMPDIR 
% mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp
Installing MySQL system tables...
OK
Filling help tables...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

/usr/local/Cellar/mysql/5.5.20/bin/mysqladmin -u root password 'new-password' /usr/local/Cellar/mysql/5.5.20/bin/mysqladmin -u root -h taka-mac.local password 'new-password'

Alternatively you can run:
/usr/local/Cellar/mysql/5.5.20/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:
cd /usr/local/Cellar/mysql/5.5.20 ; /usr/local/Cellar/mysql/5.5.20/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd /usr/local/Cellar/mysql/5.5.20/mysql-test ; perl mysql-test-run.pl

Please report any problems with the /usr/local/Cellar/mysql/5.5.20/scripts/mysqlbug script!

 
 

2.mysqlサーバの起動
% mysql.server start

 
 

3.自動起動の設定
新規インストール時
% mkdir -p ~/Library/LaunchAgents 
% cp /usr/local/Cellar/mysql/5.5.20/homebrew.mxcl.mysql.plist ~/Library/LaunchAgents/ 
% launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

アップグレード時
% launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist 
% cp /usr/local/Cellar/mysql/5.5.20/homebrew.mxcl.mysql.plist ~/Library/LaunchAgents/ 
% launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

 
 
あとは普通に以下のように接続しユーザやDBの作成を行う。

% mysql -uroot

 
 

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