溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

分析mysql系統(tǒng)庫日志信息記錄表

發(fā)布時間:2021-11-05 16:30:41 來源:億速云 閱讀:107 作者:iii 欄目:MySQL數(shù)據(jù)庫

這篇文章主要介紹“分析mysql系統(tǒng)庫日志信息記錄表”,在日常操作中,相信很多人在分析mysql系統(tǒng)庫日志信息記錄表問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”分析mysql系統(tǒng)庫日志信息記錄表”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

一、日志信息記錄表

    1.1. 日志信息概述
MySQL的日志系統(tǒng)包含:general query log、slow query log、error log(記錄MySQL Server啟動時、運行中、停止時的錯誤信息)、binary log(記錄MySQL Server運行過程中的數(shù)據(jù)變更的邏輯日志)、relay log(記錄從庫IO線程從主庫獲取的主庫數(shù)據(jù)變更日志)、DDL log(記錄DDL語句執(zhí)行時的元數(shù)據(jù)變更信息。5.7中只支持寫入到文件,8.0中支持寫入到innodb_ddl_log表中,注意,ddl log與online ddl的alter log不同,不要搞混了),其中,在MySQL 5.7中,只有general query log、slow query log支持寫入到表中(也支持寫入到文件中),其他日志類型在MySQL 5.7版本中只支持寫入到文件中,所以,下文中對于日志系統(tǒng)表主要介紹 general query log、slow query log表。
默認情況下,除Windows上的錯誤日志之外,其他平臺的所有日志默認情況下不啟用 (DDL日志只在需要時創(chuàng)建,并且無用戶可配置選項)。
默認情況下,所有日志均寫在datadir目錄下,但可以使用每種日志對應的路徑參數(shù)自行更改路徑。
  • general query log:general_log_file=/home/mysql/data/mysqldata1/mydata/localhost.log
  • error log:log_error=/home/mysql/data/mysqldata1/log/error.log
  • slow query log:slow_query_log_file=/home/mysql/data/mysqldata1/slowlog/slow-query.log
  • binary log:log_bin_basename=/home/mysql/data/mysqldata1/binlog/mysql-bin、log_bin_index=/home/mysql/data/mysqldata1/binlog/mysql-bin.index
  • relay log:relay_log_basename=/home/mysql/data/mysqldata1/relaylog/mysql-relay-bin、relay_log_index=/home/mysql/data/mysqldata1/relaylog/mysql-relay-bin.index
默認情況下,所有的日志都寫入到磁盤文件,但general query log和slow query log可以通過log_output=TABLE設置保存到表mysql.general_log和mysql.slow_log表中(DDL log在8.0中可以配置,可打印到錯誤日志中,也可以保存在表innodb_ddl_log中)。

默認情況下,binary log根據(jù)max_binlog_size參數(shù)設置的大小自動滾動、relay log根據(jù)max_relay_log_size或者max_binlog_size自動滾動(如果max_relay_log_size沒設置就按照max_binlog_size大小滾動),其他的日志類型不會滾動,總是使用同一個文件,所以其他日志類型增長過大之后,需要自行做切割。

  • 一般使用mv file file.bak;然后執(zhí)行刷新命令,刷新命令可以登錄實例使用flush logs命令刷新重新產(chǎn)生新的日志文件,但是該命令是刷新所有的日志類型,要針對具體的日志類型,可以使用:flush binary logs;刷新二進制日志、flush error logs;刷新錯誤日志、flush general logs;刷新普通查詢?nèi)罩?、flush slow logs;刷新慢查詢?nèi)罩尽lush relay logs;刷新中繼日志、flush engine logs;刷新存儲引擎相關的任何可刷新的日志。

  • 也可以使用Server的flush tables;語句或者flush table with read lock;語句。

  • 刷新操作也可以使用一些命令行工具的選項實現(xiàn),例如:使用mysqladmin命令的flush-logs選項,或者mysqldump的flush-logs選項與--master-data選項。
日志表實現(xiàn)具有以下特征:
通常,日志表的主要目的是為程序提供一個訪問接口,以便查看Server內(nèi)的SQL運行情況,所以,日志記錄存放在表中比存放在磁盤文件中會更加方便,因為存儲在表中可以遠程訪問這些日志記錄,而不需要登錄操作系統(tǒng)去訪問磁盤文件。
日志表可以使用CREATE TABLE,ALTER TABLE和DROP TABLE語句,但前提是需要先使用對應的開關關閉掉表,不能在使用期間操作(例如:set global general_log=0,然后操作general_log表)。
general_log和slow_log表默認是CSV引擎,使用逗號分割的格式來存放日志記錄,CSV數(shù)據(jù)文件可以很方便地導入其他程序進行處理,例如:excel電子表格。
日志表可以修改引擎為MyISAM,但修改之前必須先停止表的使用。合法的引擎為CSV和MyISAM,其他引擎不支持。

要禁用日志記錄表以便進行相應的DDL語句操作,可以使用以下步驟(以慢查詢表為例進行說明,slow_log和general_log表操作方式類似)。

SET @old_log_state = @@ global.general_log;
SET GLOBAL general_log ='OFF';
ALTER TABLE mysql.general_log ENGINE = MyISAM;
SET GLOBAL general_log = @old_log_state;

可以使用TRUNCATE TABLE來清空日志記錄。

可以使用RENAME TABLE來實現(xiàn)日志表的歸檔,新舊表做一個原子的名稱互換操作,如下:

use mysql;
DROP TABLE IF EXISTS general_log2;
CREATE TABLE general_log2 LIKE general_log;
RENAME TABLE general_log TO general_log_backup,general_log2 TO general_log;

注意事項

  • 可以使用CHECK TABLE語句。

  • 不能使用LOCK TABLE語句。

  • 不能使用INSERT,DELETE和UPDATE語句,日志表的記錄變更由Server內(nèi)部維護,不能手動操作。

  • FLUSH TABLES WITH READ LOCK和read_only系統(tǒng)變量的設置對日志表沒有影響。Server內(nèi)部始終可以寫日志表。

  • 日志表的數(shù)據(jù)變更操作不會記錄到binlog,因此不會被復制到從庫。

  • 可以使用FLUSH TABLES或FLUSH LOGS語句來刷新日志表或日志文件。

  • 日志表不支持分區(qū)表。

mysqldump轉(zhuǎn)儲包含了重新創(chuàng)建這些表的語句,以便在重新加載轉(zhuǎn)儲文件后恢復日志表結構,但是日志表中的記錄內(nèi)容不會被轉(zhuǎn)儲。

PS:MySQL的查詢?nèi)罩?、錯誤日志等是使用明文記錄的,所以,這些日志中有可能會記錄用戶的明文密碼信息,可以使用rewrite插件來使用原始格式記錄,詳見鏈接:

  • https://dev.mysql.com/doc/refman/5.7/en/plugin-types.html#query-rewrite-plugin-type

  • https://dev.mysql.com/doc/refman/5.7/en/rewriter-query-rewrite-plugin.html

    1.2. 日志表詳解

1.2.1. general_log

該表提供查詢普通SQL語句的執(zhí)行記錄信息,用于查找客戶端到底在服務端上執(zhí)行了什么SQL(當然,還可以使用企業(yè)版的audit log審計插件記錄,本文不做贅述,有興趣的童鞋自行研究)。
該表中的信息在SQL開始執(zhí)行時就會進行記錄,而不是等待SQL執(zhí)行結束才記錄。

下面是該表中存儲的信息內(nèi)容。

root@localhost : (none) 07:25:50> set global log_output='TABLE';
Query OK, 0 rows affected (0.00 sec)
root@localhost : (none) 07:26:20> set global general_log=1;
Query OK, 0 rows affected (0.01 sec)
root@localhost : (none) 07:26:32> select * from mysql.general_log;
+----------------------------+---------------------------+-----------+-----------+--------------+---------------------------------+
| event_time | user_host | thread_id | server_id | command_type | argument |
+----------------------------+---------------------------+-----------+-----------+--------------+---------------------------------+
| 2018-06-19 19:26:32.891371 | root[root] @ localhost [] | 3 | 3306102 | Query | show databases |
| 2018-06-19 19:26:42.012064 | root[root] @ localhost [] | 3 | 3306102 | Query | select * from mysql.general_log |
+----------------------------+---------------------------+-----------+-----------+--------------+---------------------------------+
2 rows in set (0.00 sec)
root@localhost : (none) 07:26:42> select connection_id();
+-----------------+
| connection_id() |
+-----------------+
| 3 |
+-----------------+
1 row in set (0.00 sec)

表字段含義。

  • event_time:查詢?nèi)罩居涗浀奖淼哪且豢痰膌og_timestamps系統(tǒng)變量值,用于標記查詢?nèi)罩居涗浐螘r入庫。

  • user_host:表示該查詢?nèi)罩居涗浀膩碓?,其中有用戶名和主機名信息。

  • thread_id:表示該查詢?nèi)罩居涗泩?zhí)行時的process_id。

  • server_id:表示執(zhí)行該查詢的數(shù)據(jù)庫實例ID。

  • command_type:表示該查詢的command類型,通常都為query。

  • argument:表示執(zhí)行查詢的SQL語句文本。

mysqld按照接收請求的順序?qū)⒄Z句寫入查詢?nèi)罩局?這可能與它們的執(zhí)行順序不同)。

在主從復制架構中。

  • 主庫上在使用基于語句的日志格式時,從庫在在重放這些語句之后,會把這些語句記錄自己的查詢?nèi)罩局校ㄐ枰獜膸靻⒂昧瞬樵內(nèi)罩居涗浌δ埽?,使用語句格式記錄的binlog在使用mysqlbinlog命令解析之后導入數(shù)據(jù)庫中時,如果實例開啟了查詢?nèi)罩居涗浌δ?,則這些解析語句也會被記錄到查詢?nèi)罩局小?/p>

  • 主庫上使用基于row日志格式時,從庫重放這些數(shù)據(jù)變更之后,這些語句不會被計入從庫的查詢?nèi)罩局小?/p>

  • 在主庫上使用基于mixed日志格式時,如果主庫是以語句格式記錄的,則從庫重放這些數(shù)據(jù)變更之后會把語句記錄到自己的查詢?nèi)罩局校ㄐ枰獜膸靻⒂昧瞬樵內(nèi)罩居涗浌δ埽?,如果主庫在記錄binlog時被轉(zhuǎn)換為了row格式,則也跟row格式復制一樣,從庫重放這些數(shù)據(jù)變更之后不會把這些語句記錄到自己的查詢?nèi)罩局小?/p>

查詢?nèi)罩究梢允褂孟到y(tǒng)變量sql_log_off變量動態(tài)關閉當前會話或者所有會話的查詢?nèi)罩居涗浌δ埽ㄅcsql_log_bin系統(tǒng)變量的作用類似)。
查詢?nèi)罩鹃_關general_log變量和查詢磁盤日志文件路徑general_log_file變量都可以動態(tài)修改(如果已經(jīng)有查詢?nèi)罩咎幱诖蜷_狀態(tài),則使用general_log_file變量修改查詢?nèi)罩韭窂綍r關閉舊的查詢?nèi)罩荆蜷_新的查詢?nèi)罩荆?,當啟用查詢?nèi)罩緯r,查詢?nèi)罩緦⒈3值较到y(tǒng)變量log_output指定的目的地。

如果啟用了查詢?nèi)罩荆瑒tServer重新啟動的時候會重新打開查詢?nèi)罩疚募?,如果查詢?nèi)罩敬嬖?,則直接重新打開,如果查詢?nèi)罩静淮嬖冢瑒t重新創(chuàng)建,如果需要再Server運行時動態(tài)歸檔查詢?nèi)罩荆瑒t可以按照如下命令操作(linux或者unix平臺)。

shell> mv host_name.log host_name-old.log
shell> mysqladmin flush-logs
shell> mv host_name-old.log backup-directory
# 在Windows上,請直接使用重命名,而不是mv命令

也可以在Server運行時通過語句先關閉查詢?nèi)罩竟δ?,然后使用外部命令來歸檔,然后再重新啟用查詢?nèi)罩?,這樣就不需要使用flush-logs命令來刷新日志文件了,此方法適用于任何平臺,命令如下:

SET GLOBAL general_log ='OFF';
# 在禁用日志的情況下,從外部重命名日志文件;例如,從命令行。然后再次啟用日志:SET GLOBAL general_log ='ON';# 此方法適用于任何平臺,不需要重新啟動服務器。

默認情況下,在Server中執(zhí)行的語句如果帶了用戶密碼,會被Server重寫該語句之后再寫入到查詢?nèi)罩局?,如果需要記錄明文密碼,則需要使用--low-raw選項啟動Server(使用該選項會繞過密碼重寫功能),通常不建議記錄密碼明文信息到查詢?nèi)罩局?,因為不安全,但如果有必要,自行判斷(例如:需要查詢原始的語句信息來排查問題時)。

  • 如果帶密碼的語句中,指定了密碼是一個hash值時,則密碼字符串不會被重寫,例如:CREATE USER 'user1'@'localhost' IDENTIFIED BY PASSWORD 'not-so-secret';就會被原本原因地記錄下來,但是如果去掉PASSWORD關鍵字CREATE USER 'user1'@'localhost' IDENTIFIED BY 'not-so-secret';,則在查詢?nèi)罩局芯蜁恢貙憺椋篊REATE USER 'user1'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS ''。

一些語法錯誤的SQL默認情況下也不會被記錄到查詢?nèi)罩局?,使?-low-raw選項啟動Server會記錄所有的原始SQL語句。

查詢?nèi)罩颈碇械臅r間戳信息來源于系統(tǒng)變量log_timestamps(包括慢查詢?nèi)罩疚募湾e誤日志文件中的時間戳都來自此系統(tǒng)變量的值),該時間戳值在查詢時可以使用CONVERT_TZ()函數(shù)或通過設置會話將從這些表中的時間戳信息從本地系統(tǒng)時區(qū)轉(zhuǎn)換為任何所需時區(qū)(修改會話級別的time_zone變量值)。

1.2.2. slow_log

該表提供查詢執(zhí)行時間超過long_query_time設置值的SQL,或者未使用索引的(需要開啟參數(shù)log_queries_not_using_indexes=ON)或者管理語句(需要開啟參數(shù)log_slow_admin_statements=ON)。

下面是該表中存儲的信息內(nèi)容。

root@localhost : test 08:46:04> set global long_query_time=0;
Query OK, 0 rows affected (0.01 sec)
root@localhost : test 08:55:14> set global slow_query_log=1;
Query OK, 0 rows affected (0.01 sec)
# 斷開會話重新連接
root@localhost : (none) 08:56:12> use test
Database changed
root@localhost : test 08:56:13> show tables;
+----------------+
| Tables_in_test |
+----------------+
| customer |
| product |
| shares |
| test |
| transreq |
+----------------+
5 rows in set (0.01 sec)
root@localhost : test 08:56:16> select * from test;
+---+---+------+------+------+------+
| a | b | c | d | e | f |
+---+---+------+------+------+------+
| 1 | 1 | 1 | 1 | 1 | 1 |
| 2 | 2 | 2 | 2 | 2 | 2 |
| 3 | 3 | 3 | 3 | 3 | 3 |
| 4 | 4 | 4 | 4 | 4 | 4 |
| 5 | 5 | 4 | 4 | 5 | 5 |
+---+---+------+------+------+------+
5 rows in set (0.01 sec)
root@localhost : test 08:56:18> select * from mysql.slow_log;
+----------------------------+---------------------------+-----------------+-----------------+-----------+---------------+------+----------------+-----------+-----------+----------------------------------+-----------+
| start_time | user_host | query_time | lock_time | rows_sent | rows_examined | db | last_insert_id | insert_id | server_id | sql_text | thread_id |
+----------------------------+---------------------------+-----------------+-----------------+-----------+---------------+------+----------------+-----------+-----------+----------------------------------+-----------+
| 2018-06-19 20:56:12.254716 | root[root] @ localhost [] | 00:00:00.000286 | 00:00:00.000000 | 1 | 0 | | 0 | 0 | 3306102 | select @@version_comment limit 1 | 4 |
| 2018-06-19 20:56:12.258551 | root[root] @ localhost [] | 00:00:00.000153 | 00:00:00.000000 | 1 | 0 | | 0 | 0 | 3306102 | select USER() | 4 |
| 2018-06-19 20:56:13.975382 | root[root] @ localhost [] | 00:00:00.000247 | 00:00:00.000000 | 1 | 0 | | 0 | 0 | 3306102 | SELECT DATABASE() | 4 |
| 2018-06-19 20:56:13.975627 | root[root] @ localhost [] | 00:00:00.000095 | 00:00:00.000000 | 1 | 0 | test | 0 | 0 | 3306102 | Init DB | 4 |
| 2018-06-19 20:56:16.277207 | root[root] @ localhost [] | 00:00:00.000490 | 00:00:00.000264 | 5 | 5 | test | 0 | 0 | 3306102 | show tables | 4 |
| 2018-06-19 20:56:18.936831 | root[root] @ localhost [] | 00:00:00.000694 | 00:00:00.000400 | 5 | 5 | test | 0 | 0 | 3306102 | select * from test | 4 |
+----------------------------+---------------------------+-----------------+-----------------+-----------+---------------+------+----------------+-----------+-----------+----------------------------------+-----------+
6 rows in set (0.00 sec)

表字段含義。

  • start_time:慢查詢?nèi)罩居涗浀奖頃r的log_timestamps系統(tǒng)變量值。

  • user_host:帶用戶名和主機名(IP)格式的值,用于標記訪問來源。

  • query_time:慢查詢語句總的執(zhí)行時間。

  • lock_time:慢查詢語句持有鎖的時間。

  • rows_sent:慢查詢語句最終返回給客戶端的數(shù)據(jù)記錄數(shù)。

  • rows_examined:慢查詢語句在存儲引擎中的檢查記錄數(shù)。

  • db:慢查詢語句執(zhí)行時的默認庫名。

  • last_insert_id:通常為0。

  • insert_id:通常為0。

  • server_id:產(chǎn)生慢查詢語句的server id。

  • sql_text:慢查詢?nèi)罩镜恼Z句文本。

  • thread_id:產(chǎn)生慢查詢?nèi)罩镜木€程process_id。

慢查詢?nèi)罩景藞?zhí)行時間超過long_query_time系統(tǒng)變量設置的秒數(shù)的SQL語句,并且包含了需要檢查行數(shù)超過min_examined_row_limit系統(tǒng)變量設置的值的SQL語句(默認情況下該變量為0,表示不限制檢查行數(shù))。long_query_time的最小值和默認值分別為0和10(單位秒)。該值可以指定為微秒(使用小數(shù)),但微秒單位只對記錄到文件有效。對于記錄到表中的慢查詢語句,不支持微秒,微秒部分被忽略。

默認情況下,慢查詢?nèi)罩静粫涗浌芾碚Z句,也不會記錄未使用索引的語句,但可以使用log_slow_admin_statements和log_queries_not_using_indexes系統(tǒng)變量更改默認行為,使MySQL Server把管理語句和未使用索引的語句也一并計入慢查詢?nèi)罩尽?/p>

慢查詢?nèi)罩局姓Z句獲取初始鎖的時間不計入執(zhí)行時間,包含時間范圍為:獲取鎖之后,并在語句執(zhí)行完成之后,將鎖釋放之前。然后將慢查詢語句寫入慢查詢?nèi)罩局?。所以,在慢查詢?nèi)罩局杏涗浀捻樞蚩赡芘cMySQL Server接收到的語句順序(執(zhí)行順序)并不相同,因為可能有的先執(zhí)行的語句最后才釋放完所有的鎖,有的后執(zhí)行的語句先釋放完所有的鎖。

默認情況下,慢查詢?nèi)罩静粏⒂?。要啟用可以使?-slow_query_log =1進行設置,要指定慢查詢?nèi)罩疚募Q,可以使用--slow_query_log_file = file_name進行設置,要指定慢查詢?nèi)罩据敵瞿繕耍梢允褂?-log-output=FILE|TABLE|NONE 進行設置。

  • 如果啟用了慢查詢?nèi)罩居涗浌δ?,但是未指定名稱,則默認在datadir下命名為host_name-slow.log,如果使用--log-output=TABLE 設置了報錯在表中,則slow_query_log_file = file_name 設置的路徑無效。

  • 要動態(tài)修改慢查詢?nèi)罩疚募Q,可以使用slow_query_log=0先關閉慢查詢?nèi)罩疚募缓笫褂胹low_query_log_file=new_file_name指定新的慢查詢?nèi)罩疚募?,然后使用slow_query_log=1重新啟用慢查詢?nèi)罩救罩疚募?/p>

  • 如果mysqld在啟動是使用了--log-short-format選項,則MySQL Server會將較少的慢查詢信息寫入慢查詢?nèi)罩局小?/p>

如果使用了log_slow_admin_statements=1 設置,則MySQL Server會在慢查詢?nèi)罩局杏涗浫缦鹿芾碚Z句:

ALTER TABLE,ANALYZE TABLE,CHECK TABLE,CREATE INDEX,DROP INDEX,OPTIMIZE TABLE和REPAIR TABLE

如果使用了log_queries_not_using_indexes=1 設置,則MySQL Server會把任何不使用索引的查詢語句記錄到慢查詢?nèi)罩局小?/p>

  • 當記錄這些查詢語句時,慢查詢?nèi)罩究赡軙杆僭鲩L。此時可以通過設置log_throttle_queries_not_using_indexes系統(tǒng)變量來限制這些未使用索引的語句計入慢查詢?nèi)罩镜乃俾剩ㄗ⒁猓涸撟兞肯拗频氖?0秒內(nèi)的未使用索引的語句數(shù)量,不是限制時間)。默認情況下,這個變量是0,表示沒有速率限制。當啟用限制時,第一個不使用索引的查詢執(zhí)行之后,將打開一個60秒的時間窗口,在該窗口內(nèi),將禁止其他未使用索引的查詢記錄到慢查詢?nèi)罩局?,等待時間窗口結束之后,Server記錄一個摘要信息,表示有多少次以及在這些執(zhí)行次數(shù)總的花費時間。然后進入下一個60秒的窗口。

MySQL Server按照以下順序來判斷語句是否需要計入慢查詢:

  • 判斷參數(shù) log_slow_admin_statements是否啟用,如果啟用,則判斷語句是否是管理語句,如果是 則計入慢查詢,不是則進入下一輪判斷。如果參數(shù)未啟用,則進入下一步判斷。

  • 判斷查詢語句執(zhí)行時間是否超過long_query_time秒,如果超過則計入慢查詢,如果未超過,則判斷l(xiāng)og_queries_not_using_indexes 參數(shù)是否啟用,如果啟用該參數(shù)且該語句未使用索引,則計入慢查詢,否則進入下一步判斷。

  • 如果min_examined_row_limit變量設置非零值,則判斷語句的檢查行數(shù)是否超過該變量設置的值,如果超過則計入慢查詢,如果未超過則不記錄慢查詢。

慢查詢?nèi)罩居涗浀臅r間戳由log_timestamps系統(tǒng)變量控制。

默認情況下,復制架構中的從庫不會將重放binlog產(chǎn)生的慢查詢寫入自己的慢速查詢?nèi)罩局?,如果需要記錄從庫重放binlog的慢查詢語句計入慢查詢?nèi)罩?,需要啟用變量log_slow_slave_statements=1。

寫入慢查詢?nèi)罩镜恼Z句中的密碼被服務器重寫,不會以純文本形式出現(xiàn)。如果需要記錄原始語句,需要使用--log-raw選項。

二、混雜表

由于本系列不介紹企業(yè)版認證插件的audit_log_filter, audit_log_user表、防火墻插件的firewall_users, firewall_whitelis表,所以只剩下一個servers混雜表的篇幅不足夠另起一期,所有我們強塞到本期里,主要是federated引擎使用的信息,如無興趣可直接跳過本期后續(xù)內(nèi)容。

    2.1. servers

該表提供查詢連接組合信息(遠程實例的IP、端口、帳號、密碼、數(shù)據(jù)庫名稱等信息,詳見后續(xù)示例),這些連接組合信息通常用于federated引擎(當然也可以作為在數(shù)據(jù)庫中保存連接組合的一種方式,維護也較為方便),該表中的信息需要使用create server方式創(chuàng)建。

在介紹別字段含義之前,先看看dederated引擎的兩種創(chuàng)建方式。

# 使用create server方式創(chuàng)建的連接組合
Syntax:
CREATE SERVER server_name
    FOREIGN DATA WRAPPER wrapper_name
    OPTIONS (option [, option] ...)
option:
  { HOST character-literal
  | DATABASE character-literal
  | USER character-literal
  | PASSWORD character-literal
  | SOCKET character-literal
  | OWNER character-literal
  | PORT numeric-literal }
# 直接使用CONNECTION選項指定完整的連接組合
CONNECTION=scheme://user_name[:password]@host_name[:port_num]/db_name/tbl_name

下面是該表中存儲的信息內(nèi)容。

root@localhost Tue Jun 5 01:12:05 2018 01:12:05 [(none)]>CREATE SERVER fedlink_ip
    -> FOREIGN DATA WRAPPER mysql
    -> OPTIONS (USER 'test',PASSWORD 'test', HOST '127.0.0.1', PORT 3306, DATABASE 'test_table',Owner 'test_table1');
Query OK, 1 row affected (0.00 sec)
root@localhost Tue Jun 5 01:12:10 2018 01:12:10 [(none)]>CREATE SERVER fedlink_socket
    -> FOREIGN DATA WRAPPER mysql
    -> OPTIONS (USER 'test',PASSWORD 'test', SOCKET '/data/mysql/mysql3306/data/mysql.sock', PORT 3306, DATABASE 'test_table',Owner 'test_table2');
Query OK, 1 row affected (0.00 sec)
root@localhost Tue Jun 5 01:12:10 2018 01:12:10 [(none)]>CREATE SERVER fedlink_socket_ip
    -> FOREIGN DATA WRAPPER mysql
    -> OPTIONS (USER 'test',PASSWORD 'test', HOST '127.0.0.1',SOCKET '/data/mysql/mysql3306/data/mysql.sock', PORT 3306, DATABASE 'test_table',Owner 'test_table3');
Query OK, 1 row affected (0.00 sec)
root@localhost Tue Jun 5 01:12:10 2018 01:12:10 [(none)]>select * from mysql.servers;
+-------------------+-----------+------------+----------+----------+------+---------------------------------------+---------+-------------+
| Server_name | Host | Db | Username | Password | Port | Socket | Wrapper | Owner |
+-------------------+-----------+------------+----------+----------+------+---------------------------------------+---------+-------------+
| fedlink_socket_ip | 127.0.0.1 | test_table | test | test | 3306 | /data/mysql/mysql3306/data/mysql.sock | mysql | test_table3 |
| fedlink_socket | | test_table | test | test | 3306 | /data/mysql/mysql3306/data/mysql.sock | mysql | test_table2 |
| fedlink_ip | 127.0.0.1 | test_table | test | test | 3306 | | mysql | test_table1 |
+-------------------+-----------+------------+----------+----------+------+---------------------------------------+---------+-------------+
3 rows in set (0.00 sec)
# 如果要刪除連接組合記錄,可以使用如下語句
root@localhost Tue Jun 5 01:10:41 2018 01:10:41 [(none)]>drop SERVER fedlink;
Query OK, 1 row affected (0.00 sec)
root@localhost Tue Jun 5 01:11:30 2018 01:11:30 [(none)]>drop SERVER fedlink_socket ;
Query OK, 1 row affected (0.00 sec)
root@localhost Tue Jun 5 01:11:55 2018 01:11:55 [(none)]>drop SERVER fedlink_socket_ip;
Query OK, 1 row affected (0.00 sec)

federated引擎的兩種使用方式讀寫遠程實例數(shù)據(jù)示例。

# 創(chuàng)建遠程實例用戶
root@localhost Tue Jun 5 00:23:45 2018 00:23:45 [(none)]>grant all on *.* to test@'%' identified by 'test';
Query OK, 0 rows affected (0.00 sec)
# 創(chuàng)建用于存放遠程實例表的庫
root@localhost Tue Jun 5 00:24:06 2018 00:24:06 [(none)]>create database test_table;
Query OK, 1 row affected (0.00 sec)
root@localhost Tue Jun 5 00:30:50 2018 00:30:50 [(none)]>use test_table
Database changed
# 創(chuàng)建遠程實例表test_table1和test_table2
    root@localhost Tue Jun 5 00:31:03 2018 00:31:03 [test_table]>CREATE TABLE test_table1 (
    -> id INT(20) NOT NULL AUTO_INCREMENT,
    -> name VARCHAR(32) NOT NULL DEFAULT '',
    -> other INT(20) NOT NULL DEFAULT '0',
    -> PRIMARY KEY (id),
    -> INDEX name (name),
    -> INDEX other_key (other)
    -> );
Query OK, 0 rows affected (0.06 sec)
root@localhost Tue Jun 5 00:31:09 2018 00:31:09 [test_table]>CREATE TABLE test_table2 (
    -> id INT(20) NOT NULL AUTO_INCREMENT,
    -> name VARCHAR(32) NOT NULL DEFAULT '',
    -> other INT(20) NOT NULL DEFAULT '0',
    -> PRIMARY KEY (id),
    -> INDEX name (name),
    -> INDEX other_key (other)
    -> );
Query OK, 0 rows affected (0.00 sec)
# 創(chuàng)建存放federated引擎表的庫
root@localhost Tue Jun 5 00:31:16 2018 00:31:16 [test_table]>create database federated;
Query OK, 1 row affected (0.00 sec)
root@localhost Tue Jun 5 00:31:22 2018 00:31:22 [test_table]>use federated
Database changed
# 使用create server方式創(chuàng)建一個連接字符串組合,該記錄會保存到mysql.servers表中
root@localhost Tue Jun 5 00:31:25 2018 00:31:25 [federated]>CREATE SERVER fedlink
    -> FOREIGN DATA WRAPPER mysql
    -> OPTIONS (USER 'test',PASSWORD 'test', HOST '127.0.0.1', PORT 3306, DATABASE 'test_table');
Query OK, 1 row affected (0.03 sec)
# 查看mysql.servers表中的記錄
root@localhost Tue Jun 5 00:31:37 2018 00:31:37 [federated]>select * from mysql.servers;
+-------------+-----------+------------+----------+----------+------+--------+---------+-------+
| Server_name | Host | Db | Username | Password | Port | Socket | Wrapper | Owner |
+-------------+-----------+------------+----------+----------+------+--------+---------+-------+
| fedlink | 127.0.0.1 | test_table | test | test | 3306 | | mysql | |
+-------------+-----------+------------+----------+----------+------+--------+---------+-------+
1 row in set (0.00 sec)
# 使用create server連接字符串組合方式,創(chuàng)建federated引擎表
root@localhost Tue Jun 5 00:32:12 2018 00:32:12 [federated]>CREATE TABLE federated1 (
    -> id INT(20) NOT NULL AUTO_INCREMENT,
    -> name VARCHAR(32) NOT NULL DEFAULT '',
    -> other INT(20) NOT NULL DEFAULT '0',
    -> PRIMARY KEY (id),
    -> INDEX name (name),
    -> INDEX other_key (other)
    -> )
    -> ENGINE=FEDERATED
    -> CONNECTION='fedlink/test_table1';
Query OK, 0 rows affected (0.04 sec)
root@localhost Tue Jun 5 00:32:17 2018 00:32:17 [federated]>show create table federated1;
...
| Table | Create Table |
...
| federated1 | CREATE TABLE `federated1` (
  `id` int(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) NOT NULL DEFAULT '',
  `other` int(20) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `name` (`name`),
  KEY `other_key` (`other`)
) ENGINE=FEDERATED DEFAULT CHARSET=utf8 CONNECTION='fedlink/test_table1' |
...
1 row in set (0.00 sec)
# 往federated引擎表federated1中插入數(shù)據(jù),然后可以在federated引擎表和遠程實例表中都查詢到相同的數(shù)據(jù)
root@localhost Tue Jun 5 00:32:58 2018 00:32:58 [federated]>insert into federated1(name) values('federated1');
Query OK, 1 row affected (0.00 sec)
root@localhost Tue Jun 5 00:33:42 2018 00:33:42 [federated]>select * from federated1;
+----+------------+-------+
| id | name | other |
+----+------------+-------+
| 1 | federated1 | 0 |
+----+------------+-------+
1 row in set (0.00 sec)
root@localhost Tue Jun 5 00:33:49 2018 00:33:49 [federated]>select * from test_table.test_table1;
+----+------------+-------+
| id | name | other |
+----+------------+-------+
| 1 | federated1 | 0 |
+----+------------+-------+
1 row in set (0.00 sec)
# 使用CONNECTION方式完整的連接字符串創(chuàng)建federated引擎表
root@localhost Tue Jun 5 00:32:32 2018 00:32:32 [federated]>CREATE TABLE federated2 (
    -> id INT(20) NOT NULL AUTO_INCREMENT,
    -> name VARCHAR(32) NOT NULL DEFAULT '',
    -> other INT(20) NOT NULL DEFAULT '0',
    -> PRIMARY KEY (id),
    -> INDEX name (name),
    -> INDEX other_key (other)
    -> )
    -> ENGINE=FEDERATED
    -> CONNECTION='mysql://test:test@127.0.0.1:3306/test_table/test_table2';
Query OK, 0 rows affected (0.00 sec)
# 往federated引擎表federated2中插入數(shù)據(jù),然后可以在federated引擎表和遠程實例表中都查詢到相同的數(shù)據(jù)
root@localhost Tue Jun 5 00:34:08 2018 00:34:08 [federated]>insert into federated2(name) values('federated2');
Query OK, 1 row affected (0.00 sec)
root@localhost Tue Jun 5 00:34:16 2018 00:34:16 [federated]>select * from test_table.test_table2;
+----+------------+-------+
| id | name | other |
+----+------------+-------+
| 1 | federated2 | 0 |
+----+------------+-------+
1 row in set (0.00 sec)
root@localhost Tue Jun 5 00:34:22 2018 00:34:22 [federated]>select * from federated2;
+----+------------+-------+
| id | name | other |
+----+------------+-------+
| 1 | federated2 | 0 |
+----+------------+-------+
1 row in set (0.00 sec)
root@localhost Tue Jun 5 00:34:28 2018 00:34:28 [federated]>select * from mysql.servers;
+-------------+-----------+------------+----------+----------+------+--------+---------+-------+
| Server_name | Host | Db | Username | Password | Port | Socket | Wrapper | Owner |
+-------------+-----------+------------+----------+----------+------+--------+---------+-------+
| fedlink | 127.0.0.1 | test_table | test | test | 3306 | | mysql | |
+-------------+-----------+------------+----------+----------+------+--------+---------+-------+
1 row in set (0.00 sec)
# 使用socket方式類似,如果使用socket時,create server連接組合創(chuàng)建方式參照"表記錄內(nèi)容示例"

表字段含義。

Server_name:連接組合唯一標識(即名稱,使用drop server刪除連接組合記錄時,直接指定該表中存在的server_name即可刪除組合記錄,如:drop server server_name;)。

Host:連接組合中的遠程主機名(IP或域名),對應create server中的HOST,對應CONNECTION連接組合字符串中的host_name。

Db:連接組合中的遠程實例的數(shù)據(jù)庫名稱,對應create server中的DATABASE ,對應CONNECTION連接組合字符串中的db_name。

Username:連接組合的遠程實例用戶名,對應create server中的USER ,對應CONNECTION連接組合字符串中的user_name。

Password:連接組合的遠程實例用戶密碼,對應create server中的PASSWORD ,對應CONNECTION連接組合字符串中的password。

Port:連接組合的遠程實例端口,對應create server中的PORT ,對應CONNECTION連接組合字符串中的port_num。

Socket:連接組合的本地實例的socket路徑,對應create server中的SOCKET ,對應CONNECTION連接組合字符串中的host_name。

Wrapper:類似一個協(xié)議名稱,對應create server中的WRAPPER ,對應CONNECTION連接組合字符串中的scheme。

PS:

CONNECTION字符串方式不會在mysql.servers表中添加記錄。

到此,關于“分析mysql系統(tǒng)庫日志信息記錄表”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI