mysqldumpでMariaDBのデータベースをバックアップする方法

mysqldumpでMariaDBのデータベースをバックアップする方法をまとめました。

普段はWordPressのバックアップぐらいしかしませんが、すぐに忘れるので自分用メモとして置いておきます。

mysqldumpについて

mysqldumpはデータベースの内容をSQL形式としてダンプ(バックアップ)し、リストアをする時にもSQLで行います。

メリット

この方法はSQL形式でバックアップを取るので、バックアップされた内容をエディタ等で確認したり編集することもできます。

デメリット

SQL文でリストアするため時間が掛かってしまいます。

数百GBといったような、サイズが大きなデータベースの場合はリストアにかなり時間が掛かるようなので、別環境でリストア試験を行ってどのくらいリストアに時間が掛かるか確認しておいた方が良いでしょう。

もっと早くリストアする必要がある場合は、Mariabackup等でMariaDBのデータディレクトリを物理的にバックアップするという方法もあります。

データベースを指定してバックアップ

mysqldumpコマンドでMariaDBのデータベースをバックアップする場合、下記のコマンドを実行します。

mysqldump --single-transaction -u ユーザ名 -p データベース > データベース.sql

使用しているオプションについて説明します。

--single-transaction
動作しているDBのバックアップを取得する最中に、データの追加や削除が発生しないよう1つのトランザクションとして実行してデータの整合性を高める
InnoDBでのみ使用可能なオプションで、MariaDBの場合は初期設定で選択されている。
-u
データベースの管理ユーザを指定
-p
パスワードの入力を対話的に行う

データベースにバイナリデータを含む場合

--hex-blobオプションを使用して、バイナリデータを16進数表記に変換しましょう。

実際のバックアップ例

下記内容のデータベースを例に、実際にバックアップを実行してみます。

  • データベース: vpslife
  • データベース管理ユーザ: dbadmin
  • パスワード: passw0rd
  • バックアップファイル名: vpslife_$(date +%Y%m%d-%H%M%S).sql

バックアップファイル名は、どのデータベースのバックアップなのかが簡単に判別できるような名前を付けるようにしましょう。

$(date +%Y%m%d-%H%M%S)部分でバックアップを取得した日時をファイル名に含めて、いつ取得したバックアップデータなのかをわかりやすくしています。

$ mysqldump --single-transaction -u dbadmin -p vpslife > vpslife_$(date +%Y%m%d-%H%M%S).sql
Enter password: passw0rd  # パスワードを入力

パスワードを事前に指定したい場合

パスワードを対話的に入力するのではなく、コマンド内に事前に入力をしたい場合は、-pのあとにスペースを入れずにパスワードを入力します。

mysqldump --single-transaction -u dbadmin -ppassw0rd vpslife > vpslife_$(date +%Y%m%d-%H%M%S).sql

パスワードに記号等が入っていて、そのままではエラーになってしまう場合は、シングルクォーテーションでパスワードを囲ってください。

mysqldump --single-transaction -u dbadmin -p'passw!rd' vpslife > vpslife_$(date +%Y%m%d-%H%M%S).sql

リストア

リストアを行う場合は、対象となるデータベースを事前に作成して置く必要があります。

mysqlコマンドを使用して、バックアップしたデータからリストアすることができます。

既存のデータベースにリストアを行う場合、念の為にバックアップを行ってからリストアするようにしましょう。

リストア対象を間違えてしまうと大変ですので…

mysql -u ユーザー名 -p データベース < データベース.sql

実際の例だとこんな感じになります。

$ mysql -u dbadmin -p vpslife < vpslife_年月日-時分秒.sql

リストアの際にもパスワードを事前に入力しておく方法も使えます。

$ mysql -u dbadmin -ppassw0rd vpslife < vpslife_年月日-時分秒.sql

コメント

タイトルとURLをコピーしました