在MySQL日常维护过程中,熟练使用一些命令,能给日常维护工作带来很多便利,下面是我在MySQL维护过程中整理和收集的维护命令,希望能给大家帮助
1.设置命令行提示,这个很使用,防止在操作生产数据库时,在不停的切换之间迷失自己,造成生产事故
mysql -uroot -p --prompt="\\u@\\h:\\d \\r:\\m:\\s>"
在my.cnf配置文件里永久配置
prompt=mysql(\\u@\\h:\\d)>default-character-set=utf8
下面是设置之后的展示效果
2.查看mysql加载my.cnf的顺序
/usr/sbin/mysqld --verbose --help|grep -A 1 'Default options'
3.查看软件版本
mysqladmin -uroot -proot version
或者使用以下方式
mysql -uroot -proot -e "select version()"
4.查看数据库表锁状态
show status like 'table%';
5.查看帮助文档
? contents;
? data types;
? int;
? show;
? create table;
6.查看索引信息
show index from emp \G;
7.tcpdump工具查找TPS突增问题
tcpdump -i eth0 -A -s 3000 port 3306 > sql.log
注意,我们在使用tcpdump的时候加了-A参数,这样就可以把sql语句都显示出来了
大约执行1分钟后,同时停止执行。这个时候,sql.log文件中已经包含了这段时间执行的所有sql语句。示例如下:
$grep 'update' ./sql.log | head
....5u.vD....update session_table set expire=’2014-12-12 20:01:23’ where sess_id = ‘demostring123’ limit 1
既然我们现在已经有了所有执行的sql语句,我们就可以很容易的通过使用grep, wc 等命令分析出是那些sql语句执行次数猛增了。
8.杀掉连接
select concat('KILL ',id,';') from information_schema.processlist where user='root';
9.查询正在执行的sql
mysqladmin pr -uroot -proot|grep -v -i sleep
10.查看索引的高度
SELECT b.name, a.name, index_id, type, a.space, a.PAGE_NO FROM information_schema.INNODB_SYS_INDEXES a,information_schema.INNODB_SYS_TABLES b WHERE a.table_id = b.table_id AND a.space <> 0;
有了这些信息就可以方便的定位啦,因为PAGE_LEVEL在每个页的偏移量64位置出,占用两个字节,通过hexdump这样的工具就可以快速定位到所需要的树高度信息:
root@test-1:~# hexdump -s 24640 -n 10 customer.ibd
00006040 00 02 00 00 00 00 00 00 00 47
查看customer表,24640表示的是3*8192+64(这里innodb_page_size设置为了8192,并非默认的16384,3代表的是PAGE_NO ),即第3个页偏移量64位置开始读取10个字节,但不是读取2个字节就可以了,其实因为后面8个字节对应的是index_id,就是上图中看到的index为71的索引,这里PAGE_LEVEL为00 02,那么索引的高度就为3
下面是我的公众号二维码,欢迎添加