mysql alert table 日志_MySQL日志
錯誤日志
默認在DATADIR目錄下 host_name.err
可以通過log-error=[file_name]指定
log-error=/mysql-5.6.22/log/alert.log
二進制日志
通過log-bin=[file_name]指定目錄和文件
mysql> show variables like '%log_bin%';
+---------------------------------+-----------------------------------+
| Variable_name?????????????????? | Value???????????????????????????? |
+---------------------------------+-----------------------------------+
| log_bin???????????????????????? | ON??????????????????????????????? |
| log_bin_basename??????????????? | /mysql-5.6.22/log/node1-bin?????? |
| log_bin_index?????????????????? | /mysql-5.6.22/log/node1-bin.index |
| log_bin_trust_function_creators | OFF?????????????????????????????? |
| log_bin_use_v1_row_events?????? | OFF?????????????????????????????? |
| sql_log_bin???????????????????? | ON??????????????????????????????? |
+---------------------------------+-----------------------------------+
6 rows in set (0.00 sec)
log-bin=/mysql-5.6.22/log/node1-bin.log
MySQL日志格式分為3種,statement,row,mixed 可以通過--binlog--format指定
1.Statement:每一條會修改數據的sql都會記錄在binlog中。
優點:不需要記錄每一行的變化,減少了binlog日志量,節約了IO,提高性能。(相比row能節約多少性能與日志量,這個取決于應用的SQL情況,正常同一條記錄修改或者插入row格式所產生的日志量還小于Statement產生的日志量,但是考慮到如果帶條件的update操作,以及整表刪除,alter表等操作,ROW格式會產生大量日志,因此在考慮是否使用ROW格式日志時應該跟據應用的實際情況,其所產生的日志量會增加多少,以及帶來的IO性能問題。)
缺點:由于記錄的只是執行語句,為了這些語句能在slave上正確運行,因此還必須記錄每條語句在執行的時候的一些相關信息,以保證所有語句能在slave得到和在master端執行時候相同 的結果。另外mysql 的復制,像一些特定函數功能,slave可與master上要保持一致會有很多相關問題(如sleep()函數, last_insert_id(),以及user-defined functions(udf)會出現問題).
使用以下函數的語句也無法被復制:
* LOAD_FILE()
* UUID()
* USER()
* FOUND_ROWS()
* SYSDATE() (除非啟動時啟用了 --sysdate-is-now 選項)
同時在INSERT ...SELECT 會產生比 RBR 更多的行級鎖
2.Row:不記錄sql語句上下文相關信息,僅保存哪條記錄被修改。
優點:?binlog中可以不記錄執行的sql語句的上下文相關的信息,僅需要記錄那一條記錄被修改成什么了。所以rowlevel的日志內容會非常清楚的記錄下每一行數據修改的細節。而且不會出現某些特定情況下的存儲過程,或function,以及trigger的調用和觸發無法被正確復制的問題
缺點:所有的執行的語句當記錄到日志中的時候,都將以每行記錄的修改來記錄,這樣可能會產生大量的日志內容,比如一條update語句,修改多條記錄,則binlog中每一條修改都會有記錄,這樣造成binlog日志量會很大,特別是當執行alter table之類的語句的時候,由于表結構修改,每條記錄都發生改變,那么該表每一條記錄都會記錄到日志中。
3.Mixedlevel:?是以上兩種level的混合使用,一般的語句修改使用statment格式保存binlog,如一些函數,statement無法完成主從復制的操作,則采用row格式保存binlog,MySQL會根據執行的每一條具體的sql語句來區分對待記錄的日志形式,也就是在Statement和Row之間選擇一種.新版本的MySQL中隊row level模式也被做了優化,并不是所有的修改都會以row level來記錄,像遇到表結構變更的時候就會以statement模式來記錄。至于update或者delete等修改數據的語句,還是會記錄所有行的變更。
日志的刪除
方法1:
reset master 命令,該命令將刪除所以的BINLOG日志,新日志編號從000001開始
[root@BJ-TNVM-40 log]# ls -ltr
total 56
-rw-rw---- 1 mysql mysql?? 143 Jan? 4 15:27 node1-bin.000001
-rw-rw---- 1 mysql mysql?? 143 Jan? 4 15:32 node1-bin.000002
-rw-rw---- 1 mysql mysql?? 143 Jan? 4 16:06 node1-bin.000003
-rw-rw---- 1 mysql mysql?? 143 Jan? 4 16:08 node1-bin.000004
-rw-rw---- 1 mysql mysql?? 175 Jan? 4 16:12 node1-bin.index
-rw-r----- 1 mysql root? 25432 Jan? 4 16:12 alert.log
-rw-rw---- 1 mysql mysql?? 753 Jan? 4 16:13 node1-bin.000005
mysql> reset master;
Query OK, 0 rows affected (0.06 sec)
mysql> exit
Bye
[root@BJ-TNVM-40 log]# ls -ltr
total 40
-rw-r----- 1 mysql root? 25432 Jan? 4 16:12 alert.log
-rw-rw---- 1 mysql mysql?? 120 Jan? 4 16:39 node1-bin.000001
-rw-rw---- 1 mysql mysql??? 35 Jan? 4 16:39 node1-bin.index
方法2:
使用purge
Examples:
PURGE BINARY LOGS TO 'mysql-bin.010';
PURGE BINARY LOGS BEFORE '2008-04-02 22:46:26';
方法3:
設置參數--expire_logs_days=# 設置日志過期的參數,過了指定天數之后日志被自動刪除
日志其它選項
--binlog-do-db=db_name 如果當前數據庫是use選定的數據庫是db_name則將更新記錄到二進制日志中。
--binlog-ignore-db=db_name 如果當前數據庫是use選定的數據庫是db_name則不將更新保存到二進制日志中。
慢查詢日志
慢查詢日志記錄了所有執行時間超過參數long_query_time(單位:秒)設置并且掃描記錄小于min_examined_row_limit下所有的SQL語句日志。
默認情況下有兩類語句不會記錄到慢查詢日志中:管理語句和不實用索引進行查詢的語句
可以通過參數--log-slow-admin-statements和log_queries_not_using_indexes進行控制
--slow_query_log=[={0|1}] 指定慢查詢狀態,如果不指定或者指定值為1都會打開慢查詢
slow_query_log_file=[file_name]指定慢查詢日志
日志的讀取
mysql> show variables like 'long%';
+-----------------+-----------+
| Variable_name?? | Value???? |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)
mysql> set long_query_time = 2;
Query OK, 0 rows affected (0.00 sec)
mysql> select count(*) from emp;
+----------+
| count(*) |
+----------+
|? 5242892 |
+----------+
1 row in set (2.47 sec)
使用mysqldumpslow查看日志
[root@BJ-TNVM-40 mysql-5.6.22]# mysqldumpslow slow_query.log
Reading mysql slow query log from slow_query.log
Count: 2? Time=19.98s (39s)? Lock=0.00s (0s)? Rows=0.0 (0), root[root]@localhost
insert into emp select * from emp
Count: 1? Time=2.47s (2s)? Lock=0.00s (0s)? Rows=1.0 (1), root[root]@localhost
select count(*) from emp
總結
以上是生活随笔為你收集整理的mysql alert table 日志_MySQL日志的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: easyui动态显示和隐藏表头
- 下一篇: .net mysql 特殊字符转义字符_