mysqldumpリストア手順

mysqldumpファイルを/restore/tmp/mysqldumpファイル.sqlとしたとき、次のコマンドでリストアするというのが一般的に知られた方法です。

# mysql -u root < /restore/tmp/mysqldumpファイル.sql

果たして、実用上配慮すべきことも含めて、どうするのがベターなのかということを考えてみました。 実用上はmysqlをバイナリログを出力する設定で稼動させると思いますので、ある問題が発生します。 mysqldumpファイルのリストア処理で実行されるSQL文は相当の数になり、データベースに対する更新が大量に発生します。その実行結果として、バイナリログにメッセージが大量に吐き出され、バイナリログファイルが肥大化します。多くのケースでは歓迎されないことです。

という点に配慮すると、次のようにmysqlコマンドプロンプトに入り、そのセッションだけバイナリログを出力しない設定を行った上で、mysqldumpファイルをリストアするという方法がベター。

# mysql -u root -p -s ←オプション s を付ける Enter password: ←パスワードを入力 mysql> set sql_bin_log=OFF; ←このセッションでは、バイナリログ出力を行わない設定に変更 mysql> source /restore/tmp/mysqldumpファイル.sql mysql> quit

ちなみに、mysqlコマンドの sオプションは、mysqlプロンプトでの実行結果を表示しないようにするためのものです。これを指定しないと、”Query OK, 0 rows affected (0.00 sec)”などのメッセージが大量に画面に表示されることになります。

MySQL のバックアップとリストア・リカバリ

MySQL のバックアップとリストア・リカバリを行う方法として、パッケージ付属の mysqldump および mysqlbinlog の使い方(コマンドライン)を整理しておきます。

なお、この記事は、過去記事『MySQL 5.5.9 のバックアップ/リカバリ』を元に加筆・修正して、コンパクトにまとめたものです。

また、ここでは下記を前提としています。

MySQLのバージョン・・・5.5 mysql管理者rootのパスワード・・・無し 対象データベース・・・wordpress mysqldump以降のバイナリログファイル・・・mysql-bin.000111, mysql-bin.000112 1.バックアップ

全データベースをバックアップする。

[root ~]# mysqldump -u root -pxxxxxxxx –single-transaction –flush-logs –all-databases > mysqldump_`date +%Y%m%d%H%M`.sql 2.リストア・リカバリ

全データベースのリストアする。

[root ~]# mysql -u root -pxxxxxxxx < mysqldump_201201101616.sql

※特定のデータベースをリストアする場合は...

[root ~]# mysql -u root -pxxxxxxxx リストアしたいデータベース名 < mysqldump_201201101616.sql

上記リストアの後に、バイナリログによるロールフォワードを行う。

[root ~]# mysqlbinlog -u root 続きを読む »

MySQL 5.5.x のバックアップ/リカバリ

WordPressのためというのが現在の主な用途ですが、MySQLを稼働させています(記事投稿時点での最新バージョン5.5.9を使用)。 さて、そうなるとMySQLには大切なデータを保存していることになるので、データの保全性とブログの可用性向上のためにバックアップ/リカバリの構築が必要になります。

もちろん、高いレベルを求めれば切りがありませんので、最も手軽で簡単な方法を採りたいと考え、まずはmysqldumpでのバックアップ運用とmysql、mysqlbinlogを使用した復旧(リストア&リカバリ)の手順を構築しておこうと思います。

【可用性要件】

要件は、 「毎日夜中に全データベースのバックアップを取る」 ということです。

【バックアップ】

オンラインバックアップを行うことにします。バックアップ設定手順は次の通りです。

1.cronの確認 [root ~]# ps -ef | grep crond root 17548 1 0 2010 ? 00:00:01 crond ←稼働している! root 55239 44276 0 23:07 pts/0 00:00:00 grep crond

稼働していない場合の対応には文字数が必要なので、ここでは割愛します。

2.crontabの確認 [root ~]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 37 * * * * root run-parts /etc/cron.hourly 続きを読む »