Yumを利用したMySQLのインストールと設定

前回はPostgreSQLでしたが今回はMySQLのインストールと設定メモです。とりあえずCentOS6の標準のYumリポジトリにあるMySQLを利用するのでバージョンは5.1です。

以下ルートユーザで実行
mysqlのインストール


$su -
#yum -y install mysql-server

my.cnfの設定
インストール直後、/etc配下に標準でmy.cnfが作成されテイルが/usr/share/mysql配下より用途に合ったmy-xxx.cnfを/etc配下にコピーするのもいいと思います。この方が楽なので自分の場合はよくその手を利用します。元のファイルはバックアップを取っておいてもいいかもしれません。

データベースの文字コードとストレージをそれぞれ設定


#cd /etc
#mv my.cnf my.cnf_backup ←バックアップを取る場合のみ実行
#cp /usr/share/mysql/my-xxx.cnf ./
#vi my.cnf

[mysqld]
...
character-set-server=utf8
default-storage-engine=InnoDB

InnoDBの設定項目のコメントを解除
innodb_data_home_dir = /var/lib/mysql
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /var/lib/mysql
innodb_buffer_pool_size = 16M
innodb_additional_mem_pool_size = 2M
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

MySQL5.1の標準のデータベースエンジンはMyISAMです。自分の場合は基本的にInnoDBを利用する為、標準のエンジンをInnoDBに設定します。
ちなみにMySQL5.5以降はInnoDBが標準のデータベースエンジンになっているようなので、5.5以上を利用する場合はdefault-storage-engine=InnoDBは不要かと思います。

サービスの起動


#service mysql start

OS起動時に自動起動するようにするには以下を実行


#chkconfig mysqld on

MySQLの初期設定を行うために以下のコマンドを実行


#mysql_secure_installation

...

Enter current password for root (enter for none): ←ENTER
OK, successfully used password, moving on...

...

Set root password? [Y/n] ←ENTER
New password: ←rootパスワード入力
Re-enter new password: ←rootパスワード再入力
Password updated successfully!
Reloading privilege tables..
... Success!

...

Remove anonymous users? [Y/n] ←匿名ユーザの削除(Y)
... Success!

...

Disallow root login remotely? [Y/n] ←rootによるリモートログインを許可しない(Y)
... Success!

...

Remove test database and access to it? [Y/n] ←テストデータベースの削除(Y)
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!

...

Reload privilege tables now? [Y/n] ←権限テーブルのリロード(Y)
... Success!

Cleaning up...

...

Thanks for using MySQL!

接続確認とユーザの作成


#mysql -u root -p
↓ローカル接続ユーザ
grant all privileges on [データベース名].[オブジェクト名(*を指定するとすべてのオブジェクトが対象)] to [ユーザ名]@localhost identified by 'パスワード';
↓リモート接続ユーザ(同一ネットワーク内からのアクセスのみ許可する場合)
grant all privileges on [データベース名].[オブジェクト名(*を指定するとすべてのオブジェクトが対象)] to [ユーザ名]@"xxx.yyy.zzz.%" identified by 'パスワード'; ←IPアドレスは各環境に合わせてください。
select user from mysql.user where user = 'ユーザ名';
flush privileges;
exit

リモート接続ユーザ作成時にたとえばhoge@"%"とするとあらゆるホストからの接続を受け付けるようになるためセキュリティ上LAN内のシステムでもお勧めできません。
"all privileges"はあらゆる権限を付与する為、セキュリティ上問題がある場合は適切に権限を設定して下さい。

新規作成したユーザでログインしデータベースを作成


$mysql -u ユーザ名 -p
create database データベース名;
show databases;

ファイアフォールの設定


#cd /etc/sysconfig
#vi iptables

以下の一文をCOMMITの前のいずれかの行に追加する
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

設定を変更したら以下のコマンドでiptablesを再起動


#service iptables restart

ネットワークの確認


$netstat -tln | grep 3306

特定のIPアドレスにバインドさせたい場合はmy.cnfファイルの[mysqld]項目のbind-addressにIPアドレスを設定してください。


■その他メモ
MySQLサーバの権限のあるユーザで実施

ユーザの権限削除


revoke 権限(all privilegesの場合はすべての権限) on データベース名.オブジェクト名 from ユーザ名@ホスト名(localhost or www.xxx.yyy.zzzなど);
データベース名、オブジェクト名に'*'を設定した場合すべてのデータベース、オブジェクトが対象となります。

ユーザの削除


delete from mysql.user where user = 'ユーザ名' and host = 'ホスト名';