Top > Install Log > CentOS6 > MySQL
AND OR

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

これでようやく問題が解消。

参考


Reload   Diff   Front page List of pages Search Recent changes Backup Referer   Help   RSS of recent changes
Last-modified: Tue, 01 Apr 2014 03:21:14 HADT (3711d)