MySQL常用命令匯總(偏向運維管理)


基礎部分

1. select @@version; ##查詢當前mysql的版本.

2. show variables like 'port';##查看mysql實例的端口。

3. show variables like 'socket';##查看實例的socket數據。

4. show variables like 'datadir';##查看實例的數據路徑。

5. show databases;   ##顯示所有數據庫名的命令 。

6. desc tablename;   ## 顯示表結構和列結構的命令。

7. show processlist \G;##顯示正在執行的線程。

8. explain ##查看語句的執行計划。

9. show index from table_name ##查看表的索引情況。

10. select * from STATISTICS where table_name='XXX'\G ##查看表的統計信息。

11. select @@max_allowed_packet; ## 查詢定義的packet大小。

12. show master status;##查看master狀態。可以查看 最后(最新)一個binlog日志的編號名稱,及其最后一個操作事件pos結束點(Position)值

      show slave status ;##查看slave狀態。

13. show master logs;##查看所有的log文件,在主服務器上執行。(即查看所有binlog日志列表)

14. purge binary logs to 'mysql-bin3306.000003';  #mysql-bin3306.000003之前的日志被purge。

15. show warnings; ##顯示最近的警告詳情。

16. show variables \G; ##查看當前mysqld的所有參數,包括默認值。

17. show grants for 'username'@'hostip' \G; ##查看某一個用戶的權限,請替換參數username 和 hostip。

18.  show create table tablename \G; ##查看某表的創建腳本

實例參數部分

19. show variables like 'log_slave%' \G; ##指定條件的參數設置查詢,例如查詢以log_slave開頭的參數設置。

20. show variables like 'slow_query_log';##查看是否開啟了慢查詢日志;ON代表開啟。可以在線打開。set global slow_query_log = 1;

21. show variables like 'slow_query_log_file';## 查看慢查詢日志的路徑。

22. show variables like 'long_query_time'; ##查看慢查詢定義的閾值,單位是秒。記錄的查詢是大於該值,不包括該值。

23. show variables like 'log_output'; ##查看日志的輸出格式(file或table)。

24. show variables like 'log_timestamps';##查看日志的時間信息,UTC時間或者SYSTEM時間。

25. show variables like 'log_slow_slave_statements';##查看從服務器是否開啟慢查詢日志,ON代表開啟。

26. show variables like 'log_queries_not_using_indexes';##將沒有使用索引的SQL語句記錄到慢查詢日志中。

27. show variables like 'log_throttle_queries_not_using_indexes';##集合上面的參數一起使用,限制每分鍾內,在慢查詢日志中,記錄沒有使用
索引的次數。避免日志快速增長。

28. show variables like "default%tmp%";查看創建的臨時表的存儲引擎類型。

29. show variables like 'innodb_log_file_size';##查詢log文件大小。

30. show variables like 'innodb_page_size'; ##查詢頁的大小。一旦數據庫通過innodb_page_size設置完成,則后續無法更改。innodb_page_size
是針對普通表的,壓縮表不受限制。

31. show variables like 'innodb_buffer_pool_size';##查看緩沖池的大小,每次讀寫數據都是通過buffer pool;當buffer pool中沒有所需的數據
時,才去硬盤中獲取。該值設置的越大越好。buffer pool 也是以頁(page)為單位的,且大小和innodb_page_size一致。

32. show variables like 'innodb_buffer_pool_instances'; ##設置多少個緩沖池。設置多個instance可將熱點打散,提高並發性能(建議設置成cpu
個數值)

33. show engine innodb status \G;##查看buffer pool的狀態。(查看默認存儲引擎的類型:   SELECT @@default_storage_engine;)

34. set global innodb_buffer_pool_size=2*1024*1024*1024;##在線調整innodb_buffer_pool_size。MySQL 5.7之前的版本,修改該值,需要重啟。

35. show variables like 'innodb_buffer_pool_dump_at_shutdown'; ##在MySQL 5.6 以后,可以在停機的時候dump出buffer pool的數據,然后在
啟動的時候Load進buffer pool。該功能可以在MySQL啟動時自動預熱,無需人工干預。

36. show variables like 'innodb_buffer_pool_dump_pct';##dumpd 百分比,是每個buffer pool文件,而不是整體。

37. show variables like 'innodb_buffer_pool_load_at_startup';## 啟動時加載dump的文件,恢復到buffer pool中。dump的越多,啟動的越慢。

38. select * from innodb_lock_waits;##查看鎖的信息,在數據庫sys下執行。

39. show variables like 'transaction_isolation'; ##查看隔離級別

40. set transaction_isolation='read-committed'; ##設置隔離級別。

41.show variables like 'innodb_print_all_deadlocks';##設置為ON,表示將死鎖信息打印到err_log中。

42.show variables like "%innodb_flush_log_at_timeout%";##master thread 每秒刷新redo的buffer到logfile。5.7版本可以設置刷新間隔時間,
默認是1秒。

43. show variables like 'binlog_format';##查看binlog的類型。statement 記錄SQL語句;ROW 記錄SQL語句操作的那些行(行的變化);mixed 混
合statement 和 Row 格式(不推薦)。

MHA 常用命令 

44. masterha_check_ssh --conf=/etc/masterha/app1.conf    ##檢查MHA集群SSH配置。

45. masterha_check_repl --conf=/etc/masterha/app1.conf   ##檢查整個集群的復制狀況。

46. masterha_check_status --conf=/etc/masterha/app1.conf ##檢查MHA Manager的狀態:如果正常,會顯示"PING_OK",否則會顯示"NOT_RUNNING" ,這代表MHA監控沒有開啟。

47. nohup masterha_manager --conf=/etc/masterha/app1.conf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 & ###監控進程通過nohup管理,可以通過jobs查看后台進程。

48. show slave hosts;##在master節點上執行,查看Slave節點數據。

50. CHANGE MASTER TO MASTER_HOST='172.XXX.XXX.XXX',MASTER_USER='replname',MASTER_PASSWORD='pwd',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=154; ##change master 示例

51. 若在Slave機器上對數據庫進行修改或者刪除,會導致主從的不一致,需對Slave機器設置為read_only = 1 ,讓Slave提供只讀操作。

   注意: read_only 僅僅對沒有SUPER權限的用戶有效(即 mysql.user表的Super_priv字段為Y),一般給App 的權限是不需要SUPER權限的。參數super_read_only 可以將有SUPER權限的用戶也設置為只讀,且該參數設置為ON 后, read_only 也跟着自動設置為ON。

52. show variables like "server_uuid";## 查看UUID。 GTID(G lobal T ransaction Id entifier) 全局事物ID。GTID = Server_UUID +
Transaction_ID 其中 Server_UUID 是全局唯一的,Transaction_ID 是自增的。

53. show variables like "%gtid%";##查看gtid相關數據及配置

54.從服務器跳過一個錯誤的事務
    步驟1: 關閉復制
    stop slave;
    步驟2 : 設置 gtid_next 為回放失敗的gtid
    set session gtid_next='4e659069-3cd8-11e5-9a49-001c4270714e:1'; #在session里設置gtid_next,即跳過這個GTID
    步驟3 : 執行一個空的事物,讓回放失敗的gtid對應到這個空的事物
    begin;
    commit;
    步驟4 : 還原gtid_next為automatic
    SET SESSION GTID_NEXT = AUTOMATIC; #把gtid_next設置回來
    步驟5: 開啟復制
    start slave;

55. 通過GTID的復制都是沒有指定MASTER_LOG_FILE和MASTER_LOG_POS的,所以通過GTID復制都是從最先開始的事務開始,除非在自己的binlog里面有執行過之前的記錄,才會繼續后面的執行。Slave如何跳過purge的部分,而不是在最先開始的事務執行。
     步驟1:在主上執行,查看被purge的GTID
     show global variables like 'gtid_purged';

     以下步驟在從上執行,跳過這個GTID:
     步驟2
    stop slave;
    步驟3
    reset master;
    步驟4
    start slave;

其他部分

56. show binlog events in 'mysql-bin.000008'; ##查看指定binlog中的內容。

57. flush binary logs;#刷新日志,並且會產生一個新的日志文件。

58. show variables like "binlog_rows_query_log_events";##設置為ON,可以在ROW格式下,看到SQL的信息。

60. show variables like "binlog_cache_size";##binlog默認寫入到binlog_cache中,系統默認是32K,當有一個大的事務時(幾百兆),內存中顯然
放不下那么多binlog,所以會記錄到磁盤上。

61. show global status like 'binlog_cache_disk_use';##記錄了使用臨時文件寫二進制日志的次數。注意:寫日志本來就停滿的,如果cache寫不下,
再寫入磁盤,然后再寫binlog,就是寫入2次磁盤,會更慢。如果參數binlog_cache_disk_use次數很多,就要看一下binlog_cache_size設置是否太小,
或者事務本身是否太大。

62.xtrabackup 只能備份innodb存儲引擎表(用的較少);innobackupex可以備份其他存儲引擎(含innodb)。innobackupex在xtrabackup的基礎上做
了包裝,可以兼容各種存儲引擎。

63 .mysqldump重要參數 --all-databases :備份所有的數據庫;--databases DB1 [DB2 DB3] :備份指定的數據庫;--single-transaction : 在一個
事物中導出,確保產生一致性的備份,當前只對innodb支持;--master-data : 備份的時候dump出CHANGE MASTER 信息(file 和 pos),可供主從復制
的時候使用, 默認值為1,當值設置為2 的時候,也會dump出信息,但是會被注釋掉 。

參數說明:
-B:指定數據庫
-F:刷新日志
-R:備份存儲過程等

由於上面在全備份的時候使用了-F選項,那么當數據備份操作剛開始的時候系統就會自動刷新log,這樣就會自動產生
一個新的binlog日志,這個新的binlog日志就會用來記錄備份之后的數據庫“增刪改”操作

64. show variables like '%slave_parallel_workers%';##從數據庫用來還原的並發線程數。

65.通過 mysqlbinlog工具去查看二進制文件binlog,內容較多,不容易分辨查看pos點信息。

mysql> show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];

選項解析:IN 'log_name' 指定要查詢的binlog文件名(不指定就是第一個binlog文件)
                  FROM pos 指定從哪個pos起始點開始查起(不指定就是從整個文件首個pos點開始算)
                  LIMIT [offset,] 偏移量(不指定就是0)
                  row_count 查詢總條數(不指定就是所有行)

 

66.從binlog日志恢復數據

 恢復語法格式:
 # mysqlbinlog mysql-bin.0000xx | mysql -u用戶名 -p密碼 數據庫名
(上面的mysql 可以是mysql可執行文目錄bin下的mysql文件,例如 /data/mysql57/bin/mysql,如果是多實例或者socket不是默認的,還需指定 -S 選項。)
例如以下的一個恢復案例
 /data/mysql57/bin/mysqlbinlog  --no-defaults --start-position=1210 --stop-position=2019 --database=測試數據庫 /data/mysql_test/mysql3306_bin.000009 |  /data/mysql57/bin/mysql -S /tmp/mysql_3307.sock -u用戶名 -p密碼

 常用選項:
  --start-position=???                   起始pos點
  --stop-position=???                    結束pos點
  --start-datetime="XXXXXXX"             起始時間點
  --stop-datetime="XXXXXXXX"             結束時間點
  --database=要恢復的數據庫名字             指定只恢復zyyshop數據庫(一台主機上往往有多個數據庫,只限本地log日志)
            
  不常用選項:    
  -u --user=name              Connect to the remote server as username.連接到遠程主機的用戶名
  -p --password[=name]        Password to connect to remote server.連接到遠程主機的密碼
  -h --host=name              Get the binlog from server.從遠程主機上獲取binlog日志
  --read-from-remote-server   Read binary logs from a MySQL server.從某個MySQL服務器上讀取binlog日志

 小結:實際是將讀出的binlog日志內容,通過管道符傳遞給mysql命令。這些命令、文件盡量寫成絕對路徑;

 67.查看某數據庫下賬號

select * from mysql.db WHERE db LIKE 'db_name';

(root超級權限的賬號除外)

 

68.mysql 5.7 新特性中在線in-place 修改字段的大小(VARCHAR inplace enlarge)

255字節長度是個門檻;不跨越255長度門檻即可在線調大;

沒必要再為VARCHAR列預留更大長度;縮短長度不能in-place。

提示錯誤如下:

ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY

如果沒有 ALGORITHM=INPLACE 參數是可以修改的。例如

思考點:為什么255字節長度是個門檻?

This is true as long as the number of length bytes required by a VARCHAR column remains the same.只要修改字段后字段varchar所占字節數和原先的相同就能實現,例如對於 VARCHAR 值在 0到 255,只需要一個bytes. 對於 VARCHAR 的值是 256 bytes 或者大於256 需要兩個字節.這樣的話,通過 in-place ALTER TABLE 只支持0到255 之間的修改,或者說256 以及大於256之間修改.in-place alter table 不支持小於256的varchar值變更為大於256的值。因為在這種情況下存儲的字節會從1個字節變為兩個字節。(這里需要着重說明的一點是需要針對不同的字符集來對應如果是英文 0-255 隨便修改如果是其它字符集那么就需要注意了因為不同字符集占存儲位不同)

69. 多源復制時(此處單只多個實例中的數據庫復制同步到一個從實例中,即從實例上的數據庫同步來源於多個主實例)。

如果們在源A實例上刪除一個賬號,在源B上也刪除同一個賬號,第二次執行時,就會導致主從異常,因為從庫上沒有了這個賬號信息。

在從庫上執行: show slave status;

Last_SQL_Errno: 1396
Last_SQL_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction 'ANONYMOUS' at master log mysql-bin.000XXX, end_log_pos XXxxxxxx. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any.

根據提示,查看表performance_schema.replication_applier_status_by_worker

其相關信息為:

*************************** 2. row ***************************
         CHANNEL_NAME: QQ_DO15060
            WORKER_ID: 2
            THREAD_ID: NULL
        SERVICE_STATE: OFF
LAST_SEEN_TRANSACTION: ANONYMOUS
    LAST_ERROR_NUMBER: 1396
   LAST_ERROR_MESSAGE: Worker 2 failed executing transaction 'ANONYMOUS' at master log mysql-bin.000XXX, end_log_pos XXXXXx; Error 'Operation DROP USER failed for 'QQ_user_woaizhonghua'@'108.108.108.%'' on query. Default database: ''. Query: 'drop user 'QQ_user_woaizhonghua'@'108.108.108.%''
 LAST_ERROR_TIMESTAMP: 2017-12-16 18:47:02

解決方案為:Step 1 先創建QQ_user_woaizhonghua 賬號 ;Step 2: stop slave for channel 'QQ_DO15060';Step 3 : start slave for channel 'QQ_DO15060';此時再次查看狀態,恢復正常。

注意:這個多源復制情況下刪除賬號,創建賬號同樣是這個問題。如果源實例A創建了賬號User1,此時會同步到了從實例B上。過了一段時間源實例B再創建了賬號User1,就會導致主從同步報錯。

 70. MHA 中關於VIP 增減

添加:

ifconfig ens3:1 178.10.10.19/23  

#命令解釋ifconfig 網卡名:1 虛擬IP/子網掩碼,可以通過ip addr 獲取

arping -q -c 2 -U -I ens3 178.10.10.19

虛擬IP刷新生效

移除虛擬IP:

ifconfig 網卡:$key down
###例如 上面添加的虛擬IP:
/sbin/ifconfig ens3:1 down

 71.無用戶密碼條件下SSH免密鑰登錄設置

搭建MHA,必須先搭建Server節點的SSH免密鑰登錄設置,但是因為安全要求,我們可能只能通過堡壘機登陸,但沒有用戶相應的密碼。

step1  生成密鑰文件和私鑰文件(id_rsa,id_rsa.pub)

 ssh-keygen -t rsa

注意:此文件位於目錄.ssh 下( 目錄可 ll -d ~/.ssh 查看),通過ll -a 查看。

如果需要轉到root賬號下,可執行 sudo su -

重點在第二步,怎么在沒有賬號密碼的情況下,實現

ssh-copy-id -i ~/.ssh/id_rsa.pub user@17.10.XXX.XXX

因為此步需要輸入密碼。

知識補充:

ssh-copy-id - 將你的公共密鑰填充到一個遠程機器上的authorized_keys文件中。(注意是填充,不是覆蓋)

參數 -i:指定公鑰文件。

解決方案:

其實不一定需要通過這個ssh-copy-id命令進行數據的copy,我們可以直接通過復制粘貼文件中的數據就可以
即將本地主機的公鑰id_rsa.pub 內容 追加 到遠程主機的authorized_keys文件內即可。注意是追加。

此類方法已通過線上使用。

72. 搭建MySQL主從,start slave;查看主從狀態。

  Master_SSL_Verify_Server_Cert: No
         Last_IO_Errno: 2003
         Last_IO_Error: error connecting to master 'q123q_wei123xin@110.110.110.111:3308' - retry-time: 60  retries: 1
         Last_SQL_Errno: 0
         Last_SQL_Error: 

查看log 錯誤類似,

---
2018-12-19 19:54:41 70664 [ERROR] Slave I/O: error connecting to master 'q123q_wei123xin@110.110.110.111:3308' - retry-time: 60  retries: 1, Error_code: 2003
-----

1.密碼不對 2.POS不對 3.網絡問題

可以Ping的通,使用賬號密碼從從節點遠程主節點OK (排除問題1);多次配置,xtraback 和mysqldump 都有問題(基本排除問題 2).

難道是網絡問題?!

最后結果是 : 非標准端口上的 Mysql復制連接錯誤(非標准端口是指除了3306端口以外的MySQL端口 )。

必須在系統上設置  (注意:這里指從庫系統中)

# semanage port -a -t mysqld_port_t -p tcp 3308    (3308指端口號)

 73 Xtrabackup注意事項

如果使用的是xtrabackup,注意從節點會把event還原上去,可能會造成數據不一致,同步失敗的問題。如果主節點有event,需要手動關閉從節點的event。例如,主節點有歸檔刪除數據的event,從節點需要關閉,否則報錯。類似如下錯誤:

Could not execute Delete_rows event on table ????DB.*****table; Can't find record in '*****', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log FIRST, end_log_pos XXXXXXX

74 event 相關命令

查看event是否開啟 : show variables like '%event_sche%';
將事件計划開啟 : set global event_scheduler = 1;
將事件計划關閉 : set global event_scheduler = 0;
(上面參數的設置,注意是否同時修改了my.cnf文件,防止重啟失效)
關閉事件任務 :  alter event eventName on completion preserve disable;
開啟事件任務 : alter event eventName on completion preserve enable;
查看事件任務 : show events \G;

( 也可通過命令show full processlist 查看event。顯示為User:event_scheduler; State;Waiting for next activation.)

75 MySQL 日志文件的截斷和新建

主要用到的語法為:flush-logs [log_type ...]
[僅適用於mysql5.7.x或以上版本]
log_type的可選值包括:binary/ engine/error/general/relay/slow

例如截取slow慢查詢log,具體的步驟如下:

step 1 刷新慢查詢日志文件
mysqladmin -uroot -p flush-logs slow

step 2 重命名舊慢查詢日志
mv slow.log _del_20200421_slow.log

step 3 生成新慢查詢日志文件
mysqladmin -uroot -p flush-logs slow

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM