第 15、16章 MySQL日誌和效能優化
阿新 • • 發佈:2018-12-21
日誌分類:
錯誤日誌
查詢日誌
二進位制日誌
慢查詢日誌
- 二進位制日誌
- 啟動和設定二進位制日誌
首先找到mysql目錄下的my.ini,開啟它,找到[mysqld]組,新增以下幾個引數:
新增完畢後,重啟MySQL伺服器,便可查詢日誌設定:
mysql> SHOW VARIABLES LIKE 'log_%'; +----------------------------------------+---------------------------------------+ | Variable_name | Value | +----------------------------------------+---------------------------------------+ | log_bin | OFF | | log_bin_basename | | | log_bin_index | | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | | log_builtin_as_identified_by_password | OFF | | log_error | E:\wamp64\bin\mysql\mysql5.7.14\data\ | | log_error_verbosity | 3 | | log_output | FILE | | log_queries_not_using_indexes | OFF | | log_slave_updates | OFF | | log_slow_admin_statements | OFF | | log_slow_slave_statements | OFF | | log_statements_unsafe_for_binlog | ON | | log_syslog | ON | | log_syslog_tag | | | log_throttle_queries_not_using_indexes | 0 | | log_timestamps | UTC | | log_warnings | 2 | +----------------------------------------+---------------------------------------+ 19 rows in set, 6 warnings (0.05 sec)
如果想修改日誌檔案的目錄和名稱,可以對my.ini中的log_bin引數修改如下:
[mysqld]
log_bin=“E:/MYSQL/log/binlog”
關閉和重新啟動後,新的二進位制日誌檔案將出現在E:/MYSQL/log/binlog資料夾下面,名稱為binlog.000001和binlog.index。
- 檢視二進位制檔案
mysql> SHOW BINARY LOGS;
ERROR 1381 (HY000): You are not using binary logging
使用mysqlbinlog檢視:
C:\Users\lenovo>mysqlbinlog D:\MySQL\log\binlog.000001 /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; /*!50003 SET @
[email protected]@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER /*!*/; mysqlbinlog: File 'D:\MySQL\log\binlog.000001' not found (Errcode: 2 - No such file or directory) SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/; DELIMITER ; # End of log file /*!50003 SET [email protected]_COMPLETION_TYPE*/; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
-
刪除二進位制日誌
a. RESET MASTER;
b. PURGE MASTER LOGS -
使用二進位制日誌還原資料庫
mybinlog恢復資料語法如下:
mysqlbinlog [option] filename |mysql -uuser -p pass
- 暫時停止二進位制日誌功能
SET SQL_LOG_BIN語法如下:
SET sql_log_bin={0|1}
0代表暫停,1代表恢復記錄。
16章 效能優化
使用索引查詢:
- 使用LIKE關鍵字
mysql> USE index_test;
Database changed
mysql> EXPLAIN SELECT * FROM fruits WHERE f_name LIKE '_%x';
+----+-------------+--------+------------+------+---------------+------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+--------+------------+------+---------------+------+---------+------+------+----------+-------------+
| 1 | SIMPLE | fruits | NULL | ALL | NULL | NULL | NULL | NULL | 16 | 11.11 | Using where |
+----+-------------+--------+------------+------+---------------+------+---------+------+------+----------+-------------+
1 row in set, 1 warning (0.15 sec)
mysql> EXPLAIN SELECT * FROM fruits WHERE f_name LIKE 'x%';
+----+-------------+--------+------------+------+---------------+------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+--------+------------+------+---------------+------+---------+------+------+----------+-------------+
| 1 | SIMPLE | fruits | NULL | ALL | NULL | NULL | NULL | NULL | 16 | 11.11 | Using where |
+----+-------------+--------+------------+------+---------------+------+---------+------+------+----------+-------------+
1 row in set, 1 warning (0.00 sec)
- 使用多列索引
mysql> CREATE INDEX index_id_price ON fruits(f_id,f_price);
Query OK, 0 rows affected (0.89 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> EXPLAIN SELECT * FROM fruits WHERE f_id=5.2;
+----+-------------+--------+------------+------+------------------------+------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+--------+------------+------+------------------------+------+---------+------+------+----------+-------------+
| 1 | SIMPLE | fruits | NULL | ALL | PRIMARY,index_id_price | NULL | NULL | NULL | 16 | 10.00 | Using where |
+----+-------------+--------+------------+------+------------------------+------+---------+------+------+----------+-------------+
1 row in set, 5 warnings (0.08 sec)
從第一條查詢語句可以看出,f_id='12’的記錄有一條。
- 使用OR關鍵字
mysql> EXPLAIN SELECT * FROM fruits WHERE f_name='apple' OR s_id=101\G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: fruits
partitions: NULL
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 16
filtered: 19.00
Extra: Using where
1 row in set, 1 warning (0.00 sec)
ERROR:
No query specified
優化插入記錄速度:
- 禁用索引
禁用索引語句如下:
ALTER TABLE table_name DISABLE KEYS;
重新開啟索引的語句如下:
ALTER TABLE table_name ENABLE KEYS;
- 禁用唯一性查詢
禁用語句:
SET UNIQUE_CHECKS=0;
開啟語句:
SET UNIQUE_CHECKS=1;