MySQL記錄執(zhí)行過(guò)的SQL |
發(fā)布時(shí)間: 2012/9/20 16:40:16 |
程序調(diào)試時(shí),一種做法是從前面第一行查起,這種做法非常辛苦(如:程序源文件太多或編譯過(guò)或加密過(guò))。另一種做法就是從后面查起, 反正最后寫(xiě)入的是 DB, 那就從 DB 開(kāi)始往前推, 所以就是要抓住程序是執(zhí)行哪些 SQL 語(yǔ)法. 之前用過(guò)的追蹤法是用 tcpdump 或 wireshark 聽(tīng) 3306 port,這個(gè)太苦, 就不再多說(shuō)~ MySQL 有幾種方法可以用, 將以挑喜歡的其中一種, 加入 /etc/mysql/my.cnf(debian), 再 restart mysql 即可:-
log_slow_queries = /var/log/mysql/mysql-slow.log long_query_time = 2 (超過(guò)2秒的 SQL 語(yǔ)法記錄起來(lái), 設(shè)短一點(diǎn)來(lái)記錄除錯(cuò)也是一種方法.) 第二種: 設(shè) MySQL Replication 用 binlog: log_bin = /var/log/mysql/mysql-bin.log (此檔要用 mysqlbinlog 解來(lái)看) mysql 會(huì)將所有 INSERT/UPDATE/DELETE 語(yǔ)法記于此(但是語(yǔ)法可能跟你想的不同), 這是要寫(xiě)給 SLAVE 用的 log 文件 第三種: 推薦此方法, 將 MySQL 執(zhí)行的每行指令全都記錄起來(lái): log = /tmp/mysql.log restart mysql 后, tail -f /tmp/mysql.log 就可以看到啰! :) 補(bǔ)充: 最早前的方法是 mysqldump, 然后執(zhí)行完后再 mysqldump, 再 diff, 但是在 DB > 1G 后就放棄此方法了.
本文出自:億恩科技【mszdt.com】 服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |