有人說目前為止8.0是最好的版本,我們來看看在運維方面MySQL 8.0帶來了哪些便捷命令。
自MySQL 8.0 GA版本發布以來,MySQL生態發生了很大的變化,推出了很多功能 ,有人說目前為止8.0是最好的版本。隨之而來的在運維方面帶來了很多便捷命令。
下面選出日常運維常用的最便捷的4個命令:RESTART,PERSIST,RETAIN CURRENT PASSword,EXPLAIN。
RESTART
RESTART語句從客戶機會話中執行此重新啟動命令:算是萬能的命令了。 重啟的一個用途是:
- MySQL窮住無法在處理服務;
- 靜態系統變量進行配置更改,只能在服務啟動生效;
- 日常運維維護窗口,硬件升級,遷移等;
- 復雜的環境中,無法確認my.cnf文件,但必須重新啟動服務;
- 測試環節中需要清空緩存;
傳統的方式是 注冊服務方式,或則 mysqld_safe方式,mysqladmin shutdown,客戶端shutdwon,kill 等命令。
8.0支持命令行restart命令:
mysql> RESTART;
Query OK, 0 rows affected (0.00 sec)
Error 日志信息:
ps進程跟蹤:
備注:pid沒有變化 ,需要shutdown權限
PERSIST
PERSIST,PERSISTONLY將變量設置寫入mysqld-auto.cnf。就是把動態變量,記錄到配置文件列。 有兩種命令:PERSIST和PERSISTONLY,
- PERSIST修改動態變量的同時,寫入配置文件。
- PERSIST_ONLY只讀系統變量,先記錄到配置文件,服務重新啟動的時生效。
mysql> SET PERSIST max_connect_errors=100;
Query OK, 0 rows affected (0.00 sec)
mysql數據目錄:
json格式寫入:
PERSIST適合配置動態變量,生效的同時會記錄到mysqld-auto.cnf文件里。
PERSIST_ONLY適合配置只讀變量的設置,會記錄mysqld-auto.cnf文件,但只能在服務器啟動時設置的只讀系統變量
RETAIN CURRENT PASSWORD
雙密碼功能,在MySQL 8.0.14中可用
保留當前密碼保留一個帳戶的當前密碼作為它的輔助密碼,替換任何現有的輔助密碼。新密碼成為主密碼,但是客戶機可以使用主密碼或輔助密碼使用該帳戶連接到服務器。
例外情況:
- 如果SET password語句指定的新密碼為空,則輔助密碼也變為空,即使給定了當前密碼。
- 如果為主密碼為空的帳戶指定保留當前密碼,則語句失敗。
- 如果一個帳戶有一個輔助密碼,而您更改了它的主密碼而沒有指定保留當前密碼,輔助密碼將保持不變。
命令:
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.01 sec)
mysql> ALTER USER 'testuser'@'localhost' IDENTIFIED BY 'test123' RETAIN CURRENT PASSWORD;
Query OK, 0 rows affected (0.01 sec)
兩種方式登錄,都可行:
[root@ens8 ~]# mysql -utestuser -p123456
[root@ens8 ~]# mysql -utestuser -ptest123
備注:避免管理員變動root密碼忘掉,通過skip-grants-tables方式重置密碼。
EXPLAIN
EXPLAIN:用于獲取查詢執行計劃,
EXPLAIN FORMAT=TREE查詢執行信息使用樹輸出格式顯示,其中節點表示迭代器.返回所有行的時間,迭代器返回的行數
EXPLAIN ANALYZE:估計執行成本,估計返回的行數,返回所有行的時間(實際開銷以毫秒為單位),迭代器返回的行數,數量的循環
3種不同語句對比:
mysql> EXPLAIN SELECT * FROM employees WHERE first_name LIKE 'C%' LIMIT 5;
mysql> EXPLAIN FORMAT=TREE SELECT * FROM employees WHERE first_name LIKE 'C%' LIMIT 5;
mysql> EXPLAIN ANALYZE SELECT * FROM employees WHERE first_name LIKE 'C%' LIMIT 5;
非常實用的命令擴展,帶來優化的方便性。
SET_VAR
臨時設置session會話變量。
##指定執行計劃
mysql> SELECT /*+ SET_VAR(optimizer_switch = 'mrr_cost_based=yes') */ 1;
##唯一鍵檢查
mysql> SELECT /*+ SET_VAR(unique_checks=OFF) */ @@unique_checks;
##排序緩存
mysql> select /*+ SET_VAR(sort_buffer_size = 16M) */ id from test order id;
備注:在sql語法中增加SET_VAR語法,動態調整部分參數,有利于提升語句性能。特定語句可以有效分配mysql內部資源。
總結
上述4個命令對于目前工作使用中帶來方便很明顯。除了之外也有很多。比如:MySQL8.0.21版本中的util.dumpSchemas方式。8.0值得深入去了解,使用 和 學習。