mysql初識之日志文件篇 日志文件 1. err日志 error log 記錄mysql在運行的過程中所有較為嚴重的警告和錯誤信息,以及mysql server每次啟動和關閉的詳細信息。系統在默認情況下關閉error log 功能。error log 默認存放在data目錄下,默認文件名為主機名.err。error log 通過兩種方式開啟: 1). 啟動mysqld時,附加上--log-error參數 2) . 在my.cnf中配置log-error系統環境變量 當進入mysql後執行 flush logs命令後,mysql會將當前的錯誤日志文件附加-old文件保存,並且創建一個新的空錯誤日志文件,僅僅在指定--log-error的情況下。 注:error log 不全是保存是警告和錯誤信息,還保存每次啟動和關閉的信息。
ps啟動時信息: 130420 16:19:29 mysqld_safe mysqld from pid file /data0/mysql_data_7706/FZTEST-24178.pid ended 130420 16:19:30 mysqld_safe Starting mysqld daemon with databases from /data0/mysql_data_7706 error: Found option without preceding group in config file: /data0/mysql_data_7706/my.cnf at line: 1 Fatal error in defaults handling. Program aborted 130420 16:19:30 [Note] Plugin 'FEDERATED' is disabled. 130420 16:19:30 [Note] Plugin 'ndbcluster' is disabled. 130420 16:19:30 InnoDB: Initializing buffer pool, size = 8.0M 130420 16:19:30 InnoDB: Completed initialization of buffer pool (以下省略) 查看error 日志是否啟動: mysql> show variables like 'log_error'; +---------------+---------------------+ | Variable_name | Value | +---------------+---------------------+ | log_error | /var/log/mysqld.log | +---------------+---------------------+ 1 row in set (0.00 sec) 關閉mysql: mysqladmin -uroot -p shutdown
2. 二進制日志(binlog) binlog日志主要記錄mysql的更新內容,記錄每一條更新語句的執行的時間、消耗的資源,以及相關的事務信息。可以用於實時備份,與master/slave復制。 如何打開: my.cnf中[mysqld] 節點上添加 查看binlog是否打開
mysql> show variables like 'log_%'; +---------------------------------+-----------------+ | Variable_name | Value | +---------------------------------+-----------------+ | log_bin | ON | 查看binlog內容: /usr/local/mysql3306/bin/mysqlbinlog mysql-bin.00002 log-bin-index文件作用: 記錄目錄所有binlog文件 [root@FZTEST-24178 mysql_data_7706]# cat mysql_7706-relay-bin.index ./mysql_7706-relay-bin.000032 binlog格式說明: [root@localhost ~]# mysqlbinlog /home/mysql/binlog/binlog.000003 | more /*!40019 SET @@session.max_insert_delayed_threads=0*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER /*!*/; # at 4 #120330 16:51:46 server id 1 end_log_pos 98 Start: binlog v 4, server v 5.0.45-log created 120330 1 6:51:46 # Warning: this binlog was not closed properly. Most probably mysqld crashed writing it. # at 196 #120330 17:54:15 server id 1 end_log_pos 294 Query thread_id=3 exec_time=2 error_code=0 SET TIMESTAMP=1333101255/*!*/; insert into tt7 select * from tt7/*!*/; # at 294 #120330 17:54:46 server id 1 end_log_pos 388 Query thread_id=3 exec_time=28 error_code=0 SET TIMESTAMP=1333101286/*!*/; alter table tt7 engine=innodb/*!*/;
解析binlog格式 位置 位於文件中的位置,“at 196”說明“事件”的起點,是以第196字節開始;“end_log_pos 294”說明以第294字節結束 時間戳 事件發生的時間戳:“120330 17:54:46” 事件執行時間 事件執行花費的 錯誤碼 錯誤碼為:“error_code=0” 服務器的標識 服務器的標識id:“server id 1” 其他參數說明: 1). binlog_do_db:表示記錄指定數據庫的二進制日志 2).binlog_ignore_db:表示忽略指定的數據庫的二進制日志 3). max_binlog_cache_size:表示使用binlog時最大的內存值 4). binlog_cache_size 此參數表示binlog使用的內存大小,可以通過狀態變量binlog_cache_use和binlog_cache_disk_use來幫助測試。 binlog_cache_use:使用二進制日志緩存的事務數量 binlog_cache_disk_use:使用二進制日志緩存但超過binlog_cache_size值並使用臨時文件來保存事務中的語句的事務數量 5).max_binlog_size Binlog最大值,最大和默認值是1GB,該設置並不能嚴格控制Binlog的大小,尤其是Binlog比較靠近最大值而又遇到一個比較大事務時,為了保證事務的完整性,不可能做切換日志的動作,只能將該事務的所有SQL都記錄進當前日志,直到事務結束 6).sync_binlog 這個參數直接影響mysql的性能和完整性 sync_binlog=0: 當事務提交後,Mysql僅僅是將binlog_cache中的數據寫入Binlog文件,但不執行fsync之類的磁盤 同步指令通知文件系統將緩存刷新到磁盤,而讓Filesystem自行決定什麼時候來做同步,這個是性能最好的。 sync_binlog=n,在進行n次事務提交以後,Mysql將執行一次fsync之類的磁盤同步指令,同志文件系統將Binlog文件緩存刷新到磁盤。 Mysql中默認的設置是sync_binlog=0,即不作任何強制性的磁盤刷新指令,這時性能是最好的,但風險也是最大的。一旦系統繃Crash,在文件系統緩存中的所有Binlog信息都會丟失。 查詢日志 查詢日志即記錄所有的查詢語句的日志,一般建議不開啟,有些query語句比較大,開啟後對性能的也有較大的影響。一般用於跟蹤某特殊 的性能問題才會短暫打開功能,默認的查詢日志文件名為主機名.log。 慢查詢日志 慢查詢日志記錄的是查詢需要較長時間的query,通過在[mysqld] 下添加log-slow-queries=/tmp/slow_log 打開些功能,默認文件名是hostname-slow.log默認的目錄是數據目錄。 分析慢查詢的工具有:msyqlslowdump、mysqlsla innodb在線日志redo日志 innodb是一個事務安全的存儲引擎,其事務安全性主要是通過在線redo日志和記錄在表空間中的undo信息來保證redo日志中記錄了innodb所做的所有物理變更和事務信息,通過redo日志和undo信息,innodb保證了在任何情況下的事務安全性。innodb的redo日志同樣默認存放 在數據目錄下,可通過innodb_log_group_home_dir來更改設置日志的存放公交車,通過innodb_log_files_in_group 設置日志的數量。