您好,登錄后才能下訂單哦!
這篇文章主要介紹“分析mysql系統(tǒng)庫日志信息記錄表”,在日常操作中,相信很多人在分析mysql系統(tǒng)庫日志信息記錄表問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”分析mysql系統(tǒng)庫日志信息記錄表”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
一、日志信息記錄表
默認情況下,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;語句。
要禁用日志記錄表以便進行相應的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
下面是該表中存儲的信息內(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語句文本。
在主從復制架構中。
主庫上在使用基于語句的日志格式時,從庫在在重放這些語句之后,會把這些語句記錄自己的查詢?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)罩荆瑒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 ''。
查詢?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
下面是該表中存儲的信息內(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。
二、混雜表
由于本系列不介紹企業(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>
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。