MySQL セットアップ関連
MySQLのインストールに関するメモ書き。
(2) 匿名ユーザを削除する。
[起動]
上記はmysqlというUnixユーザでデーモンを起動する(なんでもよいが、rootだとセキュリティ上まずいので、mysql用にアカウントを用意するのがよい)。起動できない場合は、エラーログを調査する。
エラーログの格納場所はmy.cnfや起動時のオプション(--log)で指定できる。指定していない場合は、 mysql-data-dir/<ホスト名>.err に格納されている。自分でconfigure,makeしてインストールして特に設定していない場合は、mysql_data-dirは/usr/local/varなどになっている。
起動できないありがちなパターンとしてはpidファイルを作成するディレクトリに書き込み権限がなく、エラー終了しているケース。
pidファイルの作成場所も、my.cnfやオプション(--pid_file)で指定可能。
[停止]
インストール直後はrootと匿名ユーザ(user欄が空のやつ)が定義されているのが見える。
現在のセッションで認証されたユーザは以下で取得できる。
◎匿名ユーザ
'%'で全ホストを指定しているのにlocalhostのエントリも追加しているのに注意。これを追加しないでuserテーブルが以下のような状態になっていた場合、ローカルから接続した場合、ホスト名がlocalhostのエントリにヒットしてしまう。((localhost, )か(localhost,root))ユーザ名が'manager'だと'root'にはマッチしないので(localhost, )にマッチして匿名ユーザでの接続になってしまう。
アカウントを削除する場合は権限を削除後、DROP USERで削除する。
manager@localhostを削除する例:
インストール直後、rootユーザにはパスワードがないので設定しておくこと。
インストール前に以下を確認しておくこと。
(1) インストール時のmake testでMySQLへの接続を試みるので、MySQLサーバーを立ち上げておくことと(MySQLの)rootのパスワードを外しておく必要がある。
(2) DBD::mysqlモジュールをインストールする際、MySQLの共有ライブラリを使用するので事前にMySQLの共有ライブラリへのパスを設定しておくこと。
[共有ライブラリパスの設定の仕方]
インストール
1.インストール後の注意
(1) rootにパスワードを設定する。
インストール直後は、パスワードが設定されていないので設定する。設定方法は後述。
(2) 匿名ユーザを削除する。
匿名ユーザはtest*データベースに対してしか、操作をできないが一応削除しておいた方がよい。
mysql> DELETE FROM mysql.user WHERE user='';
2.デーモン起動と停止
[起動]
# mysqld_safe --user=mysql &
上記はmysqlというUnixユーザでデーモンを起動する(なんでもよいが、rootだとセキュリティ上まずいので、mysql用にアカウントを用意するのがよい)。起動できない場合は、エラーログを調査する。
エラーログの格納場所はmy.cnfや起動時のオプション(--log)で指定できる。指定していない場合は、 mysql-data-dir/<ホスト名>.err に格納されている。自分でconfigure,makeしてインストールして特に設定していない場合は、mysql_data-dirは/usr/local/varなどになっている。
起動できないありがちなパターンとしてはpidファイルを作成するディレクトリに書き込み権限がなく、エラー終了しているケース。
pidファイルの作成場所も、my.cnfやオプション(--pid_file)で指定可能。
[停止]
# mysqladmin shutdown
3. サーバーへの接続
サーバーへの接続はmysqlコマンドを使用する。-uで接続時のユーザアカウントを指定する。省略した場合は匿名ユーザでの接続となる。# mysql -u root mysql>パスワードが設定されている場合は、-pオプションをつけて実行してパスワードを入力すればよい。-pがないとパスワードは聞かれず問答無用でエラーとなる。
# mysql -u root -p Enter password: mysql>以下のように、-pの後にスペース開けずにパスワードを指定することもできるが、セキュリティ上あまり望ましくないので止めておいたほうが無難。(psコマンドでみたところパスワード部分はxxでマスクされ見えなくなっていた。ただし、シェルのヒストリには残るので危険。)
# mysql -u root -ppassword mysql>
4.ユーザ情報
MySQLに設定されているユーザ情報はmysqlデータベースのuserテーブルに格納されている。以下のようにして参照可能。# mysql -u root -p mysql mysql> select * from user;
インストール直後はrootと匿名ユーザ(user欄が空のやつ)が定義されているのが見える。
mysql> select host,user from user; +-----------------------+-----------+ | host | user | +-----------------------+-----------+ | localhost | | | localhost | root | | localhost.localdomain | | | localhost.localdomain | root | +-----------------------+-----------+
現在のセッションで認証されたユーザは以下で取得できる。
mysql> SELECT CURRENT_USER();
◎匿名ユーザ
匿名ユーザは基本的に全権限が抑止されているが、testおよびtest_*データベースに関しては全ての操作を行なえるようになっている。
5.ユーザの追加
全ての権限を持つ'manager'ユーザ(パスワードはsome_pass)を作成する。mysql> GRANT ALL PRIVILEGES ON *.* TO manager@localhost IDENTIFIED BY 'some_pass' WITH GRANT OPTION; mysql> GRANT ALL PRIVILEGES ON *.* TO manager@'%' IDENTIFIED BY 'some_pass' WITH GRANT OPTION;%はワイルドカードで、Unixでいう'*'的なもの。上記の設定だと全てのホストを指す。'%.xxxx.com'のような指定もできる。
'%'で全ホストを指定しているのにlocalhostのエントリも追加しているのに注意。これを追加しないでuserテーブルが以下のような状態になっていた場合、ローカルから接続した場合、ホスト名がlocalhostのエントリにヒットしてしまう。((localhost, )か(localhost,root))ユーザ名が'manager'だと'root'にはマッチしないので(localhost, )にマッチして匿名ユーザでの接続になってしまう。
+-----------------------+-----------+ | host | user | +-----------------------+-----------+ | % | manager | | localhost | | | localhost | root | | localhost.localdomain | | | localhost.localdomain | root | +-----------------------+-----------+接続時のアカウントのマッチングルールの詳細についてはここを参照。
アカウントを削除する場合は権限を削除後、DROP USERで削除する。
manager@localhostを削除する例:
mysql> REVOKE ALL,GRANT OPTION FROM manager@localhost; mysql> DROP USER manager@localhost;
6.パスワード設定
6.1 SQLで設定する場合
# mysql -u root mysql mysql> SET PASSWORD FOR <UserName>=PASSWORD('<Password>');
rootのパスワードを設定する場合は以下のようにする。デフォルトでは接続元のホスト毎にroot@localhost,root@localhost.localdomainのエントリがあるのでそれぞれに対してパスワードを設定する。
mysql> SET PASSWORD FOR root@localhost=PASSWORD('pass'); Query OK, 0 rows affected (0.00 sec) mysql> SET PASSWORD FOR root@localhost.localdomain=PASSWORD('pass'); Query OK, 0 rows affected (0.00 sec) mysql> select host,user,password from user; +-----------------------+------+------------------+ | host | user | password | +-----------------------+------+------------------+ | localhost | root | 29bad1457ee5e49e | | localhost.localdomain | root | 29bad1457ee5e49e | | localhost.localdomain | | | | localhost | | | +-----------------------+------+------------------+ 4 rows in set (0.00 sec)
インストール直後、rootユーザにはパスワードがないので設定しておくこと。
6.2 シェルから設定する場合
# mysqladmin -u <UserName> password <Password>
Perlから使用する場合
PerlスクリプトからMySQLを使用したい場合は、ライブラリをインストールする。インストール前に以下を確認しておくこと。
(1) インストール時のmake testでMySQLへの接続を試みるので、MySQLサーバーを立ち上げておくことと(MySQLの)rootのパスワードを外しておく必要がある。
(2) DBD::mysqlモジュールをインストールする際、MySQLの共有ライブラリを使用するので事前にMySQLの共有ライブラリへのパスを設定しておくこと。
[共有ライブラリパスの設定の仕方]
(i) /etc/ld.so.confにMySQLライブラリのパスを追加。
include ld.so.conf.d/*.conf
/usr/X11R6/lib
/usr/local/lib
/usr/local/lib/mysql <== 環境に合わせてパスを追加
(ii) キャッシュを作成。
# /sbin/ldconfig
インストール
# perl -MCPAN -e shell cpan> install DBI cpan> install DBD::mysql