資料庫 sql語句的執行過程
1.
聯結器:
tcp 協議
連線和斷開
校驗許可權、使用者名稱、密碼
連線數:show processList; kill show global variables like 'wait _timeout';
預設休眠時間:8小時
連線後,快取了使用者資訊,資料庫更改了許可權等,需要重新登連線才生效
建立使用者:create user 'xtc'@'localhost' identified by '123456';
更改使用者許可權:grant all privileges on *.* to 'xtc'@'localhost';
重新整理許可權: flush privileges;
更改密碼:alter user 'xtc'@'%' identified by '654321';
更改訪問許可權:update user set host='%' where user='xtc';
查詢表結構:describe user;
查詢快取:
檢視快取狀態:show global variables like "query_cache_type";
開啟快取 :/etc/mysql/my.cnf 增加 query_cache_type=demand (只有查詢中增加 SQL_CACHE 才能命中) off 關閉 預設 on 開啟 更改後需要重啟
檢視命中數量和儲存適量 show status like "%Qcache%"
- Qcache_free_blocks:表示查詢快取中目前還有多少剩餘的blocks,如果該值顯示較大,則說明查詢快取中的記憶體碎片過多了,可能在一定的時間進行整理。
- Qcache_free_memory:查詢快取的記憶體大小,通過這個引數可以很清晰的知道當前系統的查詢記憶體是否夠用,是多了,還是不夠用,DBA可以根據實際情況做出調整。
- Qcache_hits:表示有多少次命中快取。我們主要可以通過該值來驗證我們的查詢快取的效果。數字越大,快取效果越理想。
- Qcache_inserts: 表示多少次未命中然後插入,意思是新來的SQL請求在快取中未找到,不得不執行查詢處理,執行查詢處理後把結果insert到查詢快取中。這樣的情況的次數,次數越多,表示查詢快取應用到的比較少,效果也就不理想。當然系統剛啟動後,查詢快取是空的,這很正常。
- Qcache_lowmem_prunes:該引數記錄有多少條查詢因為記憶體不足而被移除出查詢快取。通過這個值,使用者可以適當的調整快取大小。
- Qcache_not_cached: 表示因為query_cache_type的設定而沒有被快取的查詢數量。
- Qcache_queries_in_cache:當前快取中快取的查詢數量。
- Qcache_total_blocks:當前快取的block數量。
詞法分析器:把sql 語句解析成一棵語法樹,
優化器: 選擇索引
執行器:呼叫引擎介面
bin-log:
server層 引擎公用
二進位制檔案
不限大小,追加寫入,不會覆蓋之前檔案
檢視是否開啟:show global variables like "%log_bin%";
開啟:/etc/mysql/my.cnf 增加:
log-bin=/user/local/mysql/data/binlog/mysql-bin 需要給該目錄賦予許可權
server-id =1 5.7以後需要增加 是唯一標識 自己定義
binlog-format=row #binlog格式,有3種statement 只記錄執行 但是效率低 可能會有主從不一致的問題,row 記錄sql執行後的結果 效率低 安全性好,mixed 兩者結合
sync-binlog=1 #表示每1次執行寫入就與硬碟同步,會影響效能,為0時表示,事務提交時mysql不做刷盤操作,由系統決定
會在指定的目錄生成mysql-bin-000001檔案
檢視binlog檔案:
/usr/bin/mysqlbinlog --no-defaults /usr/local/mysql/data/binlog/mysql-bin.000001
mysql> show variables like '%log_bin%'; 檢視bin-log是否開啟 mysql> flush logs; 會多一個最新的bin-log日誌 mysql> show master status; 檢視最後一個bin-log日誌的相關資訊 mysql> reset master; 清空所有的bin-log日誌
從bin-log恢復資料 恢復全部資料 /usr/bin/mysqlbinlog --no-defaults /usr/local/mysql/data/binlog/mysql-bin.000001 |mysql -uroot -p superzig-operatingtable-1 恢復指定位置資料 /usr/bin/mysqlbinlog --no-defaults --start-position="74311" --stop-position="74582" /usr/local/mysql/data/binlog/mysql-bin.000001 |mysql -uroot -p superzig-operatingtable-1 恢復指定時間段資料 /usr/bin/mysqlbinlog --no-defaults /usr/local/mysql/data/binlog/mysql-bin.000001 --stop-date= "2018-03-02 12:00:00" --start-date= "2019-03-02 11:55:00"|mysql -uroot -p superzig-operatingtable-1