b.l0g.jp     About     Archive     Feed

MySQLスレーブのmy.cnfにはreport-hostを必ず書こう

世の中では当たり前のことなのかもしれないが、なぜか今勤めてる会社では一般的ではないのでメモしておく。

MySQLでレプリケーション構成を取っている時、スレーブとなるマシンのmy.cnfには、server-idと一緒にreport-hostを必ず書いておこう。

  
server-id = 一意のID
  
report-host = ホスト名
  

(2012.10.15追記) report-hostではなくslave-hostになってたと@ishikawa84gさんから指摘を受けたので修正。

これで、マスターでshow slave hostsコマンドを打つだけで、スレーブの一覧が表示される。

  
> show slave hosts
  
+----+------+--+----+
  
| Server\_id | Host | Port | Master\_id |
  
+----+------+--+----+
  
| 16800111 | nanikano-dbs01 | 3306 | 16800101 |
  
| 16800112 | nanikano-dbs02 | 3306 | 16800101 |
  
| 16800113 | nanikano-dbs03 | 3306 | 16800101 |
  
+----+------+--+----+
  

report-hostを書いていない時にマスタからスレーブの一覧を取得しようと思うと、マスターに接続しているプロセスの一覧から、スレーブへログを渡しているものを抜き出して知るしかない。以下のように、show processlistの結果から、ユーザがレプリケーション用のもの(change masterした時に指定したユーザ)で、CommandがBinlog Dumpとなっているものがスレーブとのレプリケーション用のプロセスだと分かる。

  
> show processlist;

+---+----+-------+----+-----+---+----------------------+------+
  
| Id | User | Host | db | Command | Time | State | Info |
  
+---+----+-------+----+-----+---+----------------------+------+
  
| 1592850 | user00001 | 192.168.0.203:38102 | nantoka | Sleep | 1 | | NULL |
  
| 1592854 | user00001 | 192.168.0.203:38106 | hogefuga | Sleep | 1 | | NULL |
  
| 1592856 | user00001 | 192.168.0.203:38108 | hogefuga | Sleep | 1 | | NULL |
  
| 1596335 | user00001 | 192.168.0.203:38328 | hogefuga | Sleep | 27 | | NULL |
  
| 1596337 | user00001 | 192.168.0.203:38331 | nantoka | Sleep | 15 | | NULL |
    
(中略)
  
| 1596701 | repluser | 192.168.0.72:40783 | NULL | Binlog Dump | 80289 | Has sent all binlog to slave; waiting for binlog to be updated | NULL |
  
| 1596702 | repluser | 192.168.0.73:49388 | NULL | Binlog Dump | 80289 | Has sent all binlog to slave; waiting for binlog to be updated | NULL |
  
| 1596706 | repluser | 192.168.0.55:47014 | NULL | Binlog Dump | 80289 | Has sent all binlog to slave; waiting for binlog to be updated | NULL |
  
| 1596707 | repluser | 192.168.1.81:54804 | NULL | Binlog Dump | 80289 | Has sent all binlog to slave; waiting for binlog to be updated | NULL |
  
+---+----+-------+----+-----+---+----------------------+------+
  

多数のアプリケーションサーバからの接続があったりしてコネクション数が大量で、show processlistが多くの行を返す場合などにはこれでは見づらく、show slave hostコマンドできれいに見られるのがうれしい。細かいことだけど、あとで見やすいようにしておくのは結構重要だと思う。

ちなみに、report-hostは「set report-host = hoge」などとオンラインで変更することはできないので、レプリケーションのセットアップ時などセットアップの初期段階で設定しておくべし。

2012年4月18日追記

MySQL 5.5.3よりも新しいバージョンの場合、スレーブでreport-hostを設定しなくてもマスタでshow slave hostsを実行すると一覧が表示されるようになっているようだ(出典)。5.5.3以前の場合、report-hostを書かないとそのスレーブは表示されてこない。

  
mysql> show slave hosts;
  
+----+--+--+----+
  
| Server\_id | Host | Port | Master\_id |
  
+----+--+--+----+
  
| 111 | | 3306 | 101 |
  
| 112 | | 3306 | 101 |
  
+----+--+--+----+
  
2 rows in set (0.00 sec)
  

ただしこの場合Hostの欄は上のように空になり、report-hostを設定するとその値がHost列に表示されるようになっている。

cygwinのbashでclearを使いたい

masudakさんのエントリ を読んで、そういえば作業用PCにCygwin入れてないなと思ってインストールしてみたら、clearコマンドがなかった。

学生時代からの癖で事あるごとに「clear;ls」と入力するのが好きな自分は、clearコマンドがないと生きていけない。

どうやらclearコマンドが欲しい場合は、ncursesを入れると使えるようになるようだ。Cygwinのsetup.exeで、「Utils → ncurses」をインストールするようにチェックを入れれば、めでたくclearできるようになる。

lsコマンドのソートオプションまとめ

lsコマンドにはソートオプションがいくつかあるけど、いつもどれがどれだか分からなくなるのでメモ。

時刻でソートするもの

-c

-ltと一緒に指定すると、ctime(最終ステータス変更時刻)を表示してそれでソート

-lと一緒に指定すると、ctimeを表示するがファイル名でソート

-u

-ltと一緒に指定すると、atime(最終アクセス時刻)を表示してそれでソート

-lと一緒に指定すると、atimeを表示するがファイル名でソート

-t

タイムスタンプでソート

名前でソートするもの

-X

拡張子のアルファベット順にソート

-v

バージョン順にソート

サイズでソートするもの

-S

ファイルサイズでソート(大きいものが上)

その他

-U

ソートせずにディレクトリに置かれている順に表示

-f

ソートしない

-r

指定されたオプションの逆順でソート

ソート以外の便利なオプション

-m

コンマ区切り

-Q

ダブルクォーテーションでくくられる