導入 Binlog ログ、つまりバイナリ ログ ファイルは、データベースに対するユーザー操作の SQL ステートメント情報を記録するために使用されます。データが誤って削除された場合、binlog ログを通じて削除されたデータを復元できます。データの復元方法は、従来のバイナリ ファイル復元と GTID ベースのバイナリ ファイル復元に分かれています。 事前準備 Centos7仮想マシンを準備し、ファイアウォールとselinuxをオフにし、IPアドレスを設定し、システム時間を同期し、MySQLデータベースをインストールします。 従来のバイナリログ復元データ 設定ファイルを変更する [root@localhost ~]# vi /etc/my.cnf サーバーID=1 ログ bin = binlog #データベースサービスを再起動します [root@localhost ~]# systemctl restart mysqld 運用データベース mysql> データベース mydb を作成します。文字セットは utf8mb4 です。 mysql> mydb を使用します。 mysql> テーブル test(id int) を作成します。engine=innodb charset=utf8mb4; mysql> テスト値に挿入(1); mysql> テスト値に挿入(2); mysql> テスト値に挿入(3); mysql> テスト値に挿入(4); mysql> コミット; mysql> テスト セット id=10 を更新します (id=4)。 mysql> コミット; mysql> テストから * を選択します。 +------+ |id| +------+ | 1 | | 2 | | 3 | | 10 | +------+ セット内の 4 行 (0.00 秒) mysql> データベース mydb を削除します。 バイナリログ情報を表示する mysql> マスターステータスを表示します\G; ************************** 1. 行 **************************** ファイル: binlog.000001 役職: 1960 バイナリログ_Do_DB: バイナリログを無視: 実行されたGtidセット: セット内の 1 行 (0.00 秒) #データベースの作成と削除のポイントは219と1868です mysql> 'binlog.000001' の binlog イベントを表示します。 +---------------+------+----------------+------------+-------------+---------------------------------------------------------------------+ | ログ名 | 位置 | イベント タイプ | サーバー ID | ログ終了位置 | 情報 | +---------------+------+----------------+------------+-------------+---------------------------------------------------------------------+ | binlog.000001 | 219 | クエリ | 1 | 329 | データベース mydb charset utf8mb4 を作成 | | binlog.000001 | 1868 | クエリ | 1 | 1960 | データベース mydb を削除 | +---------------+------+----------------+------------+-------------+---------------------------------------------------------------------+ バイナリログ情報として保存 [root@localhost ~]# mysqlbinlog --start-position=219 --stop-position=1868 /var/lib/mysql/binlog.000001 > /tmp/binlog.sql データの回復 #重複ログ記録を避けるためにバイナリログ記録を一時的にオフにします。mysql> set sql_log_bin=0; #データを復元mysql> source /tmp/binlog.sql #バイナリログを再開します。mysql> set sql_log_bin=1; データ復旧ステータスを確認する mysql> データベースを表示します。 +--------------------+ | データベース | +--------------------+ | 情報スキーマ | | マイデータベース | |mysql | | パフォーマンススキーマ | |システム| +--------------------+ セット内の行数は 5 です (0.00 秒) mysql> mydb を使用します。 データベースが変更されました mysql> テストから * を選択します。 +------+ |id| +------+ | 1 | | 2 | | 3 | | 10 | +------+ セット内の4行(0.00秒)、 GTIDバイナリログに基づくデータの復元 設定ファイルを変更する [root@localhost ~]# vi /etc/my.cnf サーバーID=1 ログ bin = binlog gtid_mode=オン 強制GTID一貫性=true ログスレーブ更新=1 #データベースサービスを再起動します [root@localhost ~]# systemctl restart mysqld 運用データベース mysql> データベース mydb1 を作成します。 mysql> mydb1 を使用します。 データベースが変更されました mysql> テーブル t1(id int) を作成します。engine=innodb charset=utf8mb4; mysql> t1 に値を挿入します(1); mysql> t1 に値を挿入します(2); mysql> t1 に値を挿入します(3); mysql> t1 に値を挿入します(11); mysql> t1 に値を挿入します(12); mysql> コミット; mysql> t1 から * を選択します。 +------+ |id| +------+ | 1 | | 2 | | 3 | | 11 | | 12 | +------+ セット内の行数は 5 です (0.00 秒) mysql> データベース mydb1 を削除します。 バイナリログ情報を表示する mysql> マスターステータスを表示します\G; ************************** 1. 行 **************************** ファイル: binlog.000003 役職: 1944 バイナリログ_Do_DB: バイナリログを無視: 実行されたGtidセット: 51d3db57-bf69-11ea-976c-000c2911a022:1-8 セット内の 1 行 (0.00 秒) mysql> 'binlog.000003' の binlog イベントを表示します。 +---------------+------+----------------+------------+-------------+-------------------------------------------------------------------+ | ログ名 | 位置 | イベント タイプ | サーバー ID | ログ終了位置 | 情報 | +---------------+------+----------------+------------+-------------+-------------------------------------------------------------------+ | binlog.000003 | 154 | Gtid | 1 | 219 | SET @@SESSION.GTID_NEXT= '51d3db57-bf69-11ea-976c-000c2911a022:1' | | binlog.000003 | 219 | クエリ | 1 | 316 | データベース mydb1 を作成 | | binlog.000003 | 1784 | Gtid | 1 | 1849 | SET @@SESSION.GTID_NEXT= '51d3db57-bf69-11ea-976c-000c2911a022:8' | | binlog.000003 | 1849 | クエリ | 1 | 1944 | データベース mydb1 を削除 | +---------------+------+----------------+------------+-------------+-------------------------------------------------------------------+ バイナリログ情報として保存 #トランザクション レコード 8 はデータベースを削除するため、トランザクション レコード 1 ~ 7 のみを復元する必要があります [root@localhost ~]# mysqlbinlog --skip-gtids --include-gtids='51d3db57-bf69-11ea-976c-000c2911a022:1-7' /var/lib/mysql/binlog.000003 > /tmp/gtid.sql パラメータの説明: データの回復 mysql> sql_log_bin=0 を設定します。 mysql> ソース /tmp/gtid.sql mysql> sql_log_bin=1 を設定します。 データ復旧ステータスを確認する mysql> データベースを表示します。 +--------------------+ | データベース | +--------------------+ | 情報スキーマ | | マイデータベース | | mydb1 | |mysql | | パフォーマンススキーマ | |システム| +--------------------+ セット内の 6 行 (0.00 秒) mysql> mydb1 を使用します。 データベースが変更されました mysql> t1 から * を選択します。 +------+ |id| +------+ | 1 | | 2 | | 3 | | 11 | | 12 | +------+ セット内の行数は 5 です (0.00 秒) Centos7 で MySQL ログベースのデータ復元を実装するためのサンプルコードに関するこの記事はこれで終わりです。 Centos7 MySQL ログ復元データの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。 今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: MySQL トリガーの基本的な使い方(作成、表示、削除など)の詳細な説明
フローティング要素は、親要素の高さを縮小します。要素を float float:left/right...
目次1. プラットフォームバスの紹介1.1. Linuxドライバの分離と階層化1.1.1. Linu...
ワーカープロセスは、起動されると、まず自身の動作に必要な環境を初期化し、次に実行する必要があるイベン...
1. MySQL WorkbenchをダウンロードするWorkbench は、MySQL のグラフィ...
目次序文1. イベントとクリップボードを貼り付ける2. クリップボード内のコンテンツ形式3. HTM...
序文フィールドの追加は誰でもよく知っていると思います。簡単に記述できます。MySQL テーブルにフィ...
Spring Boot プロジェクトでは、Docker コンテナ、jar、war の階層化パッケージ...
1. まず、よく使われるMySQL関数をいくつか紹介しますRAND() は 0 から 1 (0<...
導入データベースに接続するためにJDBCを使用することに慣れている場合は、データベースに接続するため...
多くの場合、フォームを美しくするために、送信ボタンが画像に置き換えられます。ただし、細部に注意を払わ...
2つのケース: 1. 索引あり 2. 索引なし前提条件:方法: コマンドラインを使用してシミュレート...
目次序文場合最適化まとめ序文バックエンド開発では、一度に大量のデータがロードされ、メモリやディスク ...
最近、クライアントのために印刷していたとき、ページのヘッダーを印刷するのではなく、表の内容だけを印刷...
1. まず、お使いのマシンに応じて、MySQL 公式サイトから対応するデータベースをダウンロードしま...
この記事は、Free Code Camp の基本アルゴリズム スクリプト「文字列内の最長の単語を見つ...