dak ブログ

python、rubyなどのプログラミング、MySQL、サーバーの設定などの備忘録。レゴの写真も。

mysqldumpでレプリケーション用にデータをダンプする方法

2011-06-19 22:11:10 | mysql
mysqlでレプリケーションのスレーブ用にデータをダンプするのに、mysqldumpコマンドで--master-dataを指定すると、ダンプファイルにレプリケーション位置を指定するmaster_log_file、master_log_posを設定するSQLも出力されます。

$ mysqldump --master-data DB名 テーブル名

出力ファイルには以下のように master_log_file と、master_log_pos を指定するSQLが出力されています。

--
-- Position to start replication or point-in-time recovery from
--

CHANGE MASTER TO MASTER_LOG_FILE='.000650', MASTER_LOG_POS=458955379;


rubyのString#splitで分割文字列も取得する方法

2011-06-11 20:29:49 | mysql
rubyのString#splitの第1引数に指定する分割パターンは、通常は戻り値の配列に含まれません。

戻り値の配列で分割パターンを取得するには、分割パターンを(...)で指定します。

irb(main):001:0> "abc,def,ghi".split(/(,)/)
=> ["abc", ",", "def", ",", "ghi"]

mysqldumpでテーブルをロックしながらダンプする方法

2011-06-10 22:49:32 | mysql
mysqldumpでテーブルをダンプする際に、--lock-all-tables オプションを指定すると、すべてのテーブルをリードロックした状態でダンプを行います。

$ mysqldump --lock-all-tables db table1 table2

ロック対象は、全DBの全テーブルです。
mysqldumpの対象ではないテーブルへの書き込みはブロックされます。

そのため、レプリケーションの設定を行う際に、マスターのデータをダンプしてスレーブに登録するような場合には、--lock-all-tables を指定してダンプするのがよさそうです。


--lock-tables オプションの場合には、指定されたテーブルがダンプされている時間帯だけリードロックされるようです。

$ mysqldump --lock-tables db table1 table2

table1 をダンプしている間は、table2 への書き込みが可能です。