MySQLのmy.cnfの設定について

MySQLの設定ファイルは、「/etc/my.cnf」です。

1. my.cnfのひな型のコピー

初期値の「/etc/my.cnf」が用意されていますが、このファイルは使用しません。
ですから、リネームしておきます。
# mv /etc/my.cnf /etc/my.cnf.default

さて、my.cnfのひな型が「/usr/share/mysql」にあります。
以下のように5種類あり、システムの規模によって選択します。
  • my-small.cnf
  • my-medium.cnf
  • my-large.cnf
  • my-huge.cnf
  • my-innodb-heavy-4G.cnf

WEBで通常使用するには、「my-medium.cnf」でOKでしょう。
このファイルを「/etc/my.cnf」としてコピーします。
# cd /usr/share/mysql
# cp my-medium.cnf /etc/my.cnf

2. my.cnfの編集

「/etc/my.cnf」を編集します。
# vi /etc/my.cnf

■ InnoDBの使用
初期値はInnoDBが使用不可となっていますので、使用する場合には行頭の「#」を削除します。

【書き換え前】
# The MySQL server
[mysqld]
・・・(途中省略)・・・
# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /var/lib/mysql/
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /var/lib/mysql/
#innodb_log_arch_dir = /var/lib/mysql/
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#innodb_buffer_pool_size = 16M
#innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 5M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50

【書き換え後】
# The MySQL server
[mysqld]
・・・(途中省略)・・・
# Uncomment the following if you are using InnoDB tables
innodb_data_home_dir = /var/lib/mysql/
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /var/lib/mysql/
innodb_log_arch_dir = /var/lib/mysql/
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 16M
innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

※※※※「innodb_log_file_size」をコメント解除する場合の注意点※※※※

「/var/lib/mysql」ディレクトリに
・ib_logfile0
・ib_logfile1
が既に存在する場合に、これらのファイルサイズが「innodb_log_file_size」で指定したファイルサイズの範囲外の値となっていることがあります。
その場合には、mysqldのログファイルに「InnoDB: Error: log file /var/lib/mysql/ib_logfile0 is of different size 0 5242880 bytes」というように記録され、InnoDBエンジンにエラーが発生して、InnoDBが無効になってしまうケースがあります。
この場合には、既存の「ib_logfile0」「ib_logfile1」を削除して、MySQLを再起動して下さい。
新しいログファイルが作成されます。

■ PHPの日本語文字化け対策
MySQL4.1以降、PHPからアクセスすると文字化けすることが多くなってきたので、文字化け対策を行います。
これは、[mysqld]の項目に、1行「skip-character-set-client-handshake」を追加すればOKです。
# The MySQL server
[mysqld]
・・・(途中省略)・・・
skip-character-set-client-handshake

■ バイナリログの自動削除
バイナリログは、実行したSQL文が記録されており、障害発生時の調査や障害復旧時に必要なものです。
ただし、このバイナリログは容量が大きく、サーバのHDDの容量を圧迫する原因ともなり、また自動で削除されません。
そこで、自動削除するためのオプションを追加します。

【書き換え前】
# The MySQL server
[mysqld]
・・・(途中省略)・・・
# Replication Master Server (default)
# binary logging is required for replication
log-bin=mysql-bin

【書き換え後】
# The MySQL server
[mysqld]
・・・(途中省略)・・・
# Replication Master Server (default)
# binary logging is required for replication
log-bin=mysql-bin
expire_logs_days = 30

「expire_logs_days」では、バイナリログを自動削除する日数を指定します。
デフォルトは「0」で自動削除しません。
なお、ログを削除するタイミングは、MySQLサーバの起動時、もしくはログローテート時となりますので、指定の日数を超えても直ぐに削除されるとは限りません。

3. MySQLの再起動

変更した設定を反映させるために、MySQLのサービスを再起動します。
# /etc/init.d/mysqld restart


最終更新:2013年10月29日 14:30