MySQLに必要な初期設定
前回はtar.gzのバイナリを使ってMySQLのインストールを行いました。ファイルをダウンロードして展開するだけなので、短い時間で簡単にインストールできたのではないでしょうか。
インストールが完了したら、続いてMySQLの初期設定を行います。インストールはあくまでもファイルをサーバー上に展開しただけなので、環境に合わせて最適に動作するための設定が必要になります。一見難しく感じるかもしれませんが、作業は簡単なので初心者の方でも心配ありません。
第2回目となる今回は、MySQLの初期設定手順について解説します。
オプション設定ファイルの作成
MySQLには表や索引をキャッシュするために使用するメモリサイズやキャラクタ・セットといった様々なオプションがあり、環境に合わせてカスタマイズしながら使うことができます。オプションはMySQLの起動時やクライアントからの接続に使用するコマンドラインの引数として渡すことができますが、複数のオプションをその都度コマンドラインで指定するのは面倒ですし、抜け漏れが発生する恐れがあります。
そのため、MySQLにはmy.cnfというオプション設定ファイルが提供されています。このテキストファイルにオプションを記述しておき、MySQLの起動時に自動で読み込ませることで、コマンドラインからオプションを指定する手間を省くことができます。
①サンプルファイルの選択
tar.gzのバイナリを使用してインストールした直後はmy.cnfファイルが存在しないので、support-filesディレクトリにあるサンプルをコピー(リネーム)して使います。サンプルは複数用意されているため、サーバーのメモリ量を基準にどれを使用するか判断します。
my-small.cnf | 64MB以下のメモリを持つ環境向け |
my-medium.cnf | 128MB程度のメモリを持つ環境向け |
my-large.cnf | 512MB程度のメモリを持つ環境向け |
my-huge.cnf | 1~2GB程度のメモリを持つ環境向け |
my-innodb-heavy-4G.cnf | 4GB程度のメモリを持ち、InnoDBストレージエンジンのみを使用する環境向け |
今回用意したサーバーは16GBのメモリを搭載しているため、my-huge.cnfを使用します。
②サンプルファイルのコピー
使用するサンプルが決まったら、続いて配置場所を考えます。my.cnfを配置できる場所は複数あり、あらかじめ決められた順序に従って読み込まれます。
1 | /etc/my.cnf |
2 | /etc/mysql/my.cnf |
3 | SYSCONFIGDIR(コンパイル時に指定)/etc/my.cnf |
4 | $MYSQL_HOME(環境変数)/my.cnf |
5 | --defaults-extra-fileオプションで指定したファイル |
6 | ~/.my.cnf |
配置場所は自由に決めて構いませんが、複数の場所にmy.cnfを配置すると後から読み込まれたオプションの値が優先されます。また、複数のMySQLをインストールする場合は、/etc/my.cnfや/etc/mysql/my.cnfを使用すると全てのMySQLが同じ設定ファイルを参照することになるため注意してください。今回はmy-huge.cnfを/usr/local/mysql/my.cnfとしてコピー(リネーム)して使用します。
rootユーザで実行
# cd /usr/local/mysql
# cp support-files/my-huge.cnf my.cnf
③my.cnfの確認と編集
コピーが完了したら、my.cnfの中身を確認してみましょう。my.cnfは通常のテキストファイルなので、OSのコマンドで参照/更新することができます。
rootユーザで実行
# view my.cnf
my.cnfの記述方法は非常にシンプルで、[client]や[mysqld]といったグループのあとにオプション名と値を書くだけです。例えば、[mysqld]グループにはデフォルトで以下のようなオプションが設定されているので、この値を変更するか新しいオプションを追記すれば、MySQL起動時に設定が反映されます。
[mysqld] port = 3306 socket = /tmp/mysql.sock skip-external-locking key_buffer_size = 384M max_allowed_packet = 1M table_open_cache = 512 sort_buffer_size = 2M read_buffer_size = 2M read_rnd_buffer_size = 8M ...(以下省略)
サンプルとして書かれているオプションをそのまま使用しても構いませんが、最低限以下のオプションについては見直しを行ってください。
InnoDBストレージエンジン関連のオプション
サンプルのmy.cnfでは、MySQL 5.5のデフォルトストレージエンジンであるInnoDB関連のオプションがデフォルトでは全てコメント化(無効化)されています。従って、InnoDBを使用する場合は、以下のようにコメントを解除してください。
# Uncomment the following if you are using InnoDB tables innodb_data_home_dir = /usr/local/mysql/data innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend innodb_log_group_home_dir = /usr/local/mysql/data # You can set .._buffer_pool_size up to 50 - 80 % # of RAM but beware of setting memory usage too high innodb_buffer_pool_size = 384M innodb_additional_mem_pool_size = 20M # Set .._log_file_size to 25 % of buffer pool size innodb_log_file_size = 100M innodb_log_buffer_size = 8M innodb_flush_log_at_trx_commit = 1 innodb_lock_wait_timeout = 50
また、InnoDBストレージエンジンのデータをキャッシュするために使われるメモリサイズであるinnodb_buffer_pool_sizeが小さめの値に設定されているため、my.cnf内のコメントにある通り物理メモリの50%~80%程度まで大きな値に変更します。実際にはinnodb_buffer_pool_sizeに指定した値より若干多めのメモリが割り当てられるため、同じサーバー内で複数のMySQLが稼働する場合や、MySQL以外のデータベースやアプリケーションが稼働する場合は、あまり大きな値にしすぎないよう注意してください。InnoDBのREDOログサイズを指定するinnodb_log_file_sizeもinnodb_buffer_pool_sizeの25%程度に設定しておきます。
日本語のデータを扱う場合のオプション
MySQLのデフォルトキャラクタセットはlatin1になっているので、このままでは日本語のデータを扱うことができません。日本語を使用する場合は、[mysqld]と[client]に以下のオプションを追加します。
[client] default-character-set = utf8 [mysqld] character-set-server = utf8