No.63


【MySQL】dumpを取る時に必須のオプション

MySQLのダンプを取る時に必ず付けたいオプション

 MySQLはWEB業界で広く利用されており、高速かつ実績のあるデータベースとして有名なのは皆さんご存知の通り。

 ただ、細かいバグが多いことも有名で、以外と深刻な問題になる物もその中には含まれている。まあ、これはMySQLに限った問題ではないけど。

 バグの中で有名なのがダンプ時のロック問題。mysqlはmysqlumpコマンド実行時にデフォルトで「書き込みロック」を行う。データが小量のうちはいいけど、データが多くなれば当然ロックの時間が長くなってしまう。セッション管理など、常にデータが更新されるようなシステムでは障害発生待ったなし、の状況である。

 しかしご安心を。書き込みロックせずにダンプを取るオプションが用意されている。


--single-transaction オプション

--single-transactionオプションを付けてmysqldumpを実行すると、ダンプ実行前に「BEGIN」クエリが実行されるようになる。そのオプションの名前の通り、トランザクションを開始してからダンプを実行するわけだ。これにより、ダンプ内容はコマンド実行時のものが保証されるという仕組み。

 もちろんトランザクション処理を行うことでメモリ消費量などシステムへの負荷が増えることが懸念されるけど、そもそもダンプ処理を行うこと自体が負荷なわけだし、ダンプを取るような状態のときに負荷がどうだとか言ってる状況でもないことが多いだろう。