導入 実稼働環境では、データの損失を回避するために、通常、データベースは定期的にバックアップされます。 Linux の crontab コマンドは、データベースを定期的にバックアップするのに役立ちます。まず、crontab コマンドについて簡単に見てみましょう。やり方がわかっている場合は、次のコンテンツ「mysql バックアップ」に進んでください。 スケジュールされたタスクを管理する スケジュールされたタスクを書き込むには、crontab -e を使用します。 0 5 * * 1 [コマンド] 最初の 5 つの数字はそれぞれ分、時間、日、月、週を表し、その後の 0 8 * * * [コマンド] 拡張機能:
MySQL バックアップ すぐに始めましょう ここで、私の MySQL データベースは Docker コンテナです。毎晩 8 時にスケジュールされたタスクを実行する必要がある場合は、次のように記述できます。 0 8 * * * docker exec mysql_container mysqldump -uroot -proot_password database_name > /var/backups/mysql/$(date +%Y%m%d_%H%M%S).sql mysql_containerはデータベースコンテナの名前です 要件がなく、単にバックアップしたいだけの場合は、上記のコマンドを使用してスケジュールされたバックアップを実行できます。 小さな落とし穴: MySQL をバックアップするときに、 Crontab の最適化
docker exec mysql_container mysqldump -uroot -pmypassword database_name > /var/backups/mysql/$(date +%Y%m%d_%H%M%S).sql 次に、ファイルを現在のユーザーが実行できるようにします。 chmod 711 /var/backups/mysql/mysqldump.sh crontab -e コマンドを実行し、次のように変更します。 0 20 * * * /var/backups/mysql/mysqldump.sh これはより標準化されています。 MySQL バックアップの最適化 SQL ファイルは比較的大きいため、通常は圧縮されます。そうしないと、ディスク領域が大きくなりすぎてしまいます。 エクスポート mysqldump_date=$(日付 +%Y%m%d_%H%M%S) && \ docker exec mysql_container mysqldump -uroot -pmypassword database_name> /var/backups/mysql/$mysqldump_date.sql && \ /var/backups/mysql/$mysqldump_date.sql を gzip します。 /var/backups/mysql/ を見つけます -name "*.sql" -mtime +15 -exec rm -f {} \; データ復旧 誤って >mysql データベース database_name を作成します。 次に、最新のバックアップを復元します。バックアップを復元するコマンド: docker exec -i mysql_container mysql -uroot -proot_password database_name < /var/backups/mysql/20200619_120012.sql バックアップファイルのデータは復元されましたが、バックアップ時点以降のデータは復元されませんでした。 バイナリログ Binlog は、ID = 3 の行の money フィールドに 1 を追加するなど、データ変更のロジックを記録する MySQL のアーカイブ ログです。 > mysql バイナリログを表示します。 +---------------+-----------+-----------+ | ログ名 | ファイルサイズ | 暗号化 | +---------------+-----------+-----------+ | binlog.000001 | 729 | いいえ | | binlog.000002 | 1749 | いいえ | | binlog.000003 | 1087 | いいえ | +---------------+-----------+-----------+ 現在書き込まれているバイナリログを表示する mysql> マスターステータスを表示します\G; 新しい binlog ファイルを生成します。MySQL の以降のすべての操作は、新しい binlog ファイルに書き込まれます。通常、このコマンドは、データを復元するときに最初に実行されます。 mysql> ログをフラッシュする binlog ログを表示 mysql> 'binlog.000003' の binlog イベントを表示します。 ヒント: MySQL コンテナを初期化するときに、パラメータ --binlog-rows-query-log-events=ON を追加します。または、コンテナ内の /etc/mysql/my.cnf ファイルを変更し、パラメータ binlog_rows_query_log_events=ON を追加して、mysql コンテナを再起動します。これにより、元の SQL が binlog ファイルに追加されます。 データの回復 上記の例の文章を元に戻します。
まず、mysqlコンテナに入った後、/var/lib/mysqlディレクトリに切り替えて、binlogファイルの作成日を確認します。 /var/lib/mysql に移動します ls -l ... -rw-r----- 1 mysql mysql 729 6月19日 15:54 binlog.000001 -rw-r----- 1 mysql mysql 1749 6月19日 18:45 binlog.000002 -rw-r----- 1 mysql mysql 1087 6月19日 20:58 binlog.000003 ... ファイルの日付から、時刻は 2020-06-21 であり、binlog.000002 ファイルの最終更新時刻は 18:45 であることがわかります。したがって、午後 8 時のバックアップには binlog.000002 のデータが含まれているはずです。 復元コマンドの形式: mysqlbinlog [オプション] ファイル | mysql -uroot -proot_password データベース名 mysqlbinlog の共通パラメータ:
バックアップ データと binlog データを復元する前に、MySQL にログインして mysql> 'binlog.000003' の binlog イベントを表示します。 +---------------+-----+----------------+------------+--------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ログ名 | 位置 | イベント タイプ | サーバー ID | ログ終了位置 | 情報 | +---------------+-----+----------------+------------+--------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | binlog.000003 | 4 | Format_desc | 1 | 125 | サーバーバージョン: 8.0.20、Binlog バージョン: 4 | | binlog.000003 | 125 | 前のgtids | 1 | 156 | | | binlog.000003 | 156 | Anonymous_Gtid | 1 | 235 | @@SESSION.GTID_NEXT= 'ANONYMOUS' に設定 | | binlog.000003 | 235 | クエリ | 1 | 318 | 開始 | | binlog.000003 | 318 | Rows_query | 1 | 479 | # INSERT INTO `product_category` SET `name` = 'Bedding'、`create_time` = 1592707634、`update_time` = 1592707634、`lock_version` = 0 | | binlog.000003 | 479 | Table_map | 1 | 559 | table_id: 139 (hotel_server.product_category) | | binlog.000003 | 559 | Write_rows | 1 | 629 | table_id: 139 フラグ: STMT_END_F | | binlog.000003 | 629 | Xid | 1 | 660 | COMMIT /* xid=2021 */ | | binlog.000004 | 660 | Anonymous_Gtid | 1 | 739 | @@SESSION.GTID_NEXT= 'ANONYMOUS' に設定 | | binlog.000004 | 739 | クエリ | 1 | 822 | drop database hotel_server /* xid=26 */ | +---------------+-----+----------------+-----------+--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------- 上記のログによると、 mysqlbinlog --start-datetime=2020-06-19 20:00:00 --stop-position=660 /var/lib/mysql/binlog.000003 | mysql -uroot -proot_password datbase_name 範囲に位置 822 が含まれている場合は、 要約する MySQL のスケジュールされたバックアップは、実稼働環境では必要なタスクだからです。非常によく使われます。だからブログを書くのが待ちきれなかったんです。もちろん、同僚たちの助けにもとても感謝しています。この記事は、常に試行錯誤しながら記事を更新しているため、3日間かけて執筆されました。間違った知識ポイントを書き留めないようにしてください。もしこれがお役に立てば、ぜひフォローしてください!ありがとう。 上記は、MySQL スケジュール バックアップ タスクの詳細の簡単な分析です。MySQL スケジュール バックアップ タスクの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: Linux/Docker で System.Drawing.Common を使用する
>>: Vueのvue-tree-colorコンポーネントの組織構造図の事例を詳しく解説
問題の説明今日、ページ スタイルを変更していたときに、子要素にmargin-top設定したのに、子要...
MacBookにpython3.7.0をインストールする詳細な手順は、参考までに記録されています。具...
序文文字セットは、一連のシンボルとエンコード規則です。Oracle データベースでも MySQL デ...
現在、インターネット上でウェブサイトをコピーすることは非常に一般的です。では、他人が私たちのウェブサ...
目次前面に書かれた双方向暗号化エンコード/デコードAES_ENCRYPT/AES_DECRYPT D...
1. Dockerをインストールするyum -y install docker-ioインストールが完...
目次スタイルスコープスタイルモジュール状態駆動型動的CSS要約するスタイルスコープ注意事項:スタイル...
1つ。 Nexus プライベート サーバーを構築する理由は何ですか?社内の開発メンバーは全員外部ネッ...
会社の開発者がテスト環境で挿入ステートメントを実行すると、正常に実行されるまでに 10 秒以上かかり...
v-model は、入力とフォーム データ間、または 2 つのコンポーネント間の双方向データ バイ...
この記事では、MacでのMySQLインストールチュートリアルを参考までに紹介します。具体的な内容は次...
ドロップダウンボックス、テキストフィールド、ファイルフィールド 上半分はデモンストレーション効果、下...
border-radius:10px; /* すべての角は半径 10px で丸められます*/ bor...
序文smb は、クライアントとサーバー間の Web 接続および情報通信に使用できるプロトコルの名前で...
フロントエンドで画像をアップロードする原理は、入力 type="file" タグ...