mysqldumpの--flush-logsオプション、mysqldumpを取ると同時にFLUSH LOGSしてくれるので、
バイナリログの管理が便利になったりするあのオプション。
ドキュメントには、
`--master-dataまたは--lock-all-tablesを一緒につけないと、複数データベースをダンプする時に
各データベースのダンプごとにFLUSH LOGSするよ!'
とか書いてあるんだけど、一向に手元で再現しなかったのでソースを読んでみた。
結論、5.5.21以降(5.6も)では、--flush-logs --single-transactionならFLUSH LOGSは1回だけしか実行されない。
5.5.20以前(5.1も)では、--flush-logs --single-transactionではデータベースごとにFLUSH LOGSされる。
5.5.21以降のclients/mysqldump.cのmain関数の中で、
-------------------------------------------------------
/*
Flush logs before starting transaction since
this causes implicit commit starting mysql-5.5.
*/
if (opt_lock_all_tables || opt_master_data ||
(opt_single_transaction && flush_logs) ||
opt_delete_master_logs)
{
if (flush_logs || opt_delete_master_logs)
{
if (mysql_refresh(mysql, REFRESH_LOG))
goto err;
verbose_msg("-- main : logs flushed successfully!\n");
}
/* Not anymore! That would not be sensible. */
flush_logs= 0;
}
-------------------------------------------------------
となっているのを発見した。。
5.5.20の同じ部分は、
-------------------------------------------------------
if (opt_delete_master_logs)
{
if (mysql_refresh(mysql, REFRESH_LOG) ||
get_bin_log_name(mysql, bin_log_name, sizeof(bin_log_name)))
goto err;
flush_logs= 0;
}
if (opt_lock_all_tables || opt_master_data)
{
if (flush_logs && mysql_refresh(mysql, REFRESH_LOG))
goto err;
flush_logs= 0; /* not anymore; that would not be sensible */
}
-------------------------------------------------------
と、ドキュメントどおりの動作。
ドキュメントのバグとして人生初Bugs投稿しました。。ドキがムネムネ。
ネタをくれた@studio3104さん、ありがとうございました(*-人-) 楽しかったです
0 件のコメント :
コメントを投稿