Pandas之資料規整清理
目錄
一、日誌的作用及型別
MySQL日誌的作用
- 排錯
- 瞭解MySQL執行情況
MySQL日誌的型別
- 錯誤日誌
- 慢日誌
- 查詢日誌
- 二進位制日誌
二、錯誤日誌
記錄使用者登入和服務出錯相關的資訊,預設是開啟的。
可以在配置檔案中指定錯誤日誌的存放位置,確保啟動MySQL服務的使用者對這個目錄有寫許可權。
在配置檔案中配置錯誤日誌位置,使用log-error或log_error都可以
log-error=/var/log/mysql/mysql.log
如果沒有指定錯誤日誌,預設存放在MySQL的資料目錄下,以主機名.err作為檔名。
檢視錯誤日誌的詳細位置:
Charramma@(none) 11:51 mysql>show variables like 'log_error'; +---------------+--------------------------+ | Variable_name | Value | +---------------+--------------------------+ | log_error | /var/log/mysql/mysql.log | +---------------+--------------------------+ 1 row in set (0.00 sec) Charramma@(none) 11:54 mysql>
什麼時候會寫錯誤日誌到日誌檔案中?
- 登入失敗
- 啟動過程出錯
- 配置檔案出錯
三、慢日誌
作用:記錄了執行時間超過long_query_time引數值的sql語句,可以有效的幫助我們發現實際應用中sql的效能問題,找出執行效率低下的sql語句,為資料庫效能提升提供了線索。
慢日誌存放在資料目錄下,名字是主機名+slow.log。
慢日誌預設是關閉的。
Charramma@(none) 15:21 mysql>show variables like 'slow_query_log'; +----------------+-------+ | Variable_name | Value | +----------------+-------+ | slow_query_log | OFF | +----------------+-------+ 1 row in set (0.00 sec) Charramma@(none) 15:22 mysql>
檢視long_query_time的值,預設為10秒
Charramma@(none) 16:10 mysql>show variables like 'long%';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.01 sec)
Charramma@(none) 16:10 mysql>
通過修改配置檔案開啟慢日誌。
vim /etc/my.cof
[mysqld]
# 開啟慢日誌
show_query_log = 1
# 設定超過1秒為慢日誌
log_query_time = 1
# 指定慢日誌的存放目錄
show_query_log_file=/data/mysql/mysql_slow.log
四、查詢日誌
查詢日誌記錄客戶端操作的所有sql語句,包括select查詢語句在內。預設關閉。
Charramma@(none) 21:53 mysql>show variables like 'general_log';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| general_log | OFF |
+---------------+-------+
1 row in set (0.00 sec)
Charramma@(none) 21:53 mysql>
在配置檔案中開啟查詢日誌。
[mysqld]
general_log
general_log_file=/data/mysql/mysql_ge.log
預設存放在資料目錄下,名字是主機名+log。
由於查詢日誌紀錄了所有資料庫的操作,因此對於訪問頻繁的應用,該日誌會對系統性能造成一定影響,通常建議關閉此日誌。
缺點
-
消耗大量磁碟空間
-
消耗CPU、記憶體、磁碟資源
優點
- 審計:會記錄所有的SQL操作
五、二進位制日誌(Binary Log)
1、什麼是二進位制日誌
MySQL二進位制日誌是一個二進位制檔案,主要記錄了資料庫的改動,如建表、資料改動等,並且記錄了語句發生的時間、執行市場、操作資料等其他額外資訊。
作用:
- 資料恢復
- 主從複製
二進位制日誌預設不開啟。
Charramma@(none) 19:35 mysql>show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | OFF |
+---------------+-------+
1 row in set (0.00 sec)
Charramma@(none) 19:36 mysql>
可以在配置檔案中開啟二進位制日誌。
[mysqld]
# 開啟二進位制日誌
# 指定日誌檔案位置log_bin=/mysql/bin_log/mysql_binlog
log_bin
# 伺服器的標識id
server_id = 1
現在可以檢視二進位制日誌檔名了,如果沒有開啟二進位制日誌是查不到的。二進位制日誌檔案存放在資料目錄下,以主機名-bin.00000*為名
Charramma@(none) 19:36 mysql>show binary logs;
ERROR 1381 (HY000): You are not using binary logging
# ****** 開啟二進位制日誌後 *****
Charramma@(none) 19:41 mysql>show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
1 row in set (0.00 sec)
Charramma@(none) 19:41 mysql>
Charramma@(none) 19:41 mysql>show binary logs;
+----------------------+-----------+
| Log_name | File_size |
+----------------------+-----------+
| localhost-bin.000001 | 5755 |
+----------------------+-----------+
1 row in set (0.00 sec)
Charramma@(none) 19:41 mysql>
檢視二進位制日誌大小限制
Charramma@(none) 20:02 mysql>show variables like 'max_binlog_size';
+-----------------+------------+
| Variable_name | Value |
+-----------------+------------+
| max_binlog_size | 1073741824 |
+-----------------+------------+
1 row in set (0.00 sec)
Charramma@(none) 20:13 mysql>
2、二進位制日誌操作
-
檢視當前伺服器所有的二進位制檔案
Charramma@(none) 19:51 mysql>show binary logs; +----------------------+-----------+ | Log_name | File_size | +----------------------+-----------+ | localhost-bin.000001 | 217592 | +----------------------+-----------+ 1 row in set (0.00 sec) Charramma@(none) 19:52 mysql>show master logs; +----------------------+-----------+ | Log_name | File_size | +----------------------+-----------+ | localhost-bin.000001 | 218475 | +----------------------+-----------+ 1 row in set (0.00 sec) Charramma@(none) 19:52 mysql>
-
檢視當前二進位制日誌檔案狀態
最後(最新)一個binlog日誌的編號名稱,及其最後一個操作事件pos結束點(Position)值。
Charramma@(none) 19:52 mysql>show master status; +----------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +----------------------+----------+--------------+------------------+-------------------+ | localhost-bin.000001 | 241741 | | | | +----------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec) Charramma@(none) 19:53 mysql>
-
重新整理日誌,產生一個新編號的二進位制日誌檔案
Charramma@(none) 19:53 mysql>flush logs; Query OK, 0 rows affected (0.00 sec) Charramma@(none) 20:01 mysql>show master logs; +----------------------+-----------+ | Log_name | File_size | +----------------------+-----------+ | localhost-bin.000001 | 411106 | | localhost-bin.000002 | 2214 | +----------------------+-----------+ 2 rows in set (0.00 sec) Charramma@(none) 20:01 mysql>
-
重置所有二進位制日誌檔案
Charramma@(none) 20:01 mysql>reset master; Query OK, 0 rows affected (0.06 sec) Charramma@(none) 20:02 mysql>show master logs; +----------------------+-----------+ | Log_name | File_size | +----------------------+-----------+ | localhost-bin.000001 | 730 | +----------------------+-----------+ 1 row in set (0.00 sec) Charramma@(none) 20:02 mysql>
3、二進位制日誌的內容
檢視二進位制日誌的內容
# 檢視第一個binlog檔案的內容
Charramma@(none) 20:21 mysql>show binlog events;
# 檢視某個特定的binlog檔案的內容
Charramma@(none) 20:21 mysql>show binlog events in 'localhost-bin.000001' limit 3;
+----------------------+-----+----------------+-----------+-------------+---------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+----------------------+-----+----------------+-----------+-------------+---------------------------------------+
| localhost-bin.000001 | 4 | Format_desc | 1 | 123 | Server ver: 5.7.29-log, Binlog ver: 4 |
| localhost-bin.000001 | 123 | Previous_gtids | 1 | 154 | |
| localhost-bin.000001 | 154 | Anonymous_Gtid | 1 | 219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
+----------------------+-----+----------------+-----------+-------------+---------------------------------------+
3 rows in set (0.00 sec)
Charramma@(none) 20:21 mysql>
- pos pos起始點
- Event_type事件型別
- server id 1 資料庫主機的服務號;
- end_log_pos pos結束點
- SET 執行的sql語句
3、二進位制日誌格式
二進位制日誌有三種格式:
-
Stetament格式
基於語句的,記錄操作的SQL語句。
優點:
- 日誌檔案較小
- 便於閱讀與理解
- 包含原始SQL,方便統計和審計
缺點:
- 可能導致主從不一致,存在安全隱患
- 不能複製部分系統函式
- 不支援不確定的SQL語句
mysql5.7以前Statement是預設的格式
-
Row格式
記錄操作的每一行資料。
優點:
- 相對於Statement有更加安全的複製格式
- 系統的特殊函式也可以複製
- 更少的鎖
- 資料一致性高
缺點:
- 日誌檔案比較大
- 無法看見使用者執行的SQL
mysql5.7之後,預設的格式為Row格式
-
MIXED格式
一種混合格式,混合使用Row和Statement格式,對DDL記錄會使用Statement,對於table裡的行操作會記錄Row格式。如果是Innodb表,事務級別為Read committed 或者 read uncommitted日誌級別只能使用Row格式。