1、對數據庫服務可用性進行監控
數據庫的進程或是端口存在並不意味着數據庫就是可用的,可以通過網絡連接到數據庫並且確定數據庫是可以對外提供服務的
如何確認數據庫是否可以通過網絡連接
1)mysqladmin -umonitor_user -p -h ping
2)telnet ip db_port
3)使用程序通過網絡簡歷數據庫連接
如何確認數據庫是否可讀寫
1)檢查數據的read_only參數是否為off
2)建立監控表並對表中數據進行更改
3)執行簡單的查詢 select @@version
如何監控數據的連接數
show variables like 'max_connections'
show global status like 'Threads_connected'
Threads_connected / max_connections > 0.8
2、對數據庫性能進行監控
如何計算QTS和TPS
QTS=(Queries-Queries1)/(Uptime_since_flush_status2-Uptime_since_flush_status1)
TPS=((Com_insert2+Com_update2+Com_delete2)-(Com_insert1+Com_update1+Com_delete1))/(Uptime_since_flush_status2-Uptime_since_flush_status1)
並發線程數量(並發線程數據不等於數據庫的連接數,是同時處理數據庫sql的數量)
如何監控數據庫的並發請求數量
數據庫系統的性能會隨着並發處理請求數量的增加而下降
show global status like 'Threads_running'
並發處理的數量通常會遠小於同一時間連接到數據庫的線程的數量
如何對Innodb阻塞和死鎖進行監控
SELECT b.trx_mysql_thread_id AS '被阻塞線程'
,b.trx_query AS '被阻塞sql'
,c.trx_mysql_thread_id AS '阻塞線程'
,c.trx_query AS '阻塞sql'
FROM information_schema.`INNODB_LOCK_WAITS` a
JOIN information_schema.`INNODB_TRX` b ON a.requesting_trx_id=b.trx_id
JOIN information_schema.`INNODB_TRX` c ON a.blocking_trx_id=c.trx_id
WHERE (UNIX_TIMESTAMP()-UNIX_TIMESTAMP(c.trx_started))>60;
BEGIN;
SELECT * FROM USER FOR UPDATE;
3、對主從復制進行監控
主從復制鏈路狀態的監控
主從復制延遲的監控
定期的確認主從復制的數據是否一致
1)主上的二進制日志文件名和偏移量
show master status \G
show slave status
2)已經傳輸完成的主上二進制日志的名稱和偏移量
4、對服務器資源的監控
磁盤空間(服務器磁盤空間大並不意味着Mysql數據庫服務能使用的空間就足夠大)
CPU的使用情況,內存的使用情況,Swap分區的使用情況以及網絡IO的情況等