TOP>企業情報>コラム>技術情報>はじめましてMySQL! Vol.2

はじめましてMySQL! Vol.2

はじめましてMySQL!

本連載では、MySQLのインストールと初期設定手順をステップ・バイ・ステップで分かりやすく解説します。初心者の方でも簡単にインストールが出来るよう、基礎的な内容を中心に構成しています。

(全3回連載)

Vol.2 誰でも簡単!MySQLのインストールと初期設定(初期設定編)

MySQLに必要な初期設定


前回はtar.gzのバイナリを使ってMySQLのインストールを行いました。ファイルをダウンロードして展開するだけなので、短い時間で簡単にインストールできたのではないでしょうか。

インストールが完了したら、続いてMySQLの初期設定を行います。インストールはあくまでもファイルをサーバー上に展開しただけなので、環境に合わせて最適に動作するための設定が必要になります。一見難しく感じるかもしれませんが、作業は簡単なので初心者の方でも心配ありません。

第2回目となる今回は、MySQLの初期設定手順について解説します。

オプション設定ファイルの作成


MySQLには表や索引をキャッシュするために使用するメモリサイズやキャラクタ・セットといった様々なオプションがあり、環境に合わせてカスタマイズしながら使うことができます。オプションはMySQLの起動時やクライアントからの接続に使用するコマンドラインの引数として渡すことができますが、複数のオプションをその都度コマンドラインで指定するのは面倒ですし、抜け漏れが発生する恐れがあります。

そのため、MySQLにはmy.cnfというオプション設定ファイルが提供されています。このテキストファイルにオプションを記述しておき、MySQLの起動時に自動で読み込ませることで、コマンドラインからオプションを指定する手間を省くことができます。

①サンプルファイルの選択

tar.gzのバイナリを使用してインストールした直後はmy.cnfファイルが存在しないので、support-filesディレクトリにあるサンプルをコピー(リネーム)して使います。サンプルは複数用意されているため、サーバーのメモリ量を基準にどれを使用するか判断します。

オプション設定ファイルのサンプル

オプション設定ファイルのサンプル

今回用意したサーバーは16GBのメモリを搭載しているため、my-huge.cnfを使用します。

②サンプルファイルのコピー

使用するサンプルが決まったら、続いて配置場所を考えます。my.cnfを配置できる場所は複数あり、あらかじめ決められた順序に従って読み込まれます。

my.cnfの配置場所と読み込み順序

my.cnfの配置場所と読み込み順序

配置場所は自由に決めて構いませんが、複数の場所にmy.cnfを配置すると後から読み込まれたオプションの値が優先されます。また、複数のMySQLをインストールする場合は、/etc/my.cnfや/etc/mysql/my.cnfを使用すると全てのMySQLが同じ設定ファイルを参照することになるため注意してください。今回はmy-huge.cnfを/usr/local/mysql/my.cnfとしてコピー(リネーム)して使用します。

SQL


③my.cnfの確認と編集

コピーが完了したら、my.cnfの中身を確認してみましょう。my.cnfは通常のテキストファイルなので、OSのコマンドで参照/更新することができます。

SQL


my.cnfの記述方法は非常にシンプルで、[client]や[mysqld]といったグループのあとにオプション名と値を書くだけです。例えば、[mysqld]グループにはデフォルトで以下のようなオプションが設定されているので、この値を変更するか新しいオプションを追記すれば、MySQL起動時に設定が反映されます。

SQL


サンプルとして書かれているオプションをそのまま使用しても構いませんが、最低限以下のオプションについては見直しを行ってください。

InnoDBストレージエンジン関連のオプション

サンプルのmy.cnfでは、MySQL 5.5のデフォルトストレージエンジンであるInnoDB関連のオプションがデフォルトでは全てコメント化(無効化)されています。従って、InnoDBを使用する場合は、以下のようにコメントを解除してください。

SQL


また、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]に以下のオプションを追加します。

SQL


MySQLの起動


LinuxにおけるMySQLの起動方法は複数ありますが、手動で起動させる場合はmysqld_safeスクリプトを使用するのが便利です。このスクリプトを使用するとMySQLをただ起動させるだけでなく、MySQLが異常終了した場合に自動で再起動を行ってくれます。

mysqld_safeスクリプトをそのまま実行してしまうと、MySQLが停止するまで端末のプロンプトが戻らなくなるため、『&』をつけてバックグラウンドで実行するようにしてください。

SQL


これでMySQLが起動しました。psコマンドで確認すると、mysqldというプロセスが起動していることが分かります。OracleやPostgreSQLのようなマルチプロセス型のRDBMSの場合、複数のプロセスが同時に起動していますが、MySQLはマルチスレッド型のプログラムなのでプロセスは1つだけです。

SQL


MySQLはコマンド1つで簡単に起動できますが、「サーバーの計画停止やメンテナンスのたびに手動で起動するのは面倒だ」という場合もあります。

MySQLにはmysql.serverというスクリプトがあらかじめ用意されており、以下の通り設定することでMySQLの自動起動/停止が可能になります。

SQL


MySQLが起動したら、mysqlコマンドを使ってMySQLに接続してみましょう。MySQLには管理者権限を持つrootユーザがあらかじめ作成されているので、-uオプションの引数にrootを指定して接続します。

SQL


statusコマンドで状態を確認すると、rootユーザとして接続されていることが分かります。

SQL


セキュリティの設定


先ほどの例では、MySQLへの接続時に指定したのはユーザ名だけ(mysql -u root)でしたが、MySQLではログインパスワードを設定できないのでしょうか?

実はインストール直後のrootユーザにはパスワードが設定されていません。そのため、パスワードの入力なしで簡単に接続できてしまいます。ユーザの情報が格納されているmysql.user表をSELECT文で確認すると、password列が全て空白になっているのが分かります。

SQL


※mysqltestは今回使用したサーバーのホスト名です

rootユーザは管理者権限を持っているため、パスワードなしで接続できる状態はセキュリティ上好ましくありません。テスト利用などの場合を除き、必ずパスワードを設定しましょう。事前に用意されているmysql_secure_installationスクリプトを実行すると、以下のセキュリティ設定を一括で行うことができます。

  ・rootユーザのパスワードを設定
  ・あらかじめ作成されている2つの匿名ユーザ(mysql.user表のuser列が空白のユーザ)を削除
  ・リモートからのrootアクセスを禁止し、localhostの接続のみを許可
  ・あらかじめ作成されているtestデータベースを削除

SQL


これでrootユーザにパスワードが設定されました。ユーザ名のみを指定したコマンドでは、もうMySQLに接続することができません。

SQL


パスワードを入力するには、-pオプションを指定します。パスワードの入力が求められますので、先ほどmysql_secure_installationスクリプトで設定した値を入力して接続します。

SQL


mysql.user表のpassword列をSELECT文で確認すると、暗号化された値が入っていることが分かります。また、user列が空白の匿名ユーザも削除されています。

SQL


以上でMySQLの基本的な初期設定は終了です。コマンドをフルパスで指定するのが手間だという場合は、ユーザの環境変数を以下のように設定しておくと便利です。

格納ファイル


次回はMySQLのブランチであるMariaDBについて、インストールと初期設定方法を解説します。


執筆者紹介

岸和田 隆

岸和田 隆(Takashi Kishiwada)

株式会社アシスト データベース技術本部

アシスト入社後、Oracle Database の研修講師、フィールド・ サポート、新バージョンの検証を経て、2007年 自社ブランド 「DODAI」の準アプライアンス製品の企画・開発、2009年 PostgreSQL、2011年 EDB Postgres、MySQL / MariaDB の事業立上を担当。 現在は「データベースのアシスト」を目指した活動を行っている。

岸和田の紹介記事はこちら



関 俊洋

関 俊洋(Toshihiro Seki)

株式会社アシスト データベース技術本部

2006年、株式会社アシスト入社。データベース・システムの構築や運用トラブルの解決といったフィールド・サポート業務を経験し、その後は新製品の検証やハードウェアとデータベースを組み合わせたソリューション(DODAI)の立ち上げに従事。現在はデータベースの価値や魅力を伝えるための執筆・講演活動を行っている。『SQL逆引き大全363の極意』共著。

関の紹介記事はこちら

連載記事一覧


Facebookで情報をお届けしています

Facebookでは、アシストの「今」を週3回のペースでお届けしています。「めげない、逃げない、あまり儲けない」を合言葉に日々頑張っておりますので、応援よろしくお願いします。



ページの先頭へ戻る