テックノート

テックノート>はじめましてMySQL! Vol.2

  • DB(その他)
2012.08.15

はじめましてMySQL! Vol.2

はじめましてMySQL! Vol.2

本連載では、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について、インストールと初期設定方法を解説します。


連載記事

はじめましてMySQL! Vol.1
はじめましてMySQL! Vol.3


執筆者のご紹介

アシスト岸和田 隆

岸和田 隆
ビジネスインフラ技術本部

1995年入社。Oracle Database の研修講師、フィールドサポート、新バージョンの検証を経て、2007年 自社ブランド「DODAI」の準アプライアンス製品の企画・開発、2009年 PostgreSQL、2011年 EDB Postgres、MySQL /MariaDB、2012年 Oracle Database Appliance、2016年 Delphix の事業立上を経験。 現在は「データベースのアシスト」を目指した事業戦略やプロダクトマーケティングを担当している。
趣味:フットサル、ゴルフ、スキー、キャンプ、子供のサッカーチームのカメラマン担当。

アシスト関 俊洋

関 俊洋
ビジネスインフラ技術本部

2006年入社。データベース・システムの構築や運用トラブルの解決といった業務を経験し、その後新製品の検証やソリューションの立ち上げを経てエバンジェリストへ。2016年にクラウド事業を立ち上げ、現在はクラウドとデータベースの二足の草鞋を履いている。

本記事をご覧いただいている方へのご案内

最後までご覧いただきありがとうございました。
本記事でご紹介した製品・サービスに関するコンテンツをご用意しています。また、この記事の他にも、IT技術情報に関する執筆記事を多数公開しておりますのでぜひご覧ください。


関連している記事

  • DB(Oracle Database)
  • DB(その他)
2019.01.28

ゼロからのリレーショナルデータベース入門

データベースに対する敷居を少しでも低くするために、初心者の方に必要なデータベースの基本から、障害対策やチューニングといった実践に即した内容までを幅広く解説していきます。

  • DB(その他)
2018.07.23

さらばダミーデータ!超高速開発を実現するテストデータ活用

膨大なデータを活用することが求められる一方で、安全に扱うための制約も増加しています。データ活用の中でもテストデータに関する課題を例に、ビジネスに変革を与えるDelphixの新しいデータ活用をご紹介します。

  • DB(その他)
2018.07.02

AIブームを支える「機械学習」~AIの現実的な始め方とは?~

AIブームは着実に広まっています。しかし先進的な事例が先行し、裏側の仕組みや現実的な取り組みについての理解が追い付いていないように見受けられます。AIを支えるディープラーニングと機械学習技術の紹介を中心に、導入までに必要な具体的なステップを見ていきます。

ページの先頭へ戻る