1. 程式人生 > >第 15、16章 MySQL日誌和效能優化

第 15、16章 MySQL日誌和效能優化

日誌分類:
錯誤日誌
查詢日誌
二進位制日誌
慢查詢日誌

  • 二進位制日誌
  1. 啟動和設定二進位制日誌
    首先找到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。

  1. 檢視二進位制檔案
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*/;
  1. 刪除二進位制日誌
    a. RESET MASTER;
    b. PURGE MASTER LOGS

  2. 使用二進位制日誌還原資料庫
    mybinlog恢復資料語法如下:

mysqlbinlog [option] filename |mysql -uuser -p pass
  1. 暫時停止二進位制日誌功能
    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;