对mysql的一些普通的项目进行监控
1.监控mysql进程和端口
ps -ef|grep mysqld
netstat -lntup|grep mysqld
2.监控mysql是否可连接
本地socket连接
/usr/local/mysql/bin/mysql -uroot -p123456 -S /tmp/socket.sock
tcp连接
mysqladmin -uroot -p123456 -h 192.168.209.131 ping #检测mysql是否可连接
telnet ip mysql端口 #检测mysql是否可连接
3.监控mysql的可读可写
连接数据库后,执行select @@version(); #检测数据是否可读
连接数据库后,查看read-only参数是否off
连接数据库后,可创建一个监控库,专门写入数据的,测试数据库是否可写
4.监控QPS(1s查询次数)和TPS(1s事务数)
show global status like 'queries'; #查询mysql启动到现在一共进行了多少次查询
QPS = (Q2 - Q1) / Q2和21之间的时间差
show global status like '%com_commit%'; #查询mysql启动到现在一共进行了多少次事务
show global status like '%com_rollback%'; #查询mysql启动到现在一共进行了多少次事务回滚
TPS = (Com_commit + Com_rollback) / Seconds
show global status like 'uptime'; #查看数据库启动到现在启动了多长时间
5.查看并发连接数量
show variables like 'max_connectins'; #查看数据库最大连接数
show global status like 'Threads_connected'; #查看当前连接线程数是多少
show global status like 'Threads_running'; #查看有多少个线程连接是正在运行的,因为很多线程连接可能是连接上了,但是是sleep的
6.查看阻塞
#查询被阻塞语句(5.7)---通过下面这个语句可查出哪些语句被阻塞了,但是查询不到被那些语句阻塞了它们
SELECT b.trx_mysql_thread_id AS 'blocked_thread_id'
,b.trx_query AS 'blocked_sql_text'
,c.trx_mysql_thread_id AS 'blocker_thread_id'
,c.trx_query AS 'blocker_sql_text'
,( Unix_timestamp() - Unix_timestamp(c.trx_started) )
AS 'blocked_time'
FROM information_schema.innodb_lock_waits a
INNER JOIN information_schema.innodb_trx b
ON a.requesting_trx_id = b.trx_id
INNER JOIN information_schema.innodb_trx c
ON a.blocking_trx_id = c.trx_id
WHERE ( Unix_timestamp() - Unix_timestamp(c.trx_started) ) > 4;
#查询阻塞语句(5.7)---倒数第二句的c.id=125的125来自第一句语句,查询出正在阻塞的语句是什么。但是这个不准的,因为一个事务里有很多语句,可能第一个语句阻塞了,过了几秒钟,第一个语句执行完了,然后执行第二个语句,第二个语句也阻塞,此时用下面的语句查询源阻塞语句,只会查询到第二句阻塞语句,所以不够准确。
SELECT a.sql_text,
c.id,
d.trx_started
FROM performance_schema.events_statements_current a
join performance_schema.threads b
ON a.thread_id = b.thread_id
join information_schema.processlist c
ON b.processlist_id = c.id
join information_schema.innodb_trx d
ON c.id = d.trx_mysql_thread_id
where c.id=125
ORDER BY d.trx_started\G;
7.监控主从是否正常
show slave status\G
查看
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
这两个进程都是yes,说明同步线程正常
查看
Seconds_Behind_Master: 0
要是等于0说明主从延时很小
或者查看
Exec_Master_Log_Pos: 234 = Read_Master_Log_Pos: 234
那么说明主从延时很小










网友评论