MySQL シリーズ 11 ログ

MySQL シリーズ 11 ログ

チュートリアルシリーズ

MySQL シリーズ: MySQL リレーショナル データベースの基本概念
MySQLシリーズのMariaDBサーバーのインストール
MySQL シリーズ II マルチインスタンス構成
MySQL シリーズ 3 基礎
MySQL シリーズ 4 SQL 構文
MySQLシリーズ5つのビュー、ストアド関数、ストアドプロシージャ、トリガー
MySQL シリーズ 6 のユーザーと認証
MySQL シリーズ 7 MySQL ストレージ エンジン
MySQL シリーズ 8 MySQL サーバー変数
MySQL シリーズ 9 MySQL クエリ キャッシュとインデックス
MySQL シリーズ 10 同時実行制御を実装するための MySQL トランザクション分離
MySQL シリーズ 11 ログ
MySQL シリーズ 12 バックアップとリカバリ
MySQL シリーズ 13 MySQL レプリケーション
MySQL シリーズ 14 MySQL 高可用性実装
MySQLシリーズ15 MySQL共通設定とパフォーマンスストレステスト

1. SQLコマンド履歴

~/.mysql_history mysqlで実行されたコマンド履歴を記録します。

トランザクションログ

トランザクションログ: トランザクションストレージエンジンは、自身を管理し、使用します。

トランザクションがコミットされたがまだディスクに保存されていない場合は、トランザクション ログに記録されます。この時点でシステムの電源が切れると、コミットされたトランザクションは自動的にやり直され (REDO ログ)、再起動後にディスクに書き込まれます。トランザクションがコミットされていない場合は、電源障害と再起動後に元に戻す操作 (UNDO ログ) が実行されます。

関連変数

MariaDB [school]> SHOW VARIABLES LIKE 'innodb_log%';
+---------------------------+-------------+
| 変数名 | 値 |
+---------------------------+-------------+
| innodb_log_block_size | 512 | -- ブロック サイズ | innodb_log_buffer_size | 8388608 | -- キャッシュ サイズ | innodb_log_file_size | 1073741824 | -- 各ログ ファイルのサイズ | innodb_log_files_in_group | 3 | -- ログ グループ メンバーの数、つまりファイルの数 | innodb_log_group_home_dir | ./ | -- データ ディレクトリを基準としたトランザクション ファイル パス +---------------------------+----------------------------+

innodb_log_file_size のデフォルト値は 5M で、innodb_log_files_in_group のデフォルト値は 2 です。これら 2 つの値を増やすことを強くお勧めします。

トランザクション操作のデータがトランザクション ログ ファイルの合計サイズより大きい場合、ROLLBACK を実行すると元に戻すことができますが、データ ファイルが占有されるため、OPTIMIZE TABLE コマンドを使用してデータ領域を解放する必要があります。

TRUNCATE を使用してテーブル レコードを削除すると、占有領域を削減できます。DELETE コマンドではディスク領域は解放されません。領域を解放する必要がある場合は、OPTIMIZE コマンドを使用してデフラグし、領域を解放する必要があります。

注意: innodb_log_file_size を変更する場合は、まず元のログ ファイルを削除する必要があります。

3. エラーログ

エラー ログには次の内容が記録されます。

  1. mysqld の起動とシャットダウン中に出力されるイベント情報
  2. mysqld 操作中に生成されたエラー メッセージ
  3. イベントスケジューラがイベントを実行したときに生成されるログ情報
  4. マスタースレーブレプリケーションアーキテクチャでスレーブ上でスレーブスレッドを開始するときに生成されるメッセージ

関連変数

MariaDB [school]> SHOW GLOBAL VARIABLES LIKE 'log_error'; #エラーログファイルのパス+--------------+------------------------------+
| 変数名 | 値 |
+---------------+------------------------------+
| log_error | /var/log/mariadb/mariadb.log |
+---------------+------------------------------+

log_warnings=1|0 0デフォルト値 1 (はい): 警告情報をエラーログファイルに記録するかどうか

4. クエリログ

ユーザーの操作ログを記録します。通常は有効にしないことを推奨します。

MariaDB [school]> 'general_log%' のような変数を表示します。
+------------------+--------------+
| 変数名 | 値 |
+------------------+--------------+
| general_log | OFF | -- 一般ログのオン/オフを切り替えます。デフォルトではオフです | general_log_file | centos7.log | -- 一般ログ ファイルのファイル名、/var/lib/mysql/HOSTNAME.log
+------------------+--------------+
MariaDB [school]> 'log_output' のような変数を表示します。  
+---------------+-------+
| 変数名 | 値 |
+---------------+-------+
| log_output | FILE | -- ログの保存方法 (TABLE|FILE|NONE)
+---------------+-------+

mysql.general_log: テーブルにはクエリログが格納されます。

5. スロークエリログ

指定された時間よりも長くクエリを実行する操作を記録します。

1. 遅いクエリ関連の変数

MariaDB [school]> SHOW VARIABLES LIKE 'slow_query%';    
+---------------------+------------------+
| 変数名 | 値 |
+---------------------+------------------+
| slow_query_log | OFF | -- スロークエリログを有効または無効にする | slow_query_log_file | centos7-slow.log | -- スロークエリログファイル+---------------------+------------------+
MariaDB [school]> 'long_query_time' のような変数を表示します。
+-----------------+-----------+
| 変数名 | 値 |
+-----------------+-----------+
| long_query_time | 10.000000 | -- スロークエリしきい値(秒単位)。クエリ時間が 10 を超えると、スロークエリ ログに記録されます。 +-----------------+-----------+
MariaDB [school]> 'log_slow%' のような変数を表示します。
+---------------------+-------+
| 変数名 | 値 |
+---------------------+-------+
| log_slow_rate_limit | 1 | -- いくつのクエリがログに記録されますか? MariaDB 固有 | log_slow_verbosity | | -- ログに記録されるコンテンツの詳細レベル (Query_plan、explain)
+---------------------+-------+
MariaDB [school]> 'log_queries_not_using_indexes' のような変数を表示します。
+---------------------------------+-------+
| 変数名 | 値 |
+---------------------------------+-------+
| log_queries_not_using_indexes | OFF | -- インデックスクエリを使用せず、フルテキストスキャンを使用するステートメントをログに記録します。デフォルトでは無効になっていますが、有効にすることをお勧めします +------------------------------+-------+

log_slow_filter : クエリ結果に基づいてフィルタリングする

  • 管理者
  • ファイルソート
  • ディスク上のファイルソート
  • フルジョイン
  • フルスキャン
  • クエリキャッシュ
  • クエリキャッシュミス
  • tmp_テーブル
  • ディスク上のtmpテーブル

2. 補足: profilingを使用してクエリステートメントで使用された詳細な時間を追跡する

MariaDB [school]> SHOW VARIABLES LIKE 'profiling';
+---------------+-------+
| 変数名 | 値 |
+---------------+-------+
| プロファイリング | OFF | -- 有効または無効、デフォルトでは無効+---------------+-------+
MariaDB [school]> SET profiling=ON; #クエリステートメント追跡機能をオンにしますMariaDB [school]> SHOW profiles; #クエリステートメント実行の時間リスト+----------+------------+------------------------------------------------------------+
| Query_ID | 期間 | クエリ |
+----------+-------------+----------------------------------------------------------+
| 1 | 0.00024497 | 学生から*を選択 |
| 2 | 0.00038528 | stuid = 2 の場合、stuid、name、age を students から選択します |
+----------+-------------+----------------------------------------------------------+
MariaDB [school]> SHOW profile FOR query 2; #指定した番号のSQL文の詳細な実行プロセスを照会する+----------------------+----------+
| ステータス | 期間 |
+----------------------+----------+
| 開始 | 0.000035 |
| オープニングテーブル | 0.000003 |
| テーブルを開いた後 | 0.000006 |
| クエリ終了 | 0.000003 |
| テーブルのクローズ | 0.000002 |
| アイテムを解放 | 0.000011 |
| ステータスを更新中 | 0.000006 |
| クリーンアップ | 0.000001 |
+----------------------+----------+

6. バイナリログ

コミットされたトランザクションでデータの変更を引き起こした、または潜在的にデータの変更を引き起こした SQL ステートメントを記録し、ストレージ エンジンの種類に関係なく、ログ ファイルでイベントを「再生」してデータのコピーを生成します。

バイナリ ログを有効にします。デフォルトでは無効になっています。バイナリ ログとデータは別々に保存されます。

バイナリファイルのログ機能を有効にするには、my.cnfの[mysqld]の下にog_bin[=/path/somefile]を追加します。

デフォルトのバイナリ ログはデータベース ディレクトリにあります。mariadb mariadb-bin.000001はバイナリ ログ データ ファイルであり、 mariadb-bin.indexバイナリ ログ インデックス ファイルです。

1. バイナリログを記録する 3 つの方法:

  • ステートメント記録方式に基づいて、データを変更する各ステートメントがスペースを節約するためにステートメントとして記録されます。システムはデフォルトでこのモードに設定されていますが、隠れたリスクがあるため、使用することはお勧めしません。
  • 行記録方式に基づいて、行内の各変更は、それを変更したステートメントとして記録されます。ログの量は大きくなりますが、データのセキュリティ保護は非常に高くなります。
  • 混合モード: 混合、システムがどの方法を使用するかを決定します
MariaDB [(なし)]> SHOW VARIABLES LIKE 'binlog_format';  
+---------------+-----------+
| 変数名 | 値 |
+---------------+-----------+
| binlog_format | STATEMENT | -- ログモード。システムのデフォルトはステートメントベースモードです+---------------+-----------+
SET binlog_format='ROW|STATEMENT|MIXED'; -- バイナリログ記録モードを変更する

2. バイナリログ関連の変数

MariaDB [(なし)]> SHOW MASTER|BINARY LOGS; -- MariaDB によって管理されるバイナリ ログ ファイルのリストを表示します。 +--------------------+-----------+
| ログ名 | ファイルサイズ |
+--------------------+------------+
| mariadb-bin.000002 | 290 |
| mariadb-bin.000003 | 264 |
| mariadb-bin.000004 | 529038 |
| mariadb-bin.000005 | 245 |
+--------------------+------------+
MariaDB [(なし)]> SHOW MASTER STATUS; -- 使用中のバイナリログファイルを表示します +--------------------+----------+--------------+------------------+
| ファイル | 位置 | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| mariadb-bin.000005 | 245 | | |
+--------------------+----------+--------------+------------------+
MariaDB [(なし)]> SHOW BINLOG EVENTS IN 'mariadb-bin.000004' FROM 1 LIMIT 2,3\G -- バイナリファイル内の指定されたコンテンツを表示します
MariaDB [(なし)]> SHOW VARIABLES LIKE 'sql_log_bin'; -- バイナリログを記録するかどうか。デフォルトはON
MariaDB [(なし)]> SHOW VARIABLES LIKE 'log_bin'; --ファイルの場所を指定します。デフォルト値は OFF で、バイナリ ログ機能が有効になっていないことを意味します。上記の 2 つの項目は両方とも有効にする必要があります。MariaDB [(なし)]> SHOW VARIABLES LIKE 'max_binlog_size';
+-----------------+------------+
| 変数名 | 値 |
+-----------------+------------+
| max_binlog_size | 1073741824 | -- バイナリログファイルの最大サイズ。最大値に達すると自動的にロールオーバーされます。デフォルト値は 1G です。
+-----------------+------------+
MariaDB [(なし)]> SHOW VARIABLES LIKE 'sync_binlog';    
+---------------+-------+
| 変数名 | 値 |
+---------------+-------+
| sync_binlog | 0 | -- バイナリログのインスタント同期ディスク機能を有効にするかどうかを設定します。デフォルトは 0 で、オペレーティングシステムがログをディスクに同期する責任を負います+---------------+-------+
MariaDB [(なし)]> 'expire_logs_days' のような変数を表示します。
+------------------+-------+
| 変数名 | 値 |
+------------------+-------+
| expire_logs_days | 0 | -- バイナリ ログが自動的に削除されるまでの日数。 デフォルト値は 0 で、自動削除は行われません。 +------------------+-------+

3.mysqlbinlogコマンド

  • バイナリログ用クライアントコマンドツール
  • --start-position=# 開始位置を指定します
  • --stop-position=# 終了位置を指定します
  • --start-datetime=(YYYY-MM-DD hh:mm:ss) は開始時刻を指定します
  • --stop-datetime=(YYYY-MM-DD hh:mm:ss) は終了時刻を指定します
  • --base64-output=デコード行
  • -v |-vv |-vvv |-vvvv 詳細情報を表示
[root@centos7 mysql]# mysqlbinlog --start-position=528864 --stop-position=529019 mariadb-bin.000004 --base64-output=デコード行 -v
# 528864 で
#180611 20:59:46 サーバー ID 1 end_log_pos 528992 クエリ thread_id=29 exec_time=0 error_code=0
`school`/*!*/ を使用します。
タイムスタンプを 1528721986/*!*/ に設定します。
INSERT students(StuID,Name,Age,Gender) VALUES (26,'Tom',22,'M') #データを変更するSQLステートメント /*!*/;

事件発生日時: 180611 20:59:46
イベントが発生したサーバー ID: サーバー ID 1
イベントの終了位置: end_log_pos 528992
イベントタイプ: クエリ
イベントが発生したときにサーバー上でこのイベントを実行したスレッドの ID: thread_id=29
ステートメントのタイムスタンプとバイナリ ファイルに書き込まれた時間の差: exec_time=0
エラーコード: error_code=0
イベント内容: 
GTID: グローバルトランザクションID、MySQL 5.6およびMariaDB 10以降の固有の属性: GTID

mysqlbinlog mariadb-bin.000001 > file.sqlコマンドを使用してSQLファイルにリダイレクトし、 mysql -uroot -p < file.sqlコマンドを使用してデータを直接インポートし、バックアップと復元機能を実現します。

4. バイナリログ管理

MariaDB [(なし)]> PURGE BINARY LOGS TO 'mariadb.000002'; -- 02 を削除します。注意: 02 は削除されませんMariaDB [(なし)]> PURGE BINARY LOGS BEFORE '2018-01-23'; -- 2018-01-23 より前のログを削除しますMariaDB [(なし)]> PURGE BINARY LOGS BEFORE '2017-03-22 09:25:30';
MariaDB [(なし)]> RESET MASTER; -- すべてのバイナリログを削除し、インデックスファイルをリセットします。MariaDB [(なし)]> FLUSH LOGS; -- ログローリングを手動でトリガーします。

7. リレーログ

relay log : マスター スレーブ レプリケーション アーキテクチャでは、スレーブ サーバーはマスター サーバーのバイナリ ログから読み取られたイベントを保存するために使用されます。

要約する

この記事はこれで終わりです。少しでもお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL でスロークエリのログ記録を有効にする方法
  • mysql のスロークエリを有効にする方法 mysql のスロークエリのログを有効にする方法
  • MySQL ログの設定と表示方法
  • MySQL ログファイルの詳細

<<:  Docker の NFS-Ganesha イメージを使用して NFS サーバーを構築する詳細なプロセス

>>:  Vue ネットワーク リクエスト スキーム ネイティブ ネットワーク リクエストと js ネットワーク リクエスト ライブラリ

推薦する

Vant+postcss-pxtoremはブラウザ適応機能を実装します

Remレイアウトの適応Vant のスタイルでは、デフォルトで px を単位として使用します。rem ...

Vue router-viewとrouter-linkの実装原理

使用 <div id="アプリ"> <router-link ...

VMWARE で Centos8 仮想マシンをコピーすることによって発生する IP 損失の問題の解決策

VMwareでcentos8サービスをインストールしてコピーすると、次の問題が発生します。 コピー前...

React Native の基本原則の深い理解 (Bridge of React Native)

この記事では、React Native の基本をすでに理解していることを前提とし、ネイティブと Ja...

MySQL の接続数が多すぎるエラーの原因と解決策

目次概要本日正午、開発およびテスト環境の MySQL サービスで接続数が多すぎるというエラーが報告さ...

Vue プロジェクトでの支払い機能の実装 (WeChat 支払いと Alipay 支払い)

目次プロジェクトにおける一般的な支払い方法Alipay決済微信ペイプロジェクトにおける一般的な支払い...

Canonical が Flutter で Linux デスクトップ アプリを有効化 (推奨)

Google の Flutter の目標は、どのプラットフォームを使用していても、ネイティブの速度...

Linux でディスク IO を表示し、読み取りと書き込みで高い IO を占有するプロセスを見つけます。

背景 - オンラインアラートオンライン サーバーがアラームを発し、ディスク使用率 disk.util...

ウェブページにプレーヤーを埋め込む埋め込み要素の自動開始が false 無効

最近、仕事でサウンド ファイルを再生するために Web ページにプレーヤーを埋め込む必要に迫られまし...

Linux で ss コマンドと zabbix を組み合わせてソケットを監視する方法の詳細な説明

目次序文1. ssコマンド2. Zabbix監視マシンの全体的なソケットステータス2.1. スクリプ...

EF (Entity Framework) の挿入または更新データ エラーの解決方法

エラー メッセージ:ストアの更新、挿入、または削除ステートメントが予期しない行数 (0) に影響を与...

VMware での Ubuntu 16.04 イメージの完全インストール チュートリアル

この記事では、VMware 12でのUbuntu 16.04イメージのインストールチュートリアルを参...

Linux suse11でルートパスワードを忘れた場合に変更する方法の簡単な分析

SUSE Linuxでルートパスワードを忘れた場合の解決方法SUSE (Linux オペレーティング...

Windows 2019 アクティベーション チュートリアル (Office2019)

数日前、Server2019の正式版がリリースされたことを知り、面白半分でインストールしてみることに...