MySQLでのバックアップとリカバリ
3232 ワード
MySQLバックアップ
MySQLの論理バックアップは、データベース内のデータをテキストファイルにバックアップし、バックアップしたファイルを表示および編集できます.MySQLではmysaldumpツールを使用してバックアップを完了します.mysqldumpを呼び出すには、次の3つがあります.指定したデータベースまたはそのデータベースの一部のテーブルをバックアップします. 指定された1つ以上のデータベースのバックアップ すべてのデータベースをバックアップ
データベース内のテーブルが指定されていない場合、デフォルトでは、すべてのデータベース内のすべてのテーブルがエクスポートされます.mysqldumpツールを使用したバックアップの例を以下に示します.
(1)すべてのデータベースをバックアップする:
(2)バックアップデータベースtest
(3)バックアップデータベースtest下のテーブルemp
(4)バックアップデータベースtestの下のテーブルempとdept
(5)バックアップデータベースtestの下のすべてのテーブルがカンマで分割されたテキストであり、/tmpにバックアップする:
MySQLリカバリ
MySQLでのリカバリは、完全リカバリ、ポイント・イン・タイム・リカバリ、ロケーション・リカバリの3つに分けられます.
完全なリカバリ
mysqldumpのリカバリも簡単です.バックアップを入力として実行すればいいです.具体的な構文は以下の通りです.
なお、バックアップをリカバリした後のデータは完全ではなく、バックアップ後に実行されたログを再作成する必要があります.構文は次のとおりです.
ポイント・ベースのリカバリ
エラー操作のため、例えばいくつかのテーブルを誤って削除した場合、完全なリカバリを使用するのは役に立たない.ログにエラー操作の文がまだ存在するため、エラー操作の前の状態に復元し、エラー操作の文をスキップし、後に実行した文を復元し、リカバリを完了する必要がある.このリカバリは不完全リカバリと呼ばれ,MySQLでは,不完全リカバリはそれぞれ時点ベースのリカバリと位置ベースのリカバリである.
以下は、ポイント・イン・タイム・リカバリに基づく操作手順です.
(1)午前10時にエラーが発生した場合は、バックアップおよびBINLOGデータを使用して、次の文で障害前にリカバリできます.
(2)障害時の時点をスキップし,後のBINLOGを実行して復旧を完了する.
場所ベースのリカバリ
同じ時点で複数のSQL文が同時に実行される可能性があるため、ポイント・イン・タイム・ベースのリカバリと似ていますが、より正確です.リカバリの手順は次のとおりです.
(1)shellで次のコマンドを実行します.
このコマンドは、/tmpディレクトリに小さなテキストファイルを作成し、エラー文の前後の位置番号、例えば前後の位置番号がそれぞれ565512と565515であるファイルを編集します.
(2)以前のバックアップファイルを復元した後、コマンドラインから次の内容を入力します.
上の最初のローは、停止位置までのすべてのトランザクションに戻ります.次の行は、指定された開始位置からバイナリ・ログが終了するまでのすべてのトランザクションをリカバリします.mysqlbinlogの出力には、SQL文ごとに記録される前のSET TIMESTAMP文が含まれているため、リカバリされたデータと関連するMySQLログは、トランザクションの実行元の時間を反映します.
いいねをあげるのを忘れないでね.~
MySQLの論理バックアップは、データベース内のデータをテキストファイルにバックアップし、バックアップしたファイルを表示および編集できます.MySQLではmysaldumpツールを使用してバックアップを完了します.mysqldumpを呼び出すには、次の3つがあります.
shell>mysqldump [option] db_name [tables]
shell>mysqldump [option] --database DB1 [DB2 DB3...]
shell>mysqldump [option] --all-database
データベース内のテーブルが指定されていない場合、デフォルトでは、すべてのデータベース内のすべてのテーブルがエクスポートされます.mysqldumpツールを使用したバックアップの例を以下に示します.
(1)すべてのデータベースをバックアップする:
[cqh@localhost ~]$ mysqldump -uroot -p --all-database > all.sql
(2)バックアップデータベースtest
[cqh@localhost ~]$ mysqldump -uroot -p test > test.sql
(3)バックアップデータベースtest下のテーブルemp
[cqh@localhost ~]$ mysqldump -uroot -p test emp > emp.sql
(4)バックアップデータベースtestの下のテーブルempとdept
[cqh@localhost ~]$ mysqldump -uroot -p test emp dept > emp_dept.sql
(5)バックアップデータベースtestの下のすべてのテーブルがカンマで分割されたテキストであり、/tmpにバックアップする:
[cqh@localhost ~]$ mysqldump -uroot -p -T /tmp test emp --fields-terminated-by ','
MySQLリカバリ
MySQLでのリカバリは、完全リカバリ、ポイント・イン・タイム・リカバリ、ロケーション・リカバリの3つに分けられます.
完全なリカバリ
mysqldumpのリカバリも簡単です.バックアップを入力として実行すればいいです.具体的な構文は以下の通りです.
mysql -uroot -p dbname < bakfile
なお、バックアップをリカバリした後のデータは完全ではなく、バックアップ後に実行されたログを再作成する必要があります.構文は次のとおりです.
mysqlbinlog binlog-file | mysql -uroot -p
ポイント・ベースのリカバリ
エラー操作のため、例えばいくつかのテーブルを誤って削除した場合、完全なリカバリを使用するのは役に立たない.ログにエラー操作の文がまだ存在するため、エラー操作の前の状態に復元し、エラー操作の文をスキップし、後に実行した文を復元し、リカバリを完了する必要がある.このリカバリは不完全リカバリと呼ばれ,MySQLでは,不完全リカバリはそれぞれ時点ベースのリカバリと位置ベースのリカバリである.
以下は、ポイント・イン・タイム・リカバリに基づく操作手順です.
(1)午前10時にエラーが発生した場合は、バックアップおよびBINLOGデータを使用して、次の文で障害前にリカバリできます.
shell>mysqlbinlog --stop-date="20150929 9:59:59" /var/log/mysql/bin.123456 | mysql -uroot -pmypwd
(2)障害時の時点をスキップし,後のBINLOGを実行して復旧を完了する.
shell>mysqlbinlog --start-date="20150929 10:01:00" /var/log/mysql/bin.123456 | mysql -uroot -pmypwd \
場所ベースのリカバリ
同じ時点で複数のSQL文が同時に実行される可能性があるため、ポイント・イン・タイム・ベースのリカバリと似ていますが、より正確です.リカバリの手順は次のとおりです.
(1)shellで次のコマンドを実行します.
shell>mysqlbinlog --start-date="20150929 9:55:00" --stop-date="20150929 10:05:00" /var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
このコマンドは、/tmpディレクトリに小さなテキストファイルを作成し、エラー文の前後の位置番号、例えば前後の位置番号がそれぞれ565512と565515であるファイルを編集します.
(2)以前のバックアップファイルを復元した後、コマンドラインから次の内容を入力します.
shell>mysqlbinlog --stop-position="551212" /var/log/mysql/bin.123456 | mysql -uroot -pmypwd
shell>mysqlbinlog --start-position="551215" /var/log/mysql/bin.123456 | mysql -uroot -pmypwd
上の最初のローは、停止位置までのすべてのトランザクションに戻ります.次の行は、指定された開始位置からバイナリ・ログが終了するまでのすべてのトランザクションをリカバリします.mysqlbinlogの出力には、SQL文ごとに記録される前のSET TIMESTAMP文が含まれているため、リカバリされたデータと関連するMySQLログは、トランザクションの実行元の時間を反映します.
いいねをあげるのを忘れないでね.~