mysql下的flush操作
如何呼叫flush
使用者需要reload許可權,其語法為 flush flush_option,其中flush_option有如下候選值:
Privileges:重新載入grant tables,當使用create user/grant/revoke等涉及使用者許可權命令時會自動呼叫該命令,而如果使用DML更新grant tables,則需要手工呼叫該命令;
mysql會快取grant/create user等語句且不會因為revoke/drop user而釋放,故當執行大量類似語句後可呼叫flush privileges釋放記憶體
Tables:關閉所有當前open的表並清空query cache(=reset query cache),可以限定候選表flush tables tbl_name[,tbl_name ..,];
其中flush tables with read lock獲取全域性讀鎖以鎖定所有表,備份時經常用到,須使用unlock tables釋放該鎖;
而flush tables tbl_name[,tbl_name ..,] with read lock則獲取相應的表鎖,首先獲取該表的排他鎖,等待現有的事務提交後,清空該表快取並重新以共享鎖模式將其開啟
Hosts:清空host cache,當主機更改IP或者遭遇”Host ‘host_name’is blocked”錯誤時使用;
引數max_connect_errors決定了mysql允許一個主機的最大失敗連線次數,當超過此值時該主機發起的連線將被阻塞並遭遇前面提及的錯誤資訊,此時唯一的解決辦法時呼叫flush hosts清除 host cache;
Mysql使用host_cache快取來自遠端客戶端TCP連線的IP和主機名以及相應錯誤資訊,用以避免DNS解析,採用LRU管理;
對於客戶端連線,mysql使用IP地址檢驗其主機名是否位於host cache中,如果沒有,則先將IP解析成主機名然後將主機反向解析成IP(類似TCP/IP的3次握手);
如果來自某一主機的連線失敗次數達到max_connect_errors,則其後續連線會被阻塞並遭遇Host 'host_name' is blocked,此時可呼叫flush hosts清空快取;
Host cache大小由 host_cache_size決定,可設定為0以禁用;也可透過—skip-name-resolve禁用DNS,mysql只使用IP來匹配grant table,當DNS很慢時可選擇使用;--skip-networking則徹底禁用TCP/IP連線;
在進行解析時伺服器會先嚐試使用gethostbyaddr_r()/gethostbyname_r(),如果OS不支援則改用gethostbyaddr()/gethostbyname(),後者會請求鎖定mutex即不能併發執行;
5.6.5引入host_cache表儲存上述資訊,truncate table host_cache與flush hosts效果一樣;
生產庫應該儘量設定skip_name_resolve以避免對DNS的依賴,當DNS不能正常工作時,會導致客戶端無法透過TCP正常連線資料庫;此外開啟該功能有可能招致DoS攻擊;
http://www.mysqlperformanceblog.com/2008/05/31/dns-achilles-heel-mysql-installation/
Logs:關閉所有的日誌檔案,然後建立一個新的並開啟,而5.5.3以後其語法為flush [log_type] logs,其中log_type包含如下
5.5.7只是關閉並重新開啟日誌檔案,而之前的版本則是將原檔案重新命名為-old並開啟一個新的檔案,如果連續執行兩次則最早的-old則被覆蓋
unix下當mysql伺服器接受到SIGHUP訊號時會執行同等命令;
https://dev.mysql.com/doc/refman/5.5/en/error-log.html
Query cache:整理query cache中的碎片,並不清空其中的內容;
Query cache儲存sql文字以及其查詢結果,類似oracle的result cache,節省了sql解析和執行時間,
Status:將當前執行緒的會話狀態變數值新增至全域性變數,然後將會話值重置為0 ;當debug query需要用到
User_resources:將使用者per-hour資源重置為0
Master:刪除所有二進位制日誌,已經為reset master所取代,mysql 5.6已不支援該命令
Slave:以被reset slave取代,5.6起不再支援
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15480802/viewspace-755271/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- flush logs時做的操作
- mysql關於FLUSH TABLES和FLUSH TABLES WITH READ LOCK的理解MySql
- 關於MYSQL flush table的作用MySql
- mysql flush 命令詳解MySql
- MySQL Flush導致的等待問題MySql
- 【Mysql】FLUSH TABLES WITH READ LOCKMySql
- Linux下的Mysql操作LinuxMySql
- cache操作:clean、invalidate與flush的含義
- MySQL:unblock with 'mysqladmin flush-hosts'MySqlBloC
- MySQL必須flush privileges的兩種情況MySql
- MySQL學習之flush(刷髒頁)MySql
- MySQL5.7 Waiting FOR TABLE FLUSHMySqlAI
- PHP的ob_flush()與flush()區別PHP
- MySQL:Analyze table導致'waiting for table flush'MySqlAI
- Linux下mysql的歷史操作記錄LinuxMySql
- mysql的innodb_flush_log_at_trx_commit引數實驗MySqlMIT
- mysql效能引數innodb_flush_log_at_trx_commitMySqlMIT
- MySQL 5.5 FLUSH TABLES WITH READ LOCK語句介紹MySql
- flush sqlSQL
- kill flush tables的思考
- MySQL:Innodb:innodb_flush_log_at_trx_commit引數影響的位置MySqlMIT
- Windows平臺下MySQL常用操作與命令WindowsMySql
- MySQL的基本操作MySql
- MysqL 磁碟寫入策略之innodb_flush_log_at_trx_commitMySqlMIT
- mysql sync_binlog和 innodb_flush_log_at_trx_commitMySqlMIT
- 面試題:瞭解MySQL的Flush-List嗎?順便說一下髒頁的落盤機制!(文末送書)面試題MySql
- Linux下MySQL基礎及操作語法LinuxMySql
- innodb_flush_method和innodb_flush_log_at_trx_commitMIT
- FenceSyne, flush, waitAI
- Hibernate flush理解
- wampSever的mysql操作MySql
- MySQL 常用的UPDATE操作MySql
- mysql插入慢之所innodb_flush_log_at_trx_commit引數的意義MySqlMIT
- 【Mysql】從庫大量select堵塞,Waiting for table flush 狀態MySqlAI
- 【MySQL】sync_binlog innodb_flush_log_at_trx_commit 淺析MySqlMIT
- 【Mysql】flush privilges 重新整理系統許可權相關表MySql
- mysql操作MySql
- 【MySQL】五、sync_binlog innodb_flush_log_at_trx_commit 淺析MySqlMIT