Tritonnやめてappサーバーとmysqlサーバーに分割。

Tritonnを使用して、mysqlを構築していたが、
メモリ食いすぎで設定がどうにもうまくいかないので、辞めた。。
sennaのメモリ設定についても情報不足で二進も三進も。
いきなり本番機はやりすぎたので、次回はテスト機でしっかり試してからとちっと反省。
sennaを外したとたん、安定。
あっという間に2Gのswapを食いつぶし、サーバーの再起動を1日何度も強いられていた日々から開放。


Q事象.dfすると残り容量少なすぎ
#df
#df -m
Filesystem 1M-ブロック 使用 使用可 使用% マウント位置
/dev/hda2 18083 16813 352 98% /
/dev/hda1 99 12 82 13% /boot
tmpfs 250 0 250 0% /dev/shm


一応内容も確認しつつ。
tail -f /var/log/httpd/access_log
apaceh.logが多すぎなので削除

  • rw-r--r-- 1 root root 51712098 10月 13 18:59 access_log
  • rw-r--r-- 1 root root 115296306 10月 10 03:10 access_log.1
  • rw-r--r-- 1 root root 114465671 10月 3 03:09 access_log.2

Q方針.cakephpのviewキャッシュ多すぎ

A古いキャッシュを削除する
[10日以前より古いファイル一覧を取得]
find /var/www/html/apparel/cake/app/tmp/cache/views/ -mtime +10

Q事象.mysqlでToo many connections エラー

方針.一時期IO負荷を下げる為に、クライアント接続数を減らしたのが原因。再度上げるしかない?
mysql> SET GLOBAL max_connections=500;

Q事象.mysqlでWarning: mysql_connect(): Host '***.***.***.**' is blocked because of many connection errors.
Unblock with 'mysqladmin flush-hosts'

A方針.デフォルトで、同じホストから10回アクセスに失敗するとブロックされる。
mysqladmin -u root -p flush-hosts で回避
そもそも'port' => '/tmp/mysql.sock'で何かしらうまくいってない。
port3306に変更したら直った。

Q.mysql落ちる。
A.tritonやめた。なぜかlikeのが早いし、、要調査。
×where match(site_name,site_comment) against ('AAAA')
〇where site_name like '%AAAA%'


QDBのデータを別サーバーに移す

新DBサーバ
create database データベース名;

[ダンプファイルの取り方]

    • 両方

mysqldump --default-character-set=utf8 -u root -p DB名称 > /var/www/mysqldump/all_dump.txt

    • テーブルのみ

mysqldump -d --default-character-set=utf8 -u root -p DB名称 > /var/www/mysqldump/all_table_dump.txt

    • テーブルのみ

mysqldump -t --default-character-set=utf8 -u root -p DB名称 > /var/www/mysqldump/all_data_dump.txt

[ダンプファイルの戻し方]
mysql -u root -p DB名称 < /var/tmp/all_dump.txt


QDBのデータを別サーバーに移すでデータ戻そうとしたらエラー
ERROR 1064 (42000) at line 25: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NGRAM, NORMALIZE, 512 (`blog_title`)
) ENGINE=MyISAM AUTO_INCREMENT=201 DEFAULT ' at line 13

A元サーバーはtriton入れていたのでバージョン違い。
ダンプファイルで、tableのみ出力して、
FULLTEXT KEY `blog_rss` USING NGRAM, NORMALIZE, 512 (`blog_title`)
などを削除した上で、実行してテーブル構造のみ作成。
あとはデータを入れる。

QIOの負荷が高い
vmstatの見方はnaoyaさんのブログより
http://d.hatena.ne.jp/naoya/20070523/1179938637
swap in ///ハードディスク上に退避した内容を、メモリに書き戻す
swap out ///当面の間必要の無い内容をハードディスクに書き出し、占有された物理メモリを解放する動作
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
1 42 1343448 5160 996 12812 8140 7284 8736 7406 3436 5620 2 28 0 70 0
0 36 1252812 4880 1056 10668 24772 218 25542 220 5021 9050 6 39 0 55 0

A色々やってみた
A-1 http://gigazine.net/index.php?/news/comments/20060601_loadavarage/
httpのパラメータを変更
vi /etc/httpd/conf/httpd.conf

KeepAliveTimeout = 120

KeepAliveTimeout = 20

A-2 **Zend Optimizer または ionCube PHP Acceleratorの導入
http://gigazine.net/index.php?/news/comments/20061103_php_accelerator/

A-3
mysqlのパラメータの確認
mysql> SHOW VARIABLES;
mysql>SHOW STATUS ;

クライアントからの接続数の上限

max_connections 100

mysql> SET GLOBAL max_connections=50;

max_connections 50
Max_used_connections 31
Threads_connected 23
Threads_created 3779
Threads_running 2

現在接続しているMYSQLクライアントは23。
そのうち処理を実行中のものは2。
これまで接続された総数は3779で。
そのうち同時に接続された最大数は31。

show status | grep Key_blocks;
http://linux.mini13i.gotdns.org/?MySQL%2F%BA%C7%C5%AC%B2%BD%2F%A5%B5%A1%BC%A5%D0%A5%D1%A5%E9%A5%E1%A5%BF
(項目)key_buffer_size
(意味)MyISAM テーブルのインデックスを保存しておくバッファ。
(目測)専用サーバなら、RAMの1/2、Apache などと共用なら、RAM の1/4程度
(効果)パフォーマンスが向上
(変更前)| key_buffer_size | 16384 |
(コマンド)MySQL> SET GLOBAL key_buffer_size=268435456;
(変更後)| key_buffer_size | 268435456 |
SET GLOBAL key_buffer_size=16384;

(項目)table_cache
(意味)データのキャッシュサイズ
(効果)ディスクのI/O減
(変更前)| table_cache | 4 |
http://www.mysqlperformanceblog.com/2009/11/16/table_cache-negative-scalability/
(コマンド)mysql>SET GLOBAL table_cache=1024;
(変更後)table_cache | 1024 |
SET GLOBAL table_cache=256;
http://redhatman.blog23.fc2.com/blog-entry-69.html