| 
 TITLE:MySQLの導入
*MySQLの導入 [#x63f40b3]
**MySQLサーバのインストール [#pea586de]
ここまでの段階で、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の設定 [#q4e712bd]
設定ファイルを編集する。
 # 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サーバの起動 [#x01ac2df]
システムが起動するときに、MySQLも起動するようにする。
 # chkconfig mysqld on
 # service mysqld start
**MySQLサーバの初期設定 [#raefc9f8]
データベースを初期化するには、
「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
あとはテスト用のデータベースを削除しておく。
**データベースのアップデート [#z2a0e8f8]
MySQLをアップデートしたときに、データベースやテーブルを更新が必要な場合がある。
その場合は指定されたコマンドを使用する。使わないとえらいことになることも……
 # mysql_upgrade -u root -p
**追記:php-mysqlndに関係した設定 [#c8f91d39]
PHPを5.5にアップグレードしたときに、php-mysqlにかわって、php-mysqlndがインストールされた。MySQLのネイティブドライバである。
-http://us3.php.net/manual/ja/mysqlnd.plugin.mysql-proxy.php
-http://d.hatena.ne.jp/bco/20110101/1293887044
パフォーマンスがよくなると思って喜んでいたら、
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つ目のメッセージを、とりあえず、メッセージをそのままググると、こんな情報が…
-http://mohsenreza.blogspot.jp/2012/04/mysql55php54mysqlnd-authentication.html
-http://ezic-feed.w.ezic.info/3182.html
-http://www.ninton.co.jp/?p=1198
つまり、「my.cnf」に書いた「old_passwords=1」がダメだったということで(汗)
php-mysqlndでは、古いパスワードフォーマット(16バイト)ではデータベースに接続できないということ。
解決策としては、「old_passwords=1」を「old_passwords=0」と書き換え、新しいパスワードフォーマット(41バイト)にするために各ユーザのパスワードを変更し直すしかない。
これでmysqldを再起動しても、トラブルは解消しない。
2つ目のメッセージをググると、次のような情報が見つかる。
-http://koexuka.blogspot.jp/2009/04/mysql-host-is-blocked.html
-http://d.hatena.ne.jp/akishin999/20100925/1285430216
-http://dev.mysql.com/doc/refman/4.1/ja/blocked-host.html
というわけで、設定された回数(今回はデフォルトの10回)以上、接続に失敗したホストは遮断してしまうというのが原因だった。
解決するには、次のコマンドを実行する。
 # mysqladmin flush-hosts
これでようやく問題が解消。
***参考 [#s61822a7]
-http://centossrv.com/mysql.shtml
-http://www.server-world.info/query?os=CentOS_6&p=mysql&f=1
-http://wikiwiki.jp/poiuy/?LAMP%A5%B5%A1%BC%A5%D0%B9%BD%C3%DB
-http://server-setting.info/scientific-linux/mysql5-5-install.html
-http://oxynotes.com/?p=4973
 |