下载percona-toolkit:
wget percona.com/get/percona-toolkit.rpm
安装:
yum list|grep DBD
yum list|grep Socket|grep SSL
yum -y install perl-DBD-MySQL.x86_64
yum -y install perl-IO-Socket-SSL.noarch
yum install perl-Time-HiRes
wget http://pkgs.repoforge.org/perl-TermReadKey/perl-TermReadKey-2.30-1.el5.rf.x86_64.rpm
rpm -ivh perl-TermReadKey-2.30-1.el5.rf.x86_64.rpm
rpm -ivh percona-toolkit-2.2.14-1.noarch.rpm
1.pt-variable-advisor:诊断你的参数设置是否合理
pt-variable-advisor localhost --socket=/tmp/mysql.sock --password=123456
2.pt-query-digest慢查询分析
show variables like '%slow%';
show variables like '%long%';
vi my.cnf
slow_query_log=1
long_query_time=0.1
slow_query_log_file=/usr/local/mysql/data/node1-slow.log
或
set global long_query_time=0.1;
set global slow_query_log=1;
select sleep(2);
tail -f /usr/local/mysql/data/node1-slow.log
pt-query-digest /usr/local/mysql/data/node1-slow.log >slow.log
yum install tcpdump
3.验证主从数据一致
在Master上初始化实验数据
create database av;
use av;
create table test(id int primary key,name varchar(20));
insert into test values(1,'a'),(2,'b'),(3,'c'),(4,'d');
Slave从库添加一个数据,模拟主从数据不一致的场景。
insert into test values(5,'e');
shell> pt-table-checksum \
--replicate=percona.checksums \
--host=<MASTER_HOST> \
--user=<MASTER_USER> \
--password=<MASTER_PASSWORD>
只用在master上检查
pt-table-checksum --user=root --password=123456 --host=192.168.168.142 --databases=av
TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE
07-23T16:34:46 0 1 4 1 0 0.014 av.test
从库要加下my.cnf
report_host=192.168.168.140
report_port=3306
#先M的IP,再S的IP
pt-table-sync --replicate=percona.checksums --databases=av h=127.0.0.1,u=root,p=123456 h=192.168.168.140,u=root,p=123456 --print
--print:只显示,不执行,如果要执行则:
pt-table-sync --replicate=percona.checksums --databases=av h=127.0.0.1,u=root,p=123456 h=192.168.168.140,u=root,p=123456 --execute
pt-table-sync --replicate=percona.checksums --databases=av h=127.0.0.1,u=root,p=123456 h=192.168.168.140,u=root,p=123456 --dry-run --execute --verbose
MySQL数据库CPU飙升紧急处理方法
运行平稳的数据库,如果遇到CPU狂飙,到80%左右,那一定是开发写的烂SQL导致的,DBA首先要保证的是,数据库别跑挂了,所以我们要把那些运行慢的SQL杀死并记录到文件里,以便后面的排查。
这里用到一个工具pt-kill,它可以帮助你。
|
1
|
pt-kill --match-info "^(select|SELECT)" --busy-time 3 --victim all --interval 1 --kill --print --daemonize > /root/kill.txt
|
解释:只把select耗时3秒以上的SQL全部杀死,并打印出来。
模拟测试
这样就给杀死了,然后查看LOG。
会把杀死的SQL记录下来,然后再跟开发慢慢排查,有问题的SQL一定不能让开发随意上线的!
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/91975/viewspace-1743350/
,如需转载,请注明出处,否则将追究法律责任。