導入 実稼働環境では、データの損失を回避するために、通常、データベースは定期的にバックアップされます。 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コンポーネントの組織構造図の事例を詳しく解説
目次プロセスコミュニケーションプロセス間の双方向通信問題要約するサードパーティのデータ サプライヤー...
シェルで変数が空かどうかを判断する方法シェルプログラミングでは、パラメータのエラーチェック項目に、変...
Dockerのインストール依存パッケージをインストールする sudo yum install -y ...
この記事では、参考までに、csv中国語データをNavicat for SQLiteにインポートする具...
html <div class="スピナー"></div&g...
2018 年の最新 MySQL 5.7 の詳細なインストールと設定は 4 つのステップに分かれており...
目次1. サブクエリの定義2. サブクエリの分類1. スカラーサブクエリ: 2. MySQLサブクエ...
目次1. 問題の説明2. 問題分析3. 解決策解決策1: ディレクトリを作成する解決策2: 構成ファ...
今回は、私自身の開発経験を踏まえて、以下の観点で関連内容を解説します。ページからコンポーネントにデー...
目次node.js+nvm+npm を設定するnpmスイッチタオバオミラーVue.jsをインストール...
イメージの構築は、DevOps プロセスにおいて非常に重要なプロセスです。一般的に、イメージの構築と...
目次概要Canvas API: グラフィックスの描画パス線種矩形アーク文章グラデーションと画像の塗り...
ブラウザでのページのレンダリング時間をできるだけ短縮するにはどうすればよいでしょうか? この記事は、...
序文いわゆるファジークエリとは、ユーザーの完全な入力やすべての入力情報がなくてもクエリサービスを提供...
目次1. JavaScriptで配列を作成する方法2. 配列メソッドの概要3. 方法の詳細な説明1....