稼働中のサービスなどではMySQLのバックアップは必須と思われます。
今回は、バックアップとリカバリの方法についてメモを残します。
MySQLのバックアップにはmysqldumpを利用します。
データベースが1つの場合には気にしなくてもいいですが、複数ある場合には全てのバックアップを取る方法と個別に取る方法を覚えておいた方が何かと役に立ちます。
まずは、全てのバックアップを取る場合です。
[shell]
mysqldump -u root -p –all-databases > dump.sql
[/shell]
mysqldump実行した結果をdump.sqlファイルへ出力しています。
dump.sqlには全てのデータベースのバックアップが取られています。
–all-databasesの代わりに、-Aでも全てのデータベースのバックアップを作成することが可能です。
次に個別のバックアップを作成する場合です。
[shell]
mysqldump -u root -p database > dump.sql
[/shell]
databaseにはバックアップ対象のデータベース名を入れます。
基本的にはこれでバックアップが作成できます。
ちょっと話題がそれますが、mysqldumpには上記以外にもオプション(引数)が存在します。
まずは、mysqldumpを実行した際には、通常ロックがかかりますがあえてかけない方法についてです。
–skip-lock-tablesを引数を追加して実行することで、ロックをかけずにバックアップを行うことが可能です。
–skip-lock-tablesをつけて実行した場合には、ロックがかからないためバックアップ中の更新処理について考慮がされない状態となりデータについて不整合が発生することもあります。
これらのことを考慮するには、–single-transactionを引数に追加して実行することで回避することが可能です。
また、バイナリログについても新しくする場合には、–flush-logsを引数に追加して実行します。
このオプションを設定して実行することで、mysqldumpで取得したバックアップを戻し、ログを利用してロールフォワードリカバリを行うことが可能です。
間が空きましたが・・・次に作成したバックアップからもとに戻す場合です。
全てのデータベースをもとに戻す場合には下記のコマンドを実行します。
[shell]
mysql -u root -p < dump.sql
[/shell]
個別にデータベースを戻す場合には下記のコマンドを実行します。
[shell]
mysql -u root -p database < dump.sql
[/shell]
バックアップとリストアについて、簡易的にまとめましたが上記の内容である程度の作業は可能になるかと思われます。
もっと詳細なオプションについては公式サイトを確認してください。
コメント