MySQLを安全にシャットダウンする方法

MySQLを安全にシャットダウンする方法

MySQL サーバーをシャットダウンする場合、シャットダウン方法に応じてさまざまな問題が発生する可能性があります。次の手順に従うと、問題の発生を減らすことができます。

1. コピーをやめる

特殊な状況下では、スレーブ ノードが間違った位置から開始しようとする場合があります。このリスクを軽減するには、まず io スレッドを停止して、新しいイベント情報が受信されないようにします。

mysql> スレーブ io_thread を停止します。

SQL スレッドがすべてのイベントを適用した後、SQL スレッドも停止します。

mysql>スレーブステータスを表示\G
mysql> スレーブ sql_thread を停止します。

こうすることで、io スレッドと sql スレッドの位置が一致し、リレー ログには実行されたイベントのみが含まれ、relay_log_info_repository 内の位置情報も最新のものになります。

マルチスレッド レプリケーションが有効になっているスレーブの場合は、レプリケーションをシャットダウンする前にギャップが埋められていることを確認してください。

mysql> スレーブを停止します。
mysql> start slave until sql_after_mts_gaps; #リレーログにギャップを適用
mysql> show slave status\G #sql_threadが停止していることを確認してください
mysql> スレーブを停止します。

2. 長時間実行中のトランザクションをコミット、ロールバック、または強制終了する

1 分間に多くのことが起こる可能性があり、シャットダウン時に InnoDB はコミットされていないトランザクションをロールバックする必要があります。トランザクションのロールバックは非常にコストがかかり、長い時間がかかる可能性があります。トランザクションのロールバックはデータ損失を意味する可能性があるため、閉じるときにトランザクションが開いていないことが理想的です。

読み取り/書き込みデータベースが閉じられている場合は、書き込み操作を事前に他のノードにルーティングする必要があります。まだトランザクションを受信して​​いるデータベースをシャットダウンする必要がある場合、次のクエリは 60 秒以上実行されたセッションに関する情報を出力します。この情報に基づいて、次のステップを決定します。

mysql> SELECT trx_id, trx_started, (NOW() - trx_started) trx_duration_seconds, id processlist_id, user, IF(LEFT(HOST, (LOCATE(':', host) - 1)) = '', host, LEFT(HOST, (LOCATE(':', host) - 1))) host, command, time, REPLACE(SUBSTRING(info,1,25),'\n','') info_25 FROM information_schema.innodb_trx JOIN information_schema.processlist ON innodb_trx.trx_mysql_thread_id = processlist.id WHERE (NOW() - trx_started) > 60 ORDER BY trx_started;
+--------+----------------------+-----------------------+----------+----------+-------+----------------------------+
| trx_id | trx_started | trx_duration_seconds | processlist_id | ユーザー | ホスト | コマンド | 時間 | info_25 |
+--------+----------------------+-----------------------+----------+----------+-------+----------------------------+
| 511239 | 2020-04-22 16:52:23 | 2754 | 3515 | dba | localhost | スリープ | 1101 | NULL |
| 511240 | 2020-04-22 16:53:44 | 74 | 3553 | root | localhost | クエリ | 38 | t1 set name="test" を更新 |
+--------+----------------------+-----------------------+----------+----------+-------+----------------------------+
セット内の 2 行 (0.00 秒)

3. プロセスリストをクリアする

mysql は切断され、シャットダウンしようとしています。手動でmysqlをサポートできます。

アクティブな接続とスリープ状態の接続を表示および終了するには、pt-kill を使用します。現時点では新しい書き込み接続は入ってこないはずです。読み取り接続のみを処理します。

pt-kill --host="localhost" --victims="all" --interval=10 --ignore-user="pmm|orchestrator" --busy-time=1 --idle-time=1 --print [--kill]

ここでは、特定のユーザーによって確立された接続を選択的に除外できます。

4. 最大フラッシュを完了するようにInnoDBを構成する

グローバル innodb_fast_shutdown=0 を設定します。
グローバル innodb_max_dirty_pages_pct を 0 に設定します。
グローバル innodb_change_buffering='none' を設定します。

innodb_fast_shutdown を無効にすると、UNDO ログが消去され、変更バッファがマージされるまで待機する必要があるため、シャットダウン プロセスに数分または数時間かかる場合があります。

シャットダウンを高速化するには、innodb_max_dirty_pages_pct=0 を設定し、次のクエリの結果を監視します。期待値は 0 ですが、MySQL にアクティビティがある場合、これが常に保証されるわけではありません。その後、結果が小さくなり続けない場合は、次の手順に進むことができます。

'%dirty%' のようなグローバル ステータスを表示します。

pmm モニタリングを使用すると、「innodb 変更バッファ」の図を表示できます。

5. バッファプールの内容をダンプする

グローバル innodb_buffer_pool_dump_pct=75 を設定します。
グローバル innodb_buffer_pool_dump_now を ON に設定します。
mysql> 'Innodb_buffer_pool_dump_status' のようなステータスを表示します。
+--------------------------------+--------------------------------------------------+
| 変数名 | 値 |
+--------------------------------+--------------------------------------------------+
| Innodb_buffer_pool_dump_status | バッファー プールのダンプが 200429 14:04:47 に完了しました |
+--------------------------------+--------------------------------------------------+
セット内の1行(0.01秒)

起動時にダンプされたコンテンツをロードするには、パラメータ innodb_buffer_pool_load_at_startup の設定を確認します。

6. ブラシログ

ログをフラッシュします。

これで、mysql をシャットダウンできます。

ほとんどの場合、停止コマンドを実行するだけで、MySQL がシャットダウンして再起動するのは正常です。時々問題が起こります。

以上がMySQLを安全にシャットダウンする方法の詳細です。MySQLを安全にシャットダウンする方法の詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • 年末ですが、MySQL パスワードは安全ですか?
  • MySQLデータベースの名前を高速かつ安全に変更する方法(3種類)
  • MySQLプロセスを安全かつ適切にシャットダウンする方法
  • MySQLデータのセキュリティを確保するための提案
  • MySQLインスタンスを安全にシャットダウンする方法
  • MySQL セキュリティ管理の詳細

<<:  Dockerはプロセス操作を管理するためにSupervisorを使用する

>>:  ネイティブJSでマウススライドによる愛の拡散効果を実現

推薦する

JSに関する7つの面接の質問、あなたはいくつ正しく答えられますか

序文JavaScript では、これは関数呼び出しコンテキストです。この動作が非常に複雑であるからこ...

MySQL の遅いクエリを見つける方法

序文誰もが日常業務で SQL の最適化を経験したことがあると思います。したがって、最適化の前に、遅い...

スクロールラグの問題を解決するためのオーバーフロースクロールの詳細な説明

序文div またはモジュールに overflow: scroll 属性を使用すると、iOS フォンで...

mysql5.7.24 バージョンのインストール手順と解凍時に発生した問題の概要

1. ダウンロード参考: 2. D:\MySQL\mysql-5.7.24 などの固定の場所に解凍し...

React Native環境のインストールプロセス

react-native インストールプロセス1.npx react-native init Awe...

HTML、CSS、JSコメントの標準的な使用法の概要

必要なコメントを追加することは、責任感と道徳心のあるフロントエンド開発者が持つべき良い習慣であり、コ...

CSSは下部のタップバー機能を実装します

現在多くの携帯電話には、下部のタブバーを切り替える機能があります。私も最近、同様の機能を見つけました...

Linux システムでの virtuoso データベースの詳細なインストールと使用

最近、リンク データについていくつか調査していて、rdf データベースを使用する必要があったため、v...

CSSを使用して中央に固定された2つの列と適応型列を実現する方法

1. 絶対位置とマージンを使用するこの方法の原則は、左側と右側をドキュメントの流れから外れるように配...

dockerfile-maven-plugin 使用ガイドの概要

目次pom 構成Setting.xml 構成ログインステータスログインが必要ですログインは必要ありま...

vue cli3は環境ごとにパッケージ化の手順を実装します

cli3 でビルドされた vue プロジェクトは、ゼロ構成ファイルとして知られています。パッケージ化...

React-Native スクリーンショットコンポーネント react-native-view-shot の紹介と使い方のまとめ

目次1. 現象2. 解決策3. 要約: 1. 現象1. 要件: 特定の表示ページをキャプチャしてアル...

Windows10にmysql5.7.18をインストールするチュートリアル

このチュートリアルでは、MySQL 5.7.18のインストールと設定方法を参考までに紹介します。具体...

MySQL 5.7.17 圧縮パッケージのインストールと設定方法のグラフィックチュートリアル

インターネット上にはMySQL 5.7.17のインストールチュートリアルがほとんどなく不十分なので、...

JavaScript配列の一般的なメソッドの概要

目次1. JavaScriptで配列を作成する方法2. 配列メソッドの概要3. 方法の詳細な説明1....