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

推薦する

Antd+vueは円形属性フォームの動的検証のアイデアを実現します

必要な項目をループして検証するために、クエリ フォームのいくつかのプロパティを実装したいと考えていま...

Linux yum コマンドを使用して mysql8.0 をインストールする方法の詳細なチュートリアル

1. 設置前によく掃除する rpm -pa | grep mysql または rpm -qa | g...

DockerにRedisをインストールし、パスワードを設定して接続する方法

Redis は分散キャッシュ サービスです。キャッシュは、大規模システムの開発やパフォーマンスの最適...

シンプルな広告ウィンドウを実現するjs

この記事では、参考までに、シンプルな広告ウィンドウを実装するためのjsの具体的なコードを紹介します。...

MySQL 5.7.18 マスタースレーブレプリケーション設定(マスター 1 台とスレーブ 1 台)チュートリアルの詳細な説明

1. 複製原理マスター サーバーはバイナリ ログ ファイルに更新を書き込み、ログのローテーションを追...

Google 翻訳ツール: 多言語ウェブサイトを素早く実装

Google Chinaは、ウェブサイトやブログを素早く簡単に多言語化できる翻訳ツールをリリースした...

antd+reactプロジェクトをviteに移行するためのソリューションの詳細な説明

Antd+react+webpackは、多くの場合、Reactテクノロジースタックに基づくフロントエ...

Vue 親コンポーネントが子コンポーネント関数の実装を呼び出す

Vue親コンポーネントは子コンポーネントの関数を呼び出す親コンポーネントはイベントを通じて子コンポー...

MySQL 5.7.18 のインストール中に MySQL サービスの起動に失敗する問題の解決策

MySQL は非常に強力なリレーショナル データベースです。しかし、初心者の中には、インストールや設...

MySQL 5.6.36 Windows x64 バージョンのインストールチュートリアルの詳細

1. 対象環境Windows 7 64ビット2. 材料(1)VC++2010リリースパッケージ(64...

MySQL が InnoDB テーブルが独立したテーブルスペースか共有テーブルスペースかを判断する方法の詳細な説明

序文InnoDB はデータをテーブルスペースに保存します。デフォルト設定では、初期サイズが 10 M...

MySQL学習エンジンの詳細な説明、説明、権限

エンジン導入InnodbエンジンInnodb エンジンは、データベース ACID トランザクションを...

mysql エラー 1045 (28000) - ユーザーへのアクセスが拒否される問題を解決する方法

問題の説明 (以下の説明は Windows 環境に限定されます): D:\develop\ide\m...

JavaScript ドキュメント オブジェクト モデル DOM

目次1. JavaScriptはページ内のすべてのHTML要素を変更できる1. IDでHTML要素を...

MySQL ジョイントテーブル更新デー​​タの詳細な例

1.MySQL UPDATE JOIN構文MySQL では、UPDATE ステートメントでJOIN句...