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 ネットワーク リクエスト ライブラリ

推薦する

MySQL にテキストと画像を保存する方法

Oracle の大きなテキスト データ型 Clob 長いテキスト型 (MySQL ではサポートされて...

虫眼鏡効果を実現するJavaScript

この記事では、虫眼鏡効果を実現するためのJavaScriptの具体的なコードを参考までに紹介します。...

MySQL (InnoDB) がデッドロックを処理する方法の詳細な説明

1. デッドロックとは何ですか?正式な定義は次のとおりです: 2 つのトランザクションが相手側で必要...

HTMLフォーム要素の詳しい解説(パート1)

HTML フォームは、さまざまな種類のユーザー入力を収集するために使用されます。 HTML フォー...

Linux シェル環境での Zabbix API の使用

Linux シェル環境で直接呼び出すことができます。公式 Web サイトによると、Zabbix のデ...

MySQL マスター スレーブ データが矛盾しています。プロンプト: Slave_SQL_Running: 解決策はありません

この記事では、MySQL マスターとスレーブ データ間の不一致の解決方法と、プロンプト「Slave_...

MySQL マスタースレーブレプリケーション切断の一般的な修復方法

目次01 問題の説明02 ソリューション1. 他のスレーブライブラリを見つけてすぐに置き換える2. ...

反応ループデータの実装(リスト)

まず、バックグラウンドから来るデータをシミュレートしてみましょう。ここでは、コードをわかりやすくする...

Vue3 における ref と reactive の詳細な説明と拡張

目次1. 参照と反応1. 反応的2.参照2. shallowRef と shallowReactiv...

流星効果を実現する JavaScript キャンバス

この記事では、JavaScriptキャンバスで流星の特殊効果を表示するための具体的なコードを参考まで...

jsBridgeの動作メカニズムを1つの記事で学ぶ

目次js 呼び出しメソッドアンドロイド1.jsはネイティブを呼び出す2. ネイティブコールjs iO...

レスポンシブ原則をシミュレートするための基礎コードの Vue 実装の例

目次1.Vue.js の機能: 2.Observer.js 関数 (データハイジャック): 3. C...

MySQL数千万の大規模データに対する30のSQLクエリ最適化テクニックの詳細な説明

1. クエリを最適化するには、テーブル全体のスキャンを避けてください。まず、where と orde...

CSS により、子コンテナが親要素を超えます (子コンテナは親コンテナ内で浮動します)

序文場合によっては、次の図のような浮動効果の要件が必要になります。 成し遂げる標準的な通常の状況では...

シンプルなページカウントダウンを実現するJavaScript

この記事では、参考までに、シンプルなページカウントダウンを実装するためのJavaScriptの具体的...