導入 実稼働環境では、データの損失を回避するために、通常、データベースは定期的にバックアップされます。 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コンポーネントの組織構造図の事例を詳しく解説
Vmvare が仮想マシンのディスク サイズを設定した後、ディスク領域が不足していることがわかりまし...
目次序文仮想リストとは何ですか?デモ効果準備スクリーンの高さとボックスの高さ最適化要約する序文人気の...
シナリオ: 仮想マシンの Docker コンテナに最新バージョンの MySQL をインストールした後...
この記事では、MySQLバージョン5.7のインストール方法と使用方法、およびデータベースデータの保存...
1. ユーザーを作成します。注文: 'password' によって識別される ...
この記事では、例を使用して MySQL インデックスの原理と使用方法を説明します。ご参考までに、詳細...
目次1. スクリプトタグを使用してファイルをインポートする1. ローカルファイルをインポートする2....
1. ディスプレイボックス;要素にこのプロパティを設定すると、display:inline-bloc...
その特性は次のとおりです。方向アクティブな字幕のスクロール方向を設定するコードは次のとおりです。 &...
この記事では、ページング効果を実現するためのjquery+Ajaxの具体的なコードを参考までに紹介し...
この記事では、例を使用して、MySQL ビューの作成 (CREATE VIEW) と使用上の制限につ...
オリジナル: http://developer.yahoo.com/performance/rule...
1. nginxシェルスクリプトを保存するフォルダを作成する /usr/local/タスク/ngin...
目次序文需要分析MySQL ユーザー変数累積計算にMysqlユーザー変数を使用する要約するこの記事で...
0x00 はじめにWordPress は、世界で最も人気のある CMS システムです。PHP と M...