カテゴリの投稿: » MySQL

MySQL5.7.4から導入されたパスワード有効期限

Written in 2017年07月01日 by | コメントする( 0件 )

MySQL5.7.4からパスワードにデフォルトで有効期限が付くようになった。
知らずに使っていると突然、MySQLにコネクトできなくなり、

#1862 – Your password has expired. To log in you must change it using a client that supports expired passwords.

のエラーとなる。

my.cfgに

default_password_lifetime=0

と指定すれば従来どおりパスワードの有効期限をなしにできる。

この数値は有効期限の日数であり、0~65535日の間で指定できる。

0は制限なし。

phpMyAdmin4.0.xでカラムの多いテーブルのテーブル構造を開いた際に操作メニューサイズをリサイズするJavascriptのために、表示に時間がかかり操作ができない件の解消

Written in 2013年10月16日 by | コメントする( 0件 )

phpMyAdmin4.0.x (他のバージョンもそうかもしれないが)で、テーブル構造ページを開くと、各カラム情報行の右側にある各種操作メニューを、ブラウザの画面サイズに合わせてリサイズするJavascriptが動くが、これが結構遅くて、カラム数の多いテーブルの場合、画面を開いてから、操作できるようになるまでにかなりの時間がかかり、作業に支障をきたす。これを改善したい。

方法

js/tbl_structure.js

を開き、以下のコードを全箇所でコメントアウトする。(私の使っているバージョンでは3か所あった。)

$('#fieldsForm ul.table-structure-actions').menuResizer(PMA_tbl_structure_menu_resizer_callback);

PMA_tbl_structure_menu_resizer_callback で検索すると全部見つかるでしょう。

これで画面を開いた際にメニューのリサイズ処理が走らなくなる。ただし、画面が狭いとメニューが折り返されて、幾分見づらい。。。

MySQLで「Host ‘hogehoge.com’ is blocked because of many connection errors」が発生

Written in 2012年04月21日 by | コメントする( 0件 )

たとえばPHPなどでは以下のようなエラーメッセージが出力される。

Warning: mysql_connect() [function.mysql-connect]: Host 'hogehoge.com' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' in /home/hoge/public_html/somedir/somescript.php on line 50

■原因

MySQLがそのホスト(hogehoge.com)から多くの接続エラーを受けた場合に発生します。接続エラーの大量発生後、MySQLサーバは何か問題(クラッカーからの攻撃など)が発生したと判断し、このホストからの接続を拒否するようにします。

デフォルトでは、接続エラーが 10 回発生すると、mysqld はそのホストを拒否します。この数はMySQLのmax_connect_errors変数によって変更できます。

参照URL: http://dev.mysql.com/doc//refman/4.1/ja/blocked-host.html

 

■対処

①シェルで以下のコマンドを実行する

# mysqladmin flush-hosts

②以下のSQLを実行する

FLUSH HOSTS;

 

■事象発生の確認

上記エラーメッセージが出力されることが事象発生を知らせるものであるが、MySQLサーバ側でその状態を確認することはできないのか。ある程度はできる。

接続エラーが発生するとそれはホストキャッシュ(host cache)に記憶される。このホストキャッシュとは、MySQLがDNSからIP、ホスト名を正引き、逆引きした結果をキャッシュしておくもので、同時に、この接続エラーの状況を記憶しておくものでもあります。それでこのキャッシュを上記のコマンドでフラッシュしてやれば解決するのである。ホストが拒否された場合、これが唯一の解消方法です。

さて、このホストキャッシュを閲覧できるなら状況を把握できるのだが、閲覧するためのコマンドは存在しません。確認できるSQLコマンドを追加するパッチを開発した方もおられるようだが。

しかし、いくつか得られる情報はある。

①error log と general query log

–log-warningsオプションをつけてサーバを起動すると、error logに以下のようなエラーメッセージが記録される。

010301 14:38:23  Aborted connection 854 to db:
'users' user: 'josh'

また、general query logが有効にされていると、問題の原因の種類が書き込まれる。

②ステータス変数「Aborted_clients」「Aborted_connects」

以下のSQLを実行するとこのステータス変数を取得できる。

SHOW GLOBAL STATUS WHERE `Variable_name` IN ( 'Aborted_clients', 'Aborted_connects' );

ホスト拒否の根拠とされるのは、どちらのステータス変数なのか、あるいは両方なのかはわからないが、それぞれの変数の意味は以下の通りです。

Aborted_clients

クライアントが接続できたものの後で不適切に切断されたり終了されたりした場合、MySQLはこのステータス変数を増加させます。また、error logにAborted connectionメッセージが書き込まれます。このステータスになる原因は以下の通りです。

  • クライアントプログラムがmysql_close()をコールせずに終了した
  • クライアントが何のリクエストもしないままwait_timeoutまたはinteractive_timeoutの秒数を経過してスリープしている場合
  • クライアントプログラムがデータ転送中に突然に終了した場合

Aborted_connects

クライアントがコネクトすらできなかった場合にサーバはこのステータス変数を増加させます。コネクション試行の失敗は以下の理由で発生します。

  • クライアントがデータベースへの接続権限を持っていない
  • クライアントが正しくないパスワードを使用している
  • コネクションのパケットに正しい情報が含まれていない
  • コネクションのパケットの取得にconnect_timeout秒以上を要した

これらの種類の問題が起きている場合、誰かがサーバに侵入しようとしていることを意味しているかもしれません。これらのタイプの問題に関するメッセージは(有効にさていれば)genral query logに記録されます。

そのほかにもAborted_clientsやAborted_connectionsになる理由はあるが詳細は以下のURLを参照してください。

参照URL: http://dev.mysql.com/doc/refman/5.0/en/communication-errors.html

Apache2.2+PHP5.3+MySQL5.5環境でApacheが立ち上がらない

Written in 2011年03月23日 by | コメントする( 0件 )

最近、Apache2.2+PHP5.3+MySQL5.5の構築をしました。何度もしていたので甘く見てたら、Apache起動でOKと表示されるものの実際には立ち上がっておらず、ログにもエラーが出ていなかったので、とても困りました。

おそらくopensslの複数バージョンの混在が原因ではないかと思います。RPM版のopenssl0.9.8eが入っており、別途ソースインストールで、/usr/local/openssl にopenssl1.0.0cを入れていました。

MySQL5.5では、コンパイル時にCmakeを使うようになり、設定方法が以前と変わっており、opensslのインストールPREFIXを指定できずに(方法があるのかもしれませんが、、、)、デフォルトのディレクトリ/usr からライブラリを組み込むようで、RPM版のopenssl0.9.8eが組み込まれました。

一方、PHPではopensslのインストールディレクトリを指定できるので、/usr/local/openssl のopenssl1.0.0cを組み込もうとしたところ、MySQL5.5からクライアントライブラリを組み込む指定もしていたので、MySQL5.5のopenssl0.9.8eとPHP5.3のopenssl1.0.0cがコンフリクトして「セグメンテーション違反」となって、コンパイルできなかった。

なので、opensslは複数バージョンのDSOモジュールがあると競合するようだ。仕方なく、PHPには、/usrのパスを指定してopenssl0.9.8eを組み込んだ。

さて、Apache2.2には、opensslのパス指定ができるので、/usr/local/openssl のopenssl1.0.0cを組み込んでいました。このアパッチにlibphp5.soを読み込ませるわけだが、そうするとApache2.2のopenssl1.0.0cと、PHP5.3およびMySQL5.5に組み込まれたopenssl0.9.8eがコンフリクトするのではなかろうか。PHPコンパイル時のPHP x MySQLのコンフリクトのようにエラーが出ればいいが、Apache起動時にエラーも吐かずに立ち上がらないという状況はいかにも困った。

これらのopensslコンフリクトの仮説をもとに、Apache2.2もopenssl0.9.8eを組み込んでコンパイルし直し、PHP5.3も同様にコンパイルしなおしたところ、動きました。。。。