MySQL中開啟和使用通用查詢日誌的執行個體教程_Mysql

來源:互聯網
上載者:User

開啟通用查詢日誌
因為為了效能考慮,一般通用查詢日誌general log不會開啟。slow log可以定位一些有效能問題的sql,而general log會記錄所有的SQL。

mysql5.0版本,如果要開啟slow log、general log,需要重啟,從MySQL5.1.6版開始,general query log和slow query log開始支援寫到檔案或者資料庫表兩種方式,並且日誌的開啟,輸出方式的修改,都可以在Global層級動態修改。

mysql>select version();
+————+| version() |+————+| 5.1.37-log |+————+1 row in set (0.02 sec)

設定日誌輸出方式為檔案(如果設定log_output=table的話,則日誌結果會記錄到名為gengera_log的表中,這表的預設引擎都是CSV):

mysql>set global log_output=file;
Query OK, 0 rows affected (0.00 sec)

設定general log的記錄檔路徑:

mysql>set global general_log_file='/tmp/general.log';
Query OK, 0 rows affected (0.00 sec)

 開啟general log:

mysql>set global general_log=on;
Query OK, 0 rows affected (0.02 sec)

過一段時間後,關閉general log:

mysql>set global general_log=off;
Query OK, 0 rows affected (0.02 sec)

通用查詢日誌的系統變數

log_output=[none|file|table|file,table] #通用查詢日誌輸出格式
general_log=[on|off]      #是否啟用通用查詢日誌general_log_file[=filename]    #通用查詢日誌位置及名字

通用查詢日誌的備份

在Linux或Unix中,你可以通過下面的命令重新命名檔案

並建立一個新檔案:

shell> mv hostname.log hostname-old.logshell> mysqladmin flush-logsshell> cp hostname-old.log to-backup-directoryshell> rm hostname-old.log

在Windows中,伺服器開啟記錄檔期間不能重新命名記錄檔。必須先停止伺服器然後重新命名記錄檔。然後重啟伺服器來建立新記錄檔。

示範通用查詢日誌的使用

a、啟用通用查詢日誌

--示範環境root@localhost[(none)]> show variables like '%version%';
+-------------------------+------------------------------+| Variable_name  | Value  |+-------------------------+------------------------------+| innodb_version | 5.5.39  || protocol_version | 10   || slave_type_conversions |   || version  | 5.5.39-log  || version_comment | MySQL Community Server (GPL) || version_compile_machine | x86_64  || version_compile_os | Linux  |+-------------------------+------------------------------+
--查看系統變數root@localhost[(none)]> show variables like '%general%';
+------------------+----------------------------+| Variable_name | Value  |+------------------+----------------------------+| general_log | OFF  || general_log_file | /var/lib/mysql/suse11b.log |+------------------+----------------------------+
--查看當前的通用日誌,顯示無記錄檔root@localhost[(none)]> system ls /var/lib/mysql/suse11b.log 
ls: cannot access /var/lib/mysql/suse11b.log: No such file or directory
--設定變數general_log以開啟通用查詢日誌root@localhost[(none)]> set @@global.general_log=1;
Query OK, 0 rows affected (0.00 sec)
--再次查看通用記錄檔已存在root@localhost[(none)]> system ls /var/lib/mysql/suse11b.log /var/lib/mysql/suse11b.logroot@localhost[(none)]> select * from tempdb.tb1; --執行查詢
+------+------+| id | val |+------+------+| 1 | jack |+------+------+
--查看通用記錄檔內容root@localhost[(none)]> system more /var/lib/mysql/suse11b.log/usr/sbin/mysqld, Version: 5.5.39-log (MySQL Community Server (GPL)). started with:
Tcp port: 3306 Unix socket: /var/lib/mysql/mysql.sockTime  Id Command Argument141003 16:18:12 4 Query show variables like '%general%'141003 16:18:55 4 Query select * from tempdb.tb1


b、更改通用查詢日誌位置

root@localhost[(none)]> exit
Byesuse11b:~ # service mysql stopShutting down MySQL...   donesuse11b:~ # mysqld --general_log_file=/tmp/suse11b.log --user=mysql &[1] 47009suse11b:~ # ps -ef|grep mysql|grep -v grepmysql 47009 44514 1 16:22 pts/0 00:00:00 mysqld --general_log_file=/tmp/suse11b.log --user=mysqlroot 47053 44514 0 16:22 pts/0 00:00:00 grep mysqlsuse11b:~ # mysql
root@localhost[(none)]> system ls /tmp/suse11b.log
ls: cannot access /tmp/suse11b.log: No such file or directory
root@localhost[(none)]> show variables like '%gener%';
+------------------+------------------+| Variable_name | Value |+------------------+------------------+| general_log | OFF  || general_log_file | /tmp/suse11b.log |+------------------+------------------+
root@localhost[(none)]> set global general_log=on;
Query OK, 0 rows affected (0.01 sec)
--此時從系統變數看出,通用日誌已經到/tmp目錄下root@localhost[(none)]> show variables like '%gener%';
+------------------+------------------+| Variable_name | Value |+------------------+------------------+| general_log | ON  || general_log_file | /tmp/suse11b.log |+------------------+------------------+
--發布查詢root@localhost[(none)]> select count(*) from tempdb.tb1;
+----------+| count(*) |+----------+| 1 |+----------+
--查看通用記錄檔內容root@localhost[(none)]> system more /tmp/suse11b.log
mysqld, Version: 5.5.39-log (MySQL Community Server (GPL)). started with:Tcp port: 3306 Unix socket: /var/lib/mysql/mysql.sockTime  Id Command Argument141003 16:30:03 1 Query show variables like '%gener%'141003 16:30:09 1 Query select count(*) from tempdb.tb1


c、通用查詢日誌輸出方式

--可以輸出為檔案,表以及不輸出,即TABLE,FILE,NONE--系統變數log_outputroot@localhost[(none)]> show variables like 'log_output';
+---------------+-------+| Variable_name | Value |+---------------+-------+| log_output | FILE |+---------------+-------+
--下面修改為輸出為表方式root@localhost[(none)]> set global log_output='TABLE';
Query OK, 0 rows affected (0.00 sec)
root@localhost[(none)]> show variables like 'log_output';
+---------------+-------+| Variable_name | Value |+---------------+-------+| log_output | TABLE |+---------------+-------+
--發布查詢root@localhost[(none)]> select * from tempdb.tb1;
+------+------+| id | val |+------+------+| 1 | jack |+------+------+
root@localhost[(none)]> system more /tmp/suse11b.log
mysqld, Version: 5.5.39-log (MySQL Community Server (GPL)). started with:Tcp port: 3306 Unix socket: /var/lib/mysql/mysql.sockTime  Id Command Argument141003 16:30:03 1 Query show variables like '%gener%'141003 16:30:09 1 Query select count(*) from tempdb.tb1141003 16:31:00 1 Query show variables like 'log_output'141003 17:00:48 1 Query set global log_output='TABLE' #通用查詢日誌輸出到檔案僅僅記錄到全域變數的修改
--mysql.general_log記錄了通用查詢日誌的資訊root@localhost[(none)]> desc mysql.general_log;
+--------------+------------------+------+-----+-------------------+-----------------------------+| Field | Type | Null | Key | Default  | Extra  |+--------------+------------------+------+-----+-------------------+-----------------------------+| event_time | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP || user_host | mediumtext | NO | | NULL  |  || thread_id | int(11) | NO | | NULL  |  || server_id | int(10) unsigned | NO | | NULL  |  || command_type | varchar(64) | NO | | NULL  |  || argument | mediumtext | NO | | NULL  |  |+--------------+------------------+------+-----+-------------------+-----------------------------+
--從通用查詢日誌表裡查看通用查詢日誌的內容root@localhost[(none)]> select thread_id,command_type,argument from mysql.general_log; 
+-----------+--------------+---------------------------------------------------------------+| thread_id | command_type | argument    |+-----------+--------------+---------------------------------------------------------------+| 1 | Query | show variables like 'log_output'   || 1 | Query | select * from tempdb.tb1   || 1 | Query | desc mysql.general_log   || 1 | Query | select thread_id,command_type,argument from mysql.general_log |+-----------+--------------+---------------------------------------------------------------+
root@localhost[(none)]> show variables like 'log_output';
+---------------+-------+| Variable_name | Value |+---------------+-------+| log_output | TABLE |+---------------+-------+
--使用FILE,TABLE 2者混合輸出通用日誌root@localhost[(none)]> set global log_output='file,table';
Query OK, 0 rows affected (0.00 sec)
root@localhost[(none)]> select @@global.log_output;
+---------------------+| @@global.log_output |+---------------------+| FILE,TABLE |+---------------------+
root@localhost[(none)]> insert into tempdb.tb1 values(2,'robinson');
Query OK, 1 row affected (0.06 sec)
root@localhost[(none)]> commit;
Query OK, 0 rows affected (0.01 sec)
--驗證結果,表和檔案裡邊存在通用的日誌記錄root@localhost[(none)]> system tail /tmp/suse11b.log|grep robinson
141003 17:41:54 2 Query insert into tempdb.tb1 values(2,'robinson')
root@localhost[(none)]> select thread_id,command_type,argument from mysql.general_log -> where argument like '%robinson%';
+-----------+--------------+------------------------------------------------------------------------+| thread_id | command_type | argument     |+-----------+--------------+------------------------------------------------------------------------+| 2 | Query | insert into tempdb.tb1 values(2,'robinson')  || 2 | Query | select thread_id,command_type,argument from mysql.general_log ||  |  | where argument like ''robinson''   | +-----------+--------------+------------------------------------------------------------------------+


d、關閉通用查詢日誌

--可以通過設定系統變數general_log來關閉通用查詢日誌,此時日誌輸出設定為FILE,TABLE
root@localhost[(none)]> show variables like 'log_output';
+---------------+------------+| Variable_name | Value |+---------------+------------+| log_output | FILE,TABLE |+---------------+------------+
root@localhost[(none)]> set global general_log=off;
Query OK, 0 rows affected (0.01 sec)
root@localhost[(none)]> show variables like '%gener%';
+------------------+------------------+| Variable_name | Value |+------------------+------------------+| general_log | OFF  || general_log_file | /tmp/suse11b.log |+------------------+------------------+
root@localhost[(none)]> delete from tempdb.tb1 where id=2;
Query OK, 1 row affected (0.12 sec)
root@localhost[(none)]> commit;
Query OK, 0 rows affected (0.00 sec)
root@localhost[(none)]> system tail -n 1 /tmp/suse11b.log
141003 17:45:13 2 Query set global general_log=off
root@localhost[(none)]> select thread_id,command_type,argument from mysql.general_log -> where argument like '%delete%';
Empty set (0.00 sec)

--從上面的示範可知,儘管我們設定了log_output為FILE,TABLE,但general_log為OFF,通用日誌無任何記錄產生

root@localhost[(none)]> set global log_output=none;
Query OK, 0 rows affected (0.00 sec)
root@localhost[(none)]> set global general_log=1;
Query OK, 0 rows affected (0.00 sec)
root@localhost[(none)]> truncate table tempdb.tb1;
Query OK, 0 rows affected (0.01 sec)
root@localhost[(none)]> system tail -n 1 /tmp/suse11b.log
Time  Id Command Argument--通過上面的示範,在log_output=none,general_log=on的清下下無任何通用日誌輸出。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.