本当にMySQLのヘルプコマンドを使用していますか| mysqlシステムライブラリの包括的な理解

MySQLのヘルプ情報は重要ですか?それほど重要ではありません!それは役に立ちますか?持ってる!まるで家でシャワーを浴びていると、突然誰かがあなたの家のドアベルを押し続け、あなたの心臓発作を抑えることができます。

DBAの同僚の仲間は、データベースの日常のメンテナンス中に特定のSQLや特定の管理コマンドのスペルを突然忘れた場合、最初に考えるのは、「helpxxx」ステートメントを使用してMySQLビルトインを表示することだと思います。ヘルプ情報。

しかし、そのようなシナリオに多かれ少なかれ遭遇できる必要があります。文の特定のスペルを思い出せない、漠然と数文字しか思い出せない、または確認したいヘルプ情報を明確に知っているが、わからないヘルプ情報のクエリに使用されるキーワード(例:リレーログを解析するSQLステートメントを表示したい)。この時に何をしますか?慌てる必要はありません。この記事で答えがわかります。

何をすべきかを知りたい場合は、MySQLが提供するヘルプシステムを完全に理解する必要があります。以下では、Lushanの素顔を紹介します。

01

ヘルプステートメントの情報はどこから来たのですか

MySQL Serverには、サーバー側でヘルプ情報を格納するための4つのテーブルが用意されています(ヘルプ構文を使用して表示されるヘルプ情報)。これらのテーブルは、mysqlシステム辞書ライブラリの下にあります。ヘルプステートメントは、次のように、これらのテーブルからデータを取得してクライアントに返すことです。

  • help_category:ヘルプトピックのカテゴリに関する情報

  • help_keyword:ヘルプトピックに関連するキーワード情報

  • help_relation:キーワード情報とトピック情報の間のマッピングを支援します

  • help_topic:ヘルプトピックの詳細な内容

02

ヘルプステートメント情報が生成されたとき

これらのテーブルは、データベースの初期化時にshare / fill_help_tables.sqlファイルをロードすることによって作成されます。MySQLがUnixでバイナリまたはソースコードディストリビューションを使用してインストールされている場合、ファイルは直接インポートされ、データディレクトリの初期化時にヘルプテーブルの内容を初期化します。LinuxのRPMディストリビューションまたはWindowsのバイナリディストリビューションの場合、ヘルプテーブルの内容の初期化は、MySQLインストールプロセスの一部として実行されます。

  • バイナリディストリビューションを使用してMySQLをアップグレードする場合、ヘルプテーブルは自動的にアップグレードされませんが、次のように手動でアップグレードできます(share / fill_help_tables.sqlファイルを手動でロードします)。shell> mysql -u root mysql <fill_help_tables.sql

  • ヘルプテーブルをアップグレードするために、いつでも最新のfill_help_tables.sqlを入手できます。http://dev.mysql.com/doc/index-other.htmlからMySQLバージョンの正しいファイルをダウンロードします

03

ヘルプ詳細ヘルプ情報ストレージテーブル

ヘルプ構文は、すべてのトピックのトップレベルカテゴリまたはサブカテゴリの表示、ヘルプトピックの下のキーワードの表示、特定のトピックの下の一意のキーワードを使用したヘルプ情報の表示の3つのパターンのクエリの一致をサポートします。これらの情報はhelp_category、help_topic、 help_keywordテーブルとhelp_relationテーブルは、help_topicテーブルとhelp_keywordテーブルの情報のマッピング情報を格納します。以下は、これらのテーブルの基本的な知識のための簡単な科学の普及です。

(1)help_category

このテーブルは、ヘルプトピックをクエリするためのカテゴリ情報を提供します。各カテゴリは、N個のヘルプトピック名またはトピックサブカテゴリ名に対応します。クエリテーブルの情報から、次のように確認することもできます。

root@localhost : mysql 01:10:59> select * from help_category;
+------------------+-----------------------------------------------+--------------------+-----+
| help_category_id | name                                          | parent_category_id | url |
+------------------+-----------------------------------------------+--------------------+-----+
|                1 | Geographic                                    |                  0 |     |
|                2 | Polygon properties                            |                 35 |     |
......
|               39 | Functions                                     |                 36 |     |
|               40 | Data Definition                               |                 36 |     |
+------------------+-----------------------------------------------+--------------------+-----+
40 rows in set (0.00 sec)

テーブルフィールドの意味

  • help_category_id:テーブル内のヘルプトピック名またはサブカテゴリ名のレコードID

  • 名前:ヘルプトピックのカテゴリ名または単語のカテゴリ名

  • parent_category_id:テーブル内の親サブジェクトカテゴリ名のレコードID。一部のサブジェクトカテゴリには子サブジェクトカテゴリがあります。たとえば、ほとんどのサブジェクトカテゴリは、実際にはコンテンツカテゴリのサブカテゴリです(最上位カテゴリと第1レベルの親カテゴリです)。一部は地理的特徴カテゴリ(第2レベルの親カテゴリ)のサブカテゴリであり、一部は機能(第2レベルの親カテゴリ)のサブカテゴリです。

  • url:公式MySQLマニュアルのリンクアドレスに対応

(2)help_keyword

この表は、次のように、ヘルプトピックに関連するクエリ文字列情報を提供します。

root@localhost : mysql 01:12:07> select * from help_keyword limit 5;
+-----------------+---------+
| help_keyword_id | name    |
+-----------------+---------+
|             681 | (JSON   |
|             486 | ->      |
|             205 | ->>     |
|             669 | <>      |
|             521 | ACCOUNT |
+-----------------+---------+
5 rows in set (0.00 sec)

テーブルフィールドの意味

  • help_keyword_id:ヘルプキーワード名のIDがテーブルに記録されます

  • 名前:ヘルプキーワード文字列

(3)help_relation

このテーブルは、クエリヘルプキーワード情報とトピック詳細情報の間のマッピングを提供し、次のようにクエリhelp_keywordテーブルとhelp_topicテーブルを相互に関連付けるために使用されます。

root@localhost : mysql 01:13:09> select * from help_relation limit 5;
+---------------+-----------------+
| help_topic_id | help_keyword_id |
+---------------+-----------------+
|             0 |               0 |
|           535 |               0 |
|           294 |               1 |
|           277 |               2 |
|             2 |               3 |
+---------------+-----------------+
5 rows in set (0.00 sec)

テーブルフィールドの意味

  • help_topic_id:ヘルプトピックの詳細情報ID。ID値はhelp_topicテーブルのhelp_topic_idと同じです。

  • help_keyword_id:ヘルプトピックのキーワード情報ID。ID値はhelp_keywordテーブルのhelp_keyword_idと同じです。

(4)help_topic

この表は、クエリヘルプトピックの特定のキーワードの詳細な内容(詳細なヘルプ情報)を次のように提供します。

root@localhost : mysql 01:13:31> select * from help_topic limit 1\G;
*************************** 1. row ***************************
help_topic_id: 0
        name: JOIN
help_category_id: 28
 description: MySQL supports the following JOIN syntaxes for the table_references
part of SELECT statements and multiple-table DELETE and UPDATE
statements:
table_references:
escaped_table_reference [, escaped_table_reference] ...
escaped_table_reference:
table_reference
| { OJ table_reference }
......
         url: http://dev.mysql.com/doc/refman/5.7/en/join.html
1 row in set (0.00 sec)

テーブルフィールドの意味

  • help_topic_id:テーブルレコードのヘルプトピックの詳細情報に対応するID

  • name:ヘルプトピックによって指定されたキーワードの名前。これは、help_keywordテーブルのnameフィールドの値と同じです。

  • help_category_id:help_categoryテーブルのhelp_category_idフィールドの値と等しいヘルプトピックカテゴリID

  • 説明:ヘルプトピックの詳細情報(通常、ヘルプ情報を照会するときに本当に見たいものは次のとおりです。たとえば、特定の文の文法と注意事項の使用方法を教えてください)

  • 例:ヘルプトピックのサンプル情報(ここでは、XX文の使用方法の例を示しています)

  • url:このヘルプトピックは、MySQLの公式オンラインマニュアルのURLリンクアドレスに対応しています。

04

ヘルプステートメントの使用例

前述したように、ヘルプ構文は3つのパターンでクエリの照合をサポートします。そのため、記事の冒頭で提起した問題に戻ると、文の特定のスペルを思い出せません。数文字しか覚えていないか、確認したいヘルプ情報をはっきりと言うことができますが、何を使用すればよいかわかりません。ヘルプ情報を照会するためのキーワード(例:リレーログを解析するSQLステートメントを表示する場合)。この時に何をしますか?

(1)数文字しか覚えていない場合はどうすればよいですか

MySQLが提供するヘルプ情報には、サブジェクト名を指定せずに、クエリのサブジェクトキーワードを直接指定できます。SQL句キーワードを数文字記録する場合は、これらの文字を使用して数回試すことができます。 、次のように:

root@localhost : performance_schema 10:43:40> help relay  # 尝试第一次
Nothing found
Please try to run 'help contents' for a list of all accessible topics
root@localhost : performance_schema 10:44:00> help relay logs  # 尝试第二次
Nothing found
Please try to run 'help contents' for a list of all accessible topics
root@localhost : performance_schema 10:44:06> help relaylogs  # 尝试第三次
Nothing found
Please try to run 'help contents' for a list of all accessible topics
root@localhost : performance_schema 10:44:09> help relaylog  # 尝试第四次,oy,成功了
Name: 'SHOW RELAYLOG EVENTS'
Description:
Syntax:
SHOW RELAYLOG EVENTS
[IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]  # 原来是这样用的
Shows the events in the relay log of a replication slave. If you do not
specify 'log_name', the first relay log is displayed. This statement
has no effect on the master.
URL: http://dev.mysql.com/doc/refman/5.7/en/show-relaylog-events.html

PS:これは、実際には、help_keywordテーブルのnameフィールドと一致するようにhelpステートメントによって指定されたキーワードと同等です。レコードが返される場合は、help_category、help_keyword、help_relation、およびhelp_topicの4つのテーブルを使用して、複雑な関連クエリを実行し、help_topicテーブルを右結合します。名前フィールドで、一意のレコードが返されるとヘルプ情報が返されます。複数の行が返されると、キーワードリストが返されます。次の特定のキーワードを使用して、特定のヘルプ情報を照会します。次に例を示します。

root@localhost : performance_schema 11:05:06> help where
.....
where <item> is one of the following
topics:  # 使用where作为关键字返回了一个关键字列表,表示where还会与这三个关键字组合使用,where的详细用法从列表中随便挑选一个关键字即可看到
DELETE
HANDLER
UPDATE
root@localhost : performance_schema 11:09:05> help delete
Name: 'DELETE'
Description:
Syntax:
DELETE is a DML statement that removes rows from a table.
Single-Table Syntax
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
[PARTITION (partition_name,...)]
[WHERE where_condition]  # where关键字的用法在这里
[ORDER BY ...]
[LIMIT row_count]
......


(2)どうしたらいいか覚えていない

何も覚えていない場合は、最も愚かな方法であるカーペット検索しか使用できません。

まず、ヘルプ文を入力するために数文字を入力します。例:help xxx

root@localhost : performance_schema 10:09:49> help xxx;
Nothing found  # 这句告诉你帮助信息没找到
# 不要紧,下面这句告诉你,用help contents语句来列出所有的可能的帮助主题信息
Please try to run 'help contents' for a list of all accessible topics

次に、すべてのサブジェクトカテゴリを表示します

root@localhost : performance_schema 10:31:47> help contents
You asked for help about help category: "Contents"
For more information, type 'help <item>', where <item> is one of the following
categories:
Account Management
Administration  # 通过主题或主题类别名称,大致判定一下,查看relaylog事件内容的语句应该是属于管理语句
Compound Statements
Data Definition
Data Manipulation
Data Types
Functions
Functions and Modifiers for Use with GROUP BY
Geographic Features
Help Metadata
Language Structure
Plugins
Procedures
Storage Engines
Table Maintenance
Transactions
User-Defined Functions
Utility

ヘルプ管理を使用して、このヘルプトピックの下にあるすべてのキーワードを表示します

root@localhost : performance_schema 10:37:27> help Administration
......
SHOW PROCEDURE CODE
SHOW PROCEDURE STATUS
SHOW PROCESSLIST
SHOW PROFILE
SHOW PROFILES
SHOW RELAYLOG EVENTS  # 找到了,在这里
......

特定のヘルプ情報を表示するには、SHOW RELAYLOGEVENTSステートメントを使用します

root@localhost : performance_schema 10:41:53> help SHOW RELAYLOG EVENTS
Name: 'SHOW RELAYLOG EVENTS'
Description:
Syntax:
SHOW RELAYLOG EVENTS
[IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]  # 原来是这样用的
Shows the events in the relay log of a replication slave. If you do not
specify 'log_name', the first relay log is displayed. This statement
has no effect on the master.
URL: http://dev.mysql.com/doc/refman/5.7/en/show-relaylog-events.html

さて、MySQLヘルプシステムの構成と、ヘルプ情報ヘルプが私たちに提供できるものについて、より明確に理解できたと思います。

  • HELPステートメントで指定された検索キーワードは大文字と小文字を区別しません

  • 検索キーワードにはワイルドカード%と_を含めることができ、その効果はLIKE演算子によって実行されるパターンマッチング操作と同じです。例:HELP'rep% 'は、repで始まるトピックのリストを返します

  • ヘルプカテゴリ文字列とヘルプトピック文字列に複数の文字が含まれている場合は、引用符を使用するかどうかを指定できます。あいまいさを避けるために、引用符を使用することをお勧めします。

05

ヘルプ情報シートに関する注意事項

レプリケーションに参加しているデータベースインスタンスの場合、テーブルの更新を支援するためのいくつかの考慮事項があります。ヘルプテーブルはデフォルトでbinlogに書き込まれます(これらのヘルプテーブルはバージョンと一致するため、1つのインスタンスのバージョンをアップグレードする必要があり、他のインスタンスは同時に更新する必要があります)。したがって、メインライブラリのヘルプテーブルをアップグレードする必要があるかどうかを検討する必要があります。同時に、これらの更新は、マスターライブラリのbinlogを介してスレーブライブラリに同期されます。

  • マスタースレーブライブラリのバージョンが異なる場合は、情報テーブルを支援するためにマスタースレーブライブラリを個別にアップグレードする必要があります。 

  • 5.7.5より前のバージョンのMySQLの場合、マスターライブラリとスレーブライブラリはそれぞれ、次のコマンドを使用してヘルプ情報テーブルをアップグレードします。mysql--init-command = "SET sql_log_bin = 0" mysql <fill_help_tables.sql

  • MySQL 5.7.5以降のバージョンの場合、fill_help_tables.sqlファイルにはSET sql_log_bin = 0が含まれているため、-init-command = "SET sql_log_bin = 0"を使用する必要はありません。したがって、マスターライブラリとスレーブライブラリは別々に実行するだけで済みます。コマンド:mysql mysql <fill_help_tables.sql

  • マスタースレーブのバージョンが同じである場合は、マスターライブラリでマスタースレーブライブラリをアップグレードでき、コピーすることでスレーブライブラリのヘルプ情報テーブルを更新できます。

  • 5.7.5より前のMySQLバージョンの場合は、メインライブラリで次のコマンドを実行するだけで済みます。mysqlmysql<fill_help_tables.sql 

  • MySQL 5.7.5以降の場合は、最初にメインライブラリサーバーのll_help_tables.sqlファイルを変更し、SET sql_log_bin = 0を削除してから、メインライブラリで次のコマンドを実行する必要があります:mysql mysql <fill_help_tables.sql。

PS: MySQL 5.7.5より前は、これらのテーブルはMyISAMを使用していましたが、このバージョン以降はInnoDBエンジンに変更されました。

|作者について

LuoXiaobo・ScaleFluxデータベーステクノロジーエキスパート

「千の金のレシピ-MySQLパフォーマンス最適化ピラミッドルール」、「データエコロジー:MySQLレプリケーションテクノロジーとプロダクションプラクティス」の著者の1人。

MySQLアーキテクチャに精通し、オープンソーステクノロジーに特化するなど、データベース全体のチューニングに精通し、オープンソーステクノロジーの推進に熱心であり、オンラインおよびオフラインで多くの公開データベーストピック共有を行い、100近くのデータベース関連の研究記事を公開しています。

全文は終わりました。

MySQLをお楽しみください:)

TeacherYeの「MySQLCoreOptimization」クラスがMySQL8.0にアップグレードされました。コードをスキャンして、MySQL8.0の練習の旅を始めてください。

おすすめ

転載: blog.csdn.net/n88Lpo/article/details/110601002