前置き
小ネタになります
「MySQLでリストアしたらストアドが無くなった」という相談があり、実行したmysqldump
のコマンドを聞いたらmysqldump -u root -p --all-databases > dump.sql
のようなコマンドでした
このコマンドは非常に多く紹介されていますが「全データベースのバックアップ」という紹介のされ方が多いので誤解されやすいのかもしれません。もしくは世間的にストアド、トリガー、イベントスケジューラーの存在は薄いのでしょうか
mysqldumpのオプションを指定してストアド、トリガー、イベントスケジューラーをダンプする必要があります。
mysqldump
オプションを指定する
当初はストアドなどが無くても、いつの間に作成されたりするので、筆者は以下のオプションを常時付与してバックアップをしています。
オプション | 備考 |
---|---|
--routines | ストアドプロシージャー、ストアドファンクションをダンプする。 |
--triggers | トリガーをダンプする。 |
--events | イベントスケジューラーをダンプする。 |
コマンドの実行例
筆者はMySQL 8.0(InnoDB、レプリケーション無し)で以下のコマンドでフルバックアップしています。最終的には「全データベースのバックアップ」の定義はそれぞれだと思いますが、ストアド, トリガー, イベントスケジューラーはダンプされます
mysqldump -u root -p --single-transaction --routines --triggers --add-drop-trigger --events --all-databases > dump.sql
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に移行したいと考えています。