mysqld_multiの設定方法


mysqld_multi 概要

mysqld_multiはmysqld ( MySQLサーバ ) プロセスを複数立ち上げる手法のひとつです。この方法を使用すれば、1つのOS上でbackupやreplicationの練習をする事ができます。このページではmysqld_multiの設定方法, 使い方について説明します。

複数プロセスのmysqld ( MySQLサーバ ) を立ち上げる方法は大きく分けて以下の3つがあります。

  • オプションを直接指定する方法
  • 複数のmy.cnfを作成する方法
  • mysqld_multiを使用する方法

実務で使用するのは、”mysqld_multiを使用する方法”のみであると思います。しかし、MySQLの仕様理解のために、まずは”オプションを直接指定する方法”と”複数のmy.cnf”を作成する方法について説明します。

MySQL オプション直接指定

MySQL オプション直接指定 – シングルプロセスの起動

MySQLの仕様理解のため、敢えて起動スクリプトを使用しない軌道方法について動作確認します。MySQLの実態は/usr/sbin/mysqldです。/usr/sbin/mysqldにデータディレクトリなどを引数として渡すとmysqlを実行する事ができます。

しかし、実際には/usr/sbin/mysqldを使用してMySQLサーバを起動する事はありません。実際は、/usr/bin/mysqld_safeというmysqldラッパーを使用してMySQLサーバを起動します。mysqld_safeは多重起動など危険な状態でのMySQL起動を避ける処理が組み込まれています。

以下のようにmysqld_safeにデータディレクトリを指定して起動します。

PSコマンドによりmysqld  ( MySQLサーバ ) が確かに起動している事を確認します。また、mysql (MySQL クライアント) によるログインが可能である事を確認します。

MySQL オプション直接指定 – シングルプロセスの停止

mysqlを停止される方法は以下2通りを挙げる事ができます。

  • mysqladminを用いた停止
  • SIGKILLシグナルの送信

mysqladminコマンドを以下のように使用すると、mysqld ( MySQLサーバ ) プロセスを停止される事ができます。

SIGKILLを用いてmysqld  ( MySQLサーバ ) プロセスを停止させる事もできます。まずは、mysqld  ( MySQLサーバ ) のプロセス番号を確認します。

以下のようにSIGKILLシグナルを送ります。MySQLのログを確認すると、SIGKILLを送られた場合は正常に終了処理が実行されている事が分かります。

MySQL オプション直接指定 – マルチプロセス起動時の考慮点

複数のmyqld ( MySQLサーバ ) プロセスを起動する場合は、データベースファイルなどのリソースに重複が発生してしまうと、データが壊れてしまいます。 mysqld ( MySQLサーバ ) 複数プロセス起動時に、重複しないよう気をつけなければならないパラメタは以下の通りです。

項目オプション説明
データディレクトリ--datadir分離しなくてもMySQLの起動は可能ですが、複数インスタンスから同時に書き込みを行うとデータ破損のリスクがあります。
一時ディレクトリ--tmpdir分離しなくても問題ありませんが、トラブルシューティング時にどのインスタンスが生成した一時ファイルなのかを追跡しやすくするために、分離しておいた方が無難です。
TCPポート--portTCP/IPの仕様上、重複は許されません。
Socketファイル--socketドメインソケットの仕様上、重複は許されません。
PIDファイル--pid-file重複は許されません。しかし、省略時はデータディレクトリに作成されるので、省略可能な設定です。

MySQL オプション直接指定 – マルチプロセス起動 停止

複数プロセスのmysqld ( MySQLサーバ ) を起動させる前準備として、複数プロセス用のデータディレクトリと一時ディレクトリを作成します。

以下のようなコマンドで複数のmysqld ( MySQLサーバ ) を起動させます。ポート番号やデータディレクトリが分離されるように、以下のようなオプションを指定して下さい。

netstat, psコマンドなどにより、mysqld ( MySQLサーバ ) の起動を確認します。

mysql (MySQL クライアント) で接続可能である事を確認します。理由は後述しますが、–protocol=TCPまたは–host=127.0.0.1が必要になる事に注意して下さい

mysqladminコマンドを用いて、複数プロセスのmysqld ( MySQL サーバ ) の停止が可能である事を確認します。

MySQL 複数my.cnf作成

“MySQL オプション直接指定”で例示したように、mysqld ( MySQL サーバ ) にオプションを引き渡して実行するのは非常に手間です。この手間を省くために、複数の設定ファイルを作成する方法があります。

以下のような起動オプションを指定した設定ファイル、 /etc/my1.cnf, /etc/my2.cnfを作成します。

以下のように設定ファイルを引数で渡してMySQL ( MySQL サーバ ) を起動させます。

mysqld_multi

mysqld_multi – 設定ファイルの作成

上記のように複数mysqld ( MySQL サーバ ) プロセスを立ち上げるのを手作業で行うのは非常に面倒です。そこで、mysqld_multiというperlスクリプトを使用すると/etc/my.cfgなどの設定を自動的に読み込み、複数プロセスのMySQLを簡単に起動する事ができます。

まず、以下のような/etc/my.cnfを作成します。[mysqldN]というセクションを作成し、その中に各プロセス固有の設定を書き込みます。

mysqld_multi – 起動

mysqld_multiに対応した/etc/my.cnfを作成しましたら、mysqld_multiコマンドを使用して複数のmysqldを起動させる事ができます。[mysqldN]のNという番号はGNR(option group number)と呼ばれ、引数に指定する事で特定プロセスのみを起動させる事ができます。一方、GNRを省略した場合は全てのプロセスが起動します。

mysqld_multiの実行例は以下の通りです。

mysqld_multi – 動作確認

どのmysqld ( MySQL サーバ ) プロセスが起動しているか確認するのは、mysqld_multiコマンドを利用するのが便利です。以下のように”mysqld_mutlti report”と入力すると、起動中のmysqld ( MySQL サーバ ) プロセスを確認する事ができます。

もちろん、psコマンドやnetstatコマンドによる動作確認も可能です。

mysqld_multi – 停止

mysqld_mutltiの停止はkillコマンドやmysqladminコマンドを使っても差し支えないですが、”mysqld_multi stop”と入力するのが便利な方法です。使い方はstartと同じで、GRNを省略した場合は全mysqld ( MySQL サーバ )プロセスが停止してしまう事に注意して下さい。

Tips

localhost と 127.0.0.1 の 違い

MySQLではlocalhostと127.0.0.1は、しばしば別物として扱われる事があります。mysql (MySQL クライアント ) で宛先ホストを省略した場合はlocalhostへ接続されます。localhost宛の接続は、–portでポート番号を指定していたとしてもデフォルト設定のドメインソケット/var/lib/mysql/mysql.sockへの接続を試みます。

従って、mysql multiなどで複数ポートを立ち上げている場合は、以下のようなポート番号のみの接続を試みると以下のようなエラーメッセージが出力されます。

MySQL公式ドキュメントによると、このようなエラーの場合は以下のように–protocol=TCPまたは–host=127.0.0.1を指定して回避する事が勧められています。

以下に公式ドキュメント 4.2.2. Connecting to the MySQL Serverの引用を転記します。個人的には、”This occurs even if a –port or -P option is given to specify a port number.”ではなく、もう少し空気を読んだ実装にしてくれるとありがたいと思うのですが。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする