mysql怎么跟踪数据 mysql查找数据

如何实时监控MySql状态首先介绍下 pt-stalk,它是 Percona-Toolkit 工具包中的一个工具,说起 PT 工具包大家都不陌生,平时常用的 pt-query-digest、 pt-online-schema-change 等工具都是出自于这个工具包,这里就不多介绍了 。
pt-stalk 的主要功能是在出现问题时收集 OS 及 MySQL 的诊断信息,这其中包括:
1. OS 层面的 CPU、IO、内存、磁盘、网络等信息;
2. MySQL 层面的行锁等待、会话连接、主从复制,状态参数等信息 。
而且 pt-stalk 是一个 Shell脚本,对于我这种看不懂 perl 的人来说比较友好 , 脚本里面的监控逻辑与监控命令也可以拿来参考,用于构建自己的监控体系 。
三、使用
接着我们来看下如何使用这个工具 。
pt-stalk 通常以后台服务形式监控 MySQL 并等待触发条件,当触发条件时收集相关诊断数据 。
触发条件相关的参数有以下几个:
function:
° 默认为 status,代表监控 SHOW GLOBAL STATUS 的输出;
° 也可以设置为 processlist,代表监控 show processlist 的输出;
variable:
【mysql怎么跟踪数据 mysql查找数据】° 默认为 Threads_running,代表 监控参数,根据上述监控输出指定具体的监控项;
threshold:
° 默认为 25 , 代表 监控阈值,监控参数超过阈值,则满足触发条件;
° 监控参数的值非数字时,需要配合 match 参数一起使用 , 如 processlist 的 state 列;
cycles:
° 默认为 5,表示连续观察到五次满足触发条件时,才触发收集;
连接参数:host、password、port、socket 。
其他一些重要参数:
iterations:该参数指定 pt-stalk 在触发收集几次后退出,默认会一直运行 。
run-time:触发收集后 , 该参数指定收集多长时间的数据,默认 30 秒 。
sleep:该参数指定在触发收集后,sleep 多久后继续监控,默认 300 秒 。
interval:指定状态参数的检查频率 , 判断是否需要触发收集,默认 1 秒 。
dest:监控数据存放路径,默认为 /var/lib/pt-stalk 。
retention-time :监控数据保留时长,默认 30 天 。
daemonize:以后台服务运行,默认不开启 。
log:后台运行日志 , 默认为 /var/log/pt-stalk.log 。
collect:触发发生时收集诊断数据,默认开启 。
° collect-gdb:收集 GDB 堆栈跟踪,需要 gdb 工具 。
° collect-strace:收集跟踪数据,需要 strace 工具 。
° collect-tcpdump:收集 tcpdump 数据,需要 tcpdump 工具 。
mysql数据库审计功能 是否可以跟踪查询mysql服务器自身没有提供审计功能,但是我们可以使用init-connectbinlog的方法进行mysql的操作审计 。由于mysql binlog记录了所有对数据库长生实际修改的sql语句,及其执行时间,和connection_id但是却没有记录connection_id对应的详细用户信息 。在后期审计进行行为追踪时 , 根据binlog记录的行为及对应的connection-id 结合 之前连接日志记录 进行分析,得出最后的结论 。
1. 设置init-connect
1.1 创建用于存放连接日志的数据库和表
create database accesslog;
CREATE TABLE accesslog.accesslog (`id` int(11) primary key auto_increment, `time` timestamp, `localname` varchar(30), `matchname` varchar(30))
1.2 创建用户权限
可用现成的root用户用于信息的读取
grant select on accesslog.*to root;
如果存在具有to *.* 权限的用户需要进行限制 。
这里还需要注意用户必须对accesslog表具有insert权限
grant select on accesslog.*touser@’%’;
1.3 设置init-connect
在[mysqld]下添加以下设置:
init-connect=’insertinto accesslog.accesslog(id, time, localname, matchname)
values(connection_id(),now(),user(),current_user());’
------注意user()和current_user()的区别
log-bin=xxx
这里必须开启binlog
1.4 重启数据库生效
shell /etc/init.d/mysql restart
2. 记录追踪
2.1 thread_id确认
可以用以下语句定位语句执行人
Tencent:~ # mysqlbinlog --start-datetime='2011-01-26 16:00:00'
--stop-datetime='2011-01-26 17:00:00' /var/lib/mysql/mysql-bin.000010
| grep -B 5 'wsj'
COMMIT/*!*/;
# at 767
#110126 16:16:43 server id 1end_log_pos 872Querythread_id=19exec_time=0error_code=0
use test/*!*/;
SET TIMESTAMP=1296029803/*!*/;
create table wsj(id int unsigned not null)
--
BEGIN
/*!*/;
# at 940
#110126 16:16:57 server id 1end_log_pos 1033Querythread_id=19exec_time=0error_code=0
SET TIMESTAMP=1296029817/*!*/;
insert into wsj(id) values (1)
--
BEGIN
/*!*/;
# at 1128
#110126 16:16:58 server id 1end_log_pos 1221Querythread_id=19exec_time=0error_code=0
SET TIMESTAMP=1296029818/*!*/;
insert into wsj(id) values (2)
2.2 用户确认
thread_id 确认以后,找到元凶就只是一条sql语句的问题了 。
mysql select * from accesslog where id=19;
---- --------------------- --------------------- -----------
| id | time| localname| matchname |
---- --------------------- --------------------- -----------
| 19 | 2011-01-26 16:15:54 | test@10.163.164.216 | test@%|
---- --------------------- --------------------- -----------
1 row in set (0.00 sec)
mysql 怎样进行数据库跟踪这个可以借助工具mysql怎么跟踪数据了mysql怎么跟踪数据,如mysql抓包工具 MySQL Sniffer
效果就是,访问数据库mysql怎么跟踪数据的来源ip , 访问的库,表 , sql这样的,如下mysql怎么跟踪数据:
MySQL 如何追踪sql语句的执行不知你是不是指这个:
用惯了微软的ms sql的事件探查器,一直也想在mysql中找到相应的这么一种工具:
修改my.cnf,在mysqld下添加log一行,
[mysqld]
log= /tmp/mysqld.sql
然后 , 重新启动mysql,tail -f /tmp/mysqld.sql,就可以实时看到myql服务器当前正在执行的语句了 。
文章出处:
如何跟踪mysql数据库,并提出优化方案对数据库表单按日期切表,作主从分布,读操作从从库中读取,还有要对表中字段建立索引,如日期!
关于mysql怎么跟踪数据和mysql查找数据的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读