ホームページ  >  記事  >  データベース  >  mysqlログを復元する方法

mysqlログを復元する方法

coldplay.xixi
coldplay.xixiオリジナル
2020-10-09 15:25:433106ブラウズ

Mysql ログの回復方法: 最初に回復時間を指定します (コードは [mysqlbinlog --stop-date=""] です); 次に回復場所を指定します (コードは [mysqlbinlog --start-date=]) 2020-10-09 9:55:00」]。

mysqlログを復元する方法

MySQL ログの回復方法:

バイナリ ログからデータを回復するには、現在のバイナリを知る必要があります。 log ファイルのパスとファイル名。パスは通常、オプション ファイル (つまり、システムに応じて my.cnf または my.ini) から見つけることができます。オプション ファイルに含まれていない場合は、サーバーの起動時にコマンド ラインのオプションとして指定できます。バイナリ ログを有効にするオプションは --log-bin です。現在のバイナリ ログ ファイルのファイル名を確認するには、次の MySQL ステートメントを入力します。

SHOW BINLOG EVENTS /G

コマンド ラインから次のように入力することもできます。

mysql --user=root -pmy_pwd -e 'SHOW BINLOG EVENTS /G'

パスワード my_pwd をサーバーのパスワードに置き換えます。ルートパスワード。

1. リカバリ時間の指定

MySQL 4.1.4 の場合、--start-date および --stop-date オプションを使用して DATETIME 形式で開始時刻と終了時刻を指定できます。 mysqlbinlog ステートメント。たとえば、今朝 (今日は 2006 年 4 月 20 日) 10:00 に、大きなテーブルを削除する SQL ステートメントを実行するとします。テーブルとデータを復元するには、前夜のバックアップを復元して次のように入力します。

mysqlbinlog --stop-date="2005-04-20 9:59:59" /var/log/mysql/bin.123456 /
mysql -u root -pmypwd

このコマンドは、DATETIME 形式のデータで、--stop-date オプションで指定された日時までのすべてのデータを復元します。数時間後に入力された不正な SQL ステートメントが検出されなかった場合は、後で実行したアクティビティを再開することができます。これらに基づいて、日付と時刻を使用して mysqlbinlog を再度実行できます。

mysqlbinlog --start-date="2005-04-20 10:01:00" /var/log/mysql/bin.123456 /
mysql -u root -pmypwd /

この行では、午前 10:01 からのログインの SQL ステートメントが実行されます。実行前夜のダンプ ファイルと mysqlbinlog の 2 行を組み合わせると、すべてのデータを午前 10 時 1 秒前の時点に復元できます。ログをチェックして時間が正確であることを確認する必要があります。次のセクションでは、これを行う方法について説明します。

2. リカバリ場所の指定

mysqlbinlog オプション --start-position および --stop-position を使用して、日付と時刻を指定せずにログの場所を指定することもできます。これらは、ログからの位置番号を与えることを除いて、開始日および終了日のオプションと同じ効果があります。ログの場所を使用することは、特に破壊的な SQL ステートメントにより多くのトランザクションが同時に発生している場合に、より正確な回復方法です。位置番号を特定するには、mysqlbinlog を実行して、予期しないトランザクションが実行された時間範囲を見つけますが、検査のために結果をテキスト ファイルにリダイレクトします。操作方法は次のとおりです。

mysqlbinlog --start-date="2005-04-20 9:55:00" --stop-date="2005-04-20 10:05:00" /
/var/log/mysql/bin.123456 > /tmp/mysql_restore.sql

このコマンドは、/tmp ディレクトリに小さなテキスト ファイルを作成し、間違った SQL ステートメントが実行された場合に SQL ステートメントを表示します。テキスト エディタでファイルを開いて、繰り返したくないステートメントを探すことができます。バイナリ ログ内の位置番号をリカバリ操作の停止および継続に使用する場合は、コメント化する必要があります。 log_pos と数値を使用して位置をマークします。位置番号を使用して以前のバックアップ ファイルを復元した後、コマンド ラインから次のように入力する必要があります。

mysqlbinlog --stop-position="368312" /var/log/mysql/bin.123456 /
mysql -u root -pmypwd
mysqlbinlog --start-position="368315" /var/log/mysql/bin.123456 /
mysql -u root -pmypwd /

上記の行 1 は、停止ポイントまでのすべてのトランザクションを復元します。次の行では、指定された開始位置からバイナリ ログの終わりまでのすべてのトランザクションが復元されます。 mysqlbinlog の出力には、各 SQL ステートメントが記録される前の SET TIMESTAMP ステートメントが含まれるため、復元されたデータと関連する MySQL ログには、トランザクションの元の実行時間が反映されます。

1. MySQL データベースには増分バックアップ メカニズムがないため、データ量が大きすぎる場合、バックアップは大きな問題になります。幸いなことに、mysql データベースはマスター/スレーブ バックアップ メカニズムを提供しており、実際にはマスター データベース内のすべてのデータを同時にバックアップ データベースに書き込みます。 mysqlデータベースのホットバックアップを実装します。

2. 2 台のマシンのホット バックアップを実現したい場合は、まずマスター/スレーブ データベース サーバーのバージョン要件を理解する必要があります。ホット スタンバイを実現するには、MySQL のバージョンが 3.2 以降である必要があります。もう 1 つの基本原則は、スレーブ データベースのデータベース バージョンはマスター サーバーのデータベースのバージョンより高くてもかまいませんが、マスター サーバーのデータベースのバージョンより低くすることはできないということです。

3. メイン データベース サーバーをセットアップします:

a. まず、メイン サーバーのバージョンがホット スタンバイをサポートしているかどうかを確認します。次に、my.cnf (UNIX 系) または my.ini (Windows) の mysqld 設定ブロックの設定に log-bin (データベース変更ログを記録する) があるかどうかを確認します。mysql のレプリケーション メカニズムはログベースのレプリケーション メカニズムであるためです。 、メインサーバーは変更ログをサポートする必要があります。次に、ログを書き込むデータベースまたはログを書き込まないデータベースを設定します。この方法では、関心のあるデータベースへの変更のみがデータベースのログに書き込まれます。

server-id=1 //データベースの ID はデフォルトで 1 である必要があり、変更する必要はありません

log-bin=log_name //データベースの名前ログファイルの場合、ここでログを指定できます。 他のディレクトリに設定がない場合は、デフォルトのホスト名のログ名

binlog-do-db=db_name //ログを記録するデータベース

binlog-ignore-db=db_name //記録なし ログデータベース

上記データベースが複数ある場合は「,」で区切ってデータベース同期用のユーザーアカウントを設定します

mysql> *.*

-> へのレプリケーション スレーブを

[email='repl'@'%.mydomain.com']'repl'@'%.mydomain に許可します。 com'[/email]

IDENTIFIED BY 'slavepass'; 

4.0.2 以前的版本, 因为不支持 REPLICATION 要使用下面的语句来实现这个功能 

mysql> GRANT FILE ON *.* 

-> TO 

[email='repl'@'%.mydomain.com']'repl'@'%.mydomain.com'[/email] 

IDENTIFIED BY 'slavepass'; 

设置好主服务器的配置文件后重新启动数据库 

b.锁定现有的数据库并备份现在的数据 

锁定数据库 

mysql> FLUSH TABLES WITH READ LOCK;

备份数据库有两种办法一种是直接进入到 mysql 的 data 目录然后打包你需要备份数据库的文件夹,第二种是使用 mysqldump 的方式来备份数据库但是要加上"--master-data " 这个参数,建议使用第一种方法来备份数据库.

解除表的锁定的方法:

unlock tables;

c.查看主服务器的状态 

mysql> show master statusG; 

+---------------+----------+--------------+------------------+ 

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | 

+---------------+----------+--------------+------------------+ 

| mysql-bin.003 | 73 | test | manual,mysql | 

+---------------+----------+--------------+------------------+ 

记录 File 和 Position 项目的值,以后要用的。

相关免费学习推荐:mysql数据库(视频)

以上がmysqlログを復元する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。