旧それなりブログの跡地、画像やスタイルやJSなどが壊れてることがあります。

UbuntuのMySQL-5.5でmysqld_multiの設定

2013年1月10日

Ubuntu-12.10 で以下のコマンドで入れた MySQL-5.5 に対して

sudo aptitude install mysql-server

mysqld_multi を使えるようにするための設定です

mysqld_multi というのは、
ひとつのサーバで複数のmysqlデーモンを起動するためのコマンドです
自分の場合は、レプリケーションのテストをするために使ってます

datadirを作る

起動したいMySQLインスタンスの数だけ作ります、以下は2つ起動する場合
ディレクトリの場所はテキトーなので、好きな場所に作って下さい
"mysqld{1,2}" は、ディレクトリ2つをコマンド一発で作っています、便利な書き方だ

sudo mkdir -p /var/lib/mysql/multi/mysqld{1,2}

データベースの初期化

sudo mysql_install_db --datadir=/var/lib/mysql/multi/mysqld1/
sudo mysql_install_db --datadir=/var/lib/mysql/multi/mysqld2/
sudo chown -R mysql:mysql /var/lib/mysql/multi/

/etc/mysql/my.cnf の修正

すっげー見にくいや.. ごめんなさい
「mysqld_multi 設定」とかでググって、そっちを見てからの方がいいかも

# 項目は、以下の追加だけで削除はありません

[mysqld_multi]
mysqld = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
# 以下の user/password は、mysqld_multiプロセスの停止をするためのユーザ設定
# 後で足すので好きな値を入れて置く
user = <任意のユーザ名>
password = <任意のパスワード>


# [mysqld+(1から始まる数字)]で、起動するインスタンスの数だけ定義
# [mysqld] の設定は、全インスタンスの共通設定になり、
#   変えたいものを各インスタンスで上書きするという仕組み

[mysqld1]
# - 各インスタンスで重複しないようにする
#   1や2は、避けた方が無難との意見を見たので101からにした
server-id = 101
# - 3307 は、他のサービスとかぶってるらしいので4307からにした
port = 4307
datadir = /var/lib/mysql/multi/mysqld1
# - ルールに則って /var/run/mysqld/ 以下にしたら
#   権限無しと言われてしまったので、とりあえず /tmp 以下にした、情報求む!
#socket = /var/run/mysqld/mysqld_multi1.sock
socket = /tmp/mysqld_multi1.sock
pid-file = /var/lib/mysql/multi/mysqld1/mysqld.pid
# - ログの場所は任意、log_bin や relay_log は、
#   レプリケーションをするなどの理由がなければ特に定義しなくても良い
#   また、最近は "log-bin" ではなく "log_bin" に移行しつつあるとか
#log_bin = /var/log/mysql/mysqld_multi1_bin.log
#relay_log = /var/log/mysql/mysqld_multi1_relay.log
log = /var/log/mysql/mysqld_multi1.log
log_error = /var/log/mysql/mysqld_multi1_error.log
# - どのコマンドを使うのかという設定?、よくわからん
#   加えて "ledir" も設定すると書いてあるサイトも有ったが、
#   自分の場合だと、「その設定項目ねーよ」というエラーになった
mysqld = mysqld_safe

[mysqld2]
server-id = 102
port = 4308
datadir = /var/lib/mysql/multi/mysqld2
socket = /tmp/mysqld_multi2.sock
pid-file = /var/lib/mysql/multi/mysqld2/mysqld.pid
log = /var/log/mysql/mysqld_multi2.log
log_error = /var/log/mysql/mysqld_multi2_error.log
mysqld = mysqld_safe

起動する

sudo mysqld_multi --verbose start  # 起動
sudo mysqld_multi --verbose report  # 起動確認

もし、起動に失敗していたら、標準エラー出力やlog_error を見て修正して下さい
–verbose は、動いたと確信するまではとりあえず付けとけ!
・・・あんまり情報を出してくれねーけどな m9(^Д^)

SHUTDOWN用のユーザを作成

以下の停止コマンドを打っても止まりません

sudo mysqld_multi --verbose stop

stopコマンドを実行するためには、
先の my.cnf に user/password で記述したユーザにSHUTDOWN権限を持たせて
データベースに登録する必要があります

以下を、インスタンスの数だけ行います

mysql -h 127.0.0.1 -P 4307 -uroot
mysql> GRANT SHUTDOWN ON *.* TO `任意のユーザ名`@`localhost`
  IDENTIFIED BY "任意のパスワード" WITH GRANT OPTION;
mysql -h 127.0.0.1 -P 4308 -uroot
mysql> GRANT SHUTDOWN ON *.* TO `任意のユーザ名`@`localhost`
  IDENTIFIED BY "任意のパスワード" WITH GRANT OPTION;

どうせ、色々操作するんだろということで、
自分の場合は ALL PRIVILEGES で root を修正しました
あ、"WITH GRANT OPTION" いらないかも..

ちなみに、-h localhost だと入れません、不思議!

終了したら、以下で停止&その確認

sudo mysqld_multi --verbose stop
sudo mysqld_multi --verbose report

これで設定は完了です

補足

これで、指定したインスタンスだけを操作できます
番号は server-id ではなくて、[mysqld1] の番号

sudo mysqld_multi start 1  # 1だけ
sudo mysqld_multi start 1,2  # 1と2
sudo mysqld_multi start 1-2  # 1から2

参考にしたサイト様達です、多謝しまくり!