Edited at

MySQLでストアド, トリガー, イベントスケジューラーもフルバックアップする


前置き

小ネタになります:pushpin:

「MySQLでリストアしたらストアドが無くなった」という相談があり、実行したmysqldumpのコマンドを聞いたらmysqldump -u root -p --all-databases > dump.sqlのようなコマンドでした:confounded:

このコマンドは非常に多く紹介されていますが「全データベースのバックアップ」という紹介のされ方が多いので誤解されやすいのかもしれません。もしくは世間的にストアド、トリガー、イベントスケジューラーの存在は薄いのでしょうか:question:

mysqldumpのオプションを指定してストアド、トリガー、イベントスケジューラーをダンプする必要があります。


mysqldumpオプションを指定する

当初はストアドなどが無くても、いつの間に作成されたりするので、筆者は以下のオプションを常時付与してバックアップをしています。

オプション
備考

--routines
ストアドプロシージャー、ストアドファンクションをダンプする。

--triggers
トリガーをダンプする。

--events
イベントスケジューラーをダンプする。


コマンドの実行例

筆者はMySQL 8.0(InnoDB、レプリケーション無し)で以下のコマンドでフルバックアップしています。最終的には「全データベースのバックアップ」の定義はそれぞれだと思いますが:sweat_smile:、ストアド, トリガー, イベントスケジューラーはダンプされます:thumbsup:


Linux/macOSなど

mysqldump -u root -p --single-transaction --routines --triggers --add-drop-trigger --events --all-databases > dump.sql



Windows(特にPowerShellはこちらをお勧めします)

mysqldump -u root -p --single-transaction --routines --triggers --add-drop-trigger --events --all-databases --result-file="dump.sql"



補足

以下のオプションは改めて指定する必要が無いと考えています。

オプション
理由

--opt
デフォルトで指定されているため。 故に以下のオプションも改めて指定する必要はない。
--add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset

--skip-lock-tables
--single-transactionと--lock-tablesは排他利用であるため。


終わりに

筆者は--routinesは知っていましたが、「--triggers--eventsもあるのか」と思ったことがあります。ストアドなどを含めたコマンドが少しでも広まって、リストア時に「真っ青なる方々」が少なくなれば良いと思い記事にしました。

余談ですが、そろそろmysqlpumpに移行したいと考えています。