Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

前置き

小ネタになります: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に移行したいと考えています。

devnokiyo
ゲーム関連のWebサイトや時々モバイルアプリを作るエンジニアです。ご縁がありTechpitさんでプログラミング教材を執筆しました。 犬とデジモノガジェットが好きです。犬に関するWebサイトかモバイルアプリを個人開発しようとしてます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした