MySQLの導入MySQLサーバのインストールここまでの段階で、MySQLのライブラリ関係はインストールされている。 mysql-libs.x86_64 5.5.36-1.el6.remi @remi compat-mysql51.x86_64 5.1.54-1.el6.remi @remi PHPと同様にRemiリポジトリを利用して、MySQLサーバなどのソフトウェアをインストールする。 # yum install --enablerepo=remi,epel mysql mysql-server mysql-devel mod_auth_mysql mysql-connector-odbc 依存関係のためいくつかのパッケージがインストールされる。 MySQLの設定設定ファイルを編集する。 # vi /etc/my.cnf 次のような設定を追加する。今回は、MySQLのバージョンが5.5(以上?)になっているはずなので、以前とはいくつか設定が変更されている。 [mysqld] character-set-server = utf8 skip-character-set-client-handshake old-passwords = 1 [mysqld_safe] character-set-server = utf8 [mysql] default-character-set = utf8 MySQLサーバの起動システムが起動するときに、MySQLも起動するようにする。 # chkconfig mysqld on # service mysqld start MySQLサーバの初期設定データベースを初期化するには、 「mysql_install_db」コマンドを使用する # mysql_install_db 安全にデータベースを利用するために、 「mysql_secure_installation」というコマンドを使用する。 rootのパスワードなどを対話形式で設定できる。 # mysql_secure_installation 「mysql_secure_installation」というコマンドを使わない場合の手順もまとめておく。 まず、データベース管理者のパスワードを設定する。 # mysql -u root mysql> set password for root@localhost=password('パスワード'); mysql> set password for root@'127.0.0.1'=password('パスワード'); mysql> set password for root@'ホスト名'=password('パスワード'); 次に、匿名ユーザを削除する。 mysql> delete from mysql.user where user=''; 設定を確認する。 mysql> select user,host,password from mysql.user; ... mysql> flush privileges; ←設定を反映する。 mysql> exit あとはテスト用のデータベースを削除しておく。 データベースのアップデートMySQLをアップデートしたときに、データベースやテーブルを更新が必要な場合がある。 その場合は指定されたコマンドを使用する。使わないとえらいことになることも…… # mysql_upgrade -u root -p 追記:php-mysqlndに関係した設定PHPを5.5にアップグレードしたときに、php-mysqlにかわって、php-mysqlndがインストールされた。MySQLのネイティブドライバである。
パフォーマンスがよくなると思って喜んでいたら、 MySQLデータベースを利用していたMoodleからデータベースに接続できないとのエラーメッセージが…さらに、phpMyAdminもつながらない… 何が原因かと、ApacheやMySQLのログを見てみると、こんなメッセージが… … PHP Warning: mysqli::mysqli(): The server requested authentication method unknown to the client [mysql_old_password] … Host 'hogehoge' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' … まず1つ目のメッセージを、とりあえず、メッセージをそのままググると、こんな情報が…
つまり、「my.cnf」に書いた「old_passwords=1」がダメだったということで(汗) php-mysqlndでは、古いパスワードフォーマット(16バイト)ではデータベースに接続できないということ。 解決策としては、「old_passwords=1」を「old_passwords=0」と書き換え、新しいパスワードフォーマット(41バイト)にするために各ユーザのパスワードを変更し直すしかない。 これでmysqldを再起動しても、トラブルは解消しない。 2つ目のメッセージをググると、次のような情報が見つかる。
というわけで、設定された回数(今回はデフォルトの10回)以上、接続に失敗したホストは遮断してしまうというのが原因だった。 解決するには、次のコマンドを実行する。 # mysqladmin flush-hosts これでようやく問題が解消。 参考 |