2013年7月3日水曜日

あなたのMySQLサーバを理解する

Original post: http://anothermysqldba.blogspot.com/2013/07/understand-your-mysql-server.html

私はそれは誰もが自分のMySQLサーバのさまざまな側面を理解するのに役立ついくつかのガイドラインを書き出しておくと便利かもしれない考え出した。

このデータは、時間をかけて収集されたと私はリファレンスポストに最善を尽くします。 全体の情報のあなたの最高のソースがここにリストされるように考慮してください。
したがって、この例のために、私たちはあなただけのMySQLサーバーの責任を取ったと仮定しましょう​​。 情報を知る有効なニーズを収集するための最良の方法は何ですか...

あなたは、データベースへのパスワードを知っていますか? それはmysql_config_editor(そう前5.6)を使用していない場合は、調べるために少し掘りを行うことができます。 そうしないとあなたはそれを再起動し、我々はあなたがそれを再起動したくないと仮定するインチあなたの方法を強制する必要があります。 :スキップ助成表は例をいくつかの以前のブログの記事を見直す-あなたが使用する方法を見つけ出す必要がある場合http://anothermysqldba.blogspot.com/search/label/--skip-grant-tables

だから、最初のいくつかのパスワードを探すために配置されます。 また、これはあなたが行う場合は、これらの人の一人は、後でパスワードを見つけることができることを意味します。
  • 誰かがコマンドラインでパスワードを使用したかどうかを調べる。
    • 歴史|はgrep mysqlの
  • crontabの-L
    • あなたが表示されている場合は、バックアップスクリプトやなどがパスワードの入力をそれらのスクリプトに見える
  • 見つけます。my.cnfを
  • 。猫bash_history | grepのmysqlの
  • パスワードなしでMySQLを試すが、もちろん希望はあなたの箱が安全です。
  • MySQLの5.6チェックですでに設定されたアカウントを持っている場合
    • mysql_config_editorプリント - すべて
[OK]をので、アカウント情報を持っていては、ボックス上にあります。
MySQLサーバに飛び込む前に、まずあなたのサーバーについて少し知っている。
この情報の一部は、あなただけ知っているかもしれませんが、安全のために。
OS、ディストリビューション、メモリ、ディスク情報を取得するには例えば、Linuxシステム上で次のコマンドを実行します。
  • 猫の/ etc / *-リリース
  • uname-aの
  • DF-ああ
  • マウント
  • 無料の-M
  • トップ
  • swappinessの情報のためにこの記事に目を通すhttp://www.mysqlplus.net/tag/swappiness/
  • あなたは、特定のCNFファイルが使用されていますか?
    • します。ps-ef | grep mysqlの| grepのCNF
    • DATADIR:
      • します。ps-ef | grep mysqlの| grepのDATADIR

だから今のMySQLサーバにジャンプしていくつかのデータを収集するために開始します。 my.cnfファイルのレビューはあなたにこの情報のほとんどを与えることができているときは、サーバーからそれを収集することができます。

show variables like '%log%';


任意の問題を検討するため、エラー(ERR)がファイルに目を通す。 これは、起動および等でエラーが発生した後に見える最初の場所であるべき

それでは、どのサーバが実行されている? すぐに次の情報を収集するには、statusコマンドを実行します。
  • バージョン
  • スレッド
  • 質問
  • スロークエリ
  • 開き
  • FLUSH TABLES
  • オープンテーブル
  • 秒あたりの平均クエリ

mysql> status


"mysqladminは拡張ステータス"コマンドはまた、あなたと、サーバ内部のグレップを使用するための情報を与えることができることも有効です。

以下の情報に目が離せない。
これのいくつかはまた、ここに掲載されてhttp://www.techrepublic.com/blog/opensource/10-mysql-variables-that-you-should-monitor/56

あなたは、これらの値のいくつかを説明素敵なテーブルを見て言及し、ポストを確認することができます。 これらは、私はあなたががに目を維持すべきだと思うものです。

> show status like 'Handler_read_first';
> show status like 'Key_reads';
> show status like 'Select_full_join';


クエリの全体的な割合が遅い実行しているを見つける。 うまくいけば、これは少数です。
簡単なチェックのために、これらの変数を設定するためにステータス情報を使用します。

set @slow_queries=<value in the status output>;
set @questions=<value in the status output>;
SELECT ROUND(100* (@slow_queries / @questions),2) "Slow Query percentage" \G


からの出力を理解するために学んでます。SHOW ENGINE INNODBのSTATUS \ G
あなたがそれらをデバッグするために始めることができるので、デッドロック情報に目が離せない。

お使いのシステムは、トリガー、イベント、ストアドプロシージャを持っていますか?

mysql> SELECT db, name FROM mysql.proc;
mysql> SELECT TRIGGER_SCHEMA , TRIGGER_NAME FROM information_schema.TRIGGERS ;
mysql> SELECT EVENT_NAME FROM information_schema.EVENTS ;


あなたのサーバー変数を知る

show variables like '%innodb%';
show variables like '%thread%';
show variables like '%table%';
show variables like '%buffer%';
show variables like '%cache%';


ユーザーアカウントを確認してください。
彼らはすべての有効なパスワードを持っていますか。

SELECT Host, User ,
CASE
WHEN CHARACTER_LENGTH(Password) = 16 THEN 'Pre-4.1 I should update this'
WHEN CHARACTER_LENGTH(Password) > 16 THEN 'Valid password'
WHEN CHARACTER_LENGTH(Password) =0 THEN ' BLANK PASSWORD so I just do not care if people steal my stuff'
END as Password
FROM mysql.user;


あなたのInnoDBログファイルを理解し、良好なバッファー·プール·サイズを把握。
男爵は、ここでこれについて投稿: http://www.mysqlperformanceblog.com/2008/11/21/how-to-calculate-a-good-innodb-log-file-size/
これについての詳細を理解するために彼のポストをお読みください。 以下同様にこの情報を使用する方法の例である。 私は助けるための例のための彼の番号を使用していました。 男爵が言ったように、トラフィックが有効な情報を得ることが重い場合、これを実行します。

mysql>pager grep sequence; show engine innodb status\G select sleep(60); show engine innodb status\G pager;
mysql>SET @sequence1= 3836410803;
mysql>SET @sequence2= 3838334638;
mysql>select ( ( (@sequence2 - @sequence1) / 1024 / 1024 )* 60 ) /2 as innodb_log_file_size_used ;
mysql>select (@@innodb_log_file_size / 1024) / 1024 as current_log_file_MB_size;


バッファー·プール·サイズ。
次のクエリは、ネットを中心掲示され、バッファ·プールの有効な出発点を与えませんが、私もそれが持っていたサーバーに基づいていくつかの無効または非現実的な数字を見てきました。 個人的には、以下のクエリの結果を確認します。 ピーク時のトラフィックあなたは男爵のポストにつきログに送信している量データの結果を確認します。 次に、サーバ上に持っているどのくらいのメモリを考慮に入れる。 より多くのデータベースが速く、それは結果を得ることであるメモリで実行されていますが、他に何がやってデータベースで考慮する必要があります。 だからあなたは、バッファー·プール·サイズの適切な値を得るためにあなた自身の判断と研究を使用する必要があります。 別のオプションは、使用する可能性がtools.percona.comを 、質問に答え、それはあなたを伝えますかを参照してください。


mysql>select ( ( (@sequence2 - @sequence1) / 1024 / 1024 )* 60 ) *2 as innodb_buffer_pool_GB_test ;

mysql>SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,
(SELECT 3 PowerOf1024) B \G



次に、あなたのインデックスとなどより掘り下げるために、このオープンな箱舟のブ​​ログ記事を確認してください。 そのポストとサイト全体に大きな情報。
http://code.openark.org/blog/mysql/useful-database-analysis-queries-with-information_schema


サーバーの詳細データに掘る....


最古のテーブルは何です、多分それらをアーカイブする必要がありますか?

SELECT CONCAT(`TABLE_SCHEMA`, "." , `TABLE_NAME`) as name , `UPDATE_TIME`
FROM information_schema.TABLES
WHERE TABLE_SCHEMA NOT IN ('information_schema','mysql','test','performance_schema') AND `UPDATE_TIME` IS NOT NULL ORDER BY `UPDATE_TIME` LIMIT 25;



何がほとんどのスペースを取っている?

SELECT concat(table_schema,'.',table_name) table_name,
concat(round(data_length/(1024*1024),2),'M') data_length
FROM information_schema.TABLES
ORDER BY data_length DESC LIMIT 5;


これは、ちょうどあなたがあなたのサーバーに何が起こっているか理解するための出発点です。 詳細を学ぶためにこのサイトに記載されているサイトを使用してください。