前言
在小鸡上跑了个数据库,表里数据快过百万了,每次跑定时任务都要半分钟以上,任务每分钟跑一次,所以小鸡鸡CPU长时间处于满载状态,有必要对数据库进行优化减负。
现象
最简单的方法便是使用PHP-myadmin这种工具了,直接在后台勾选要优化的表,然后对选中表进行分析优化即可。在优化过程中,有可能出现如下提示:
1
| Table does not support optimize, doing recreate + analyze instead
|
这是因为该MySQL表使用的是 innodb
引擎,此时你需要通过其他方式进行优化。
一键shell
在删除完垃圾数据后,对表进行优化可减小表的体积,同时优化索引加快表查询速度,整理了如下命令,保存为 .sh
使用即可。
1 2 3 4 5 6 7 8 9 10 11 12
| #!/bin/sh echo -n "MySQL username: " ; read username echo -n "MySQL password: " ; stty -echo ; read password ; stty echo ; echo
mysql -u $username -p"$password" -NBe "SHOW DATABASES;" | grep -v 'lost+found' | while read database ; do mysql -u $username -p"$password" -NBe "SHOW TABLE STATUS;" $database | while read name engine version rowformat rows avgrowlength datalength maxdatalength indexlength datafree autoincrement createtime updatetime checktime collation checksum createoptions comment ; do if [ "$datafree" -gt 0 ] ; then fragmentation=$(($datafree * 100 / $datalength)) echo "$database.$name is $fragmentation% fragmented." mysql -u "$username" -p"$password" -NBe "OPTIMIZE TABLE $name;" "$database" fi done
|
本文标题:MySQL数据库表优化
文章作者:凹凸曼
发布时间:2018-11-17
最后更新:2018-11-17
原始链接:https://sobaigu.com/mysql-optimize-bash.html
版权声明:转载请务必保留本文链接和注明内容来源,并自负版权等法律责任。