それなりブログ

とあるWebエンジニアのそれなりのブログ、JavaScript/Node.js/Python/PHP/ゲーム作成 など

UbuntuのMySQL-5.5でmysqld_multiの設定

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

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


One Response to “UbuntuのMySQL-5.5でmysqld_multiの設定”

  • […] 前回の記事をご覧になられた方はもしかしたらと感づいているかもしれませんが、 簡単に mysqld_multi で済まそうと思ったら(そんな簡単に終わらなかったんですが) 他に検証することもあって、結局はサーバを分けざるを得なくなりました 少し先を読めばわかったはずのことで、ダメダメです 面倒だからひとつのサーバで済まそうと思っている方は、 「レプリケーションを組むようなアプリなのに、障害・復旧等の検証はしなくていいの?」 というのを先に考慮して置いた方がいいと思いました! « UbuntuのMySQL-5.5でmysqld_multiの設定 […]


コメントを残す

メールアドレスが公開されることはありません。

Categories

Archives