关于Mysql的optimize语句

看到了一个optimize的语句,想尝试一下,但发现这个语句默认只在MyISAM引擎的表上执行,在InnoDB可能会出现错误,于是的确出现了错误:
Table does not support optimize, doing recreate + analyze instead

查找网上的解法,看到了这篇文章:https://blog.csdn.net/e421083458/article/details/39522513
看样子是只需要在启动mysqld进程的时候,增加—skip-new参数即可。但下面还要一个shell脚本一键完成,因此想先尝试shell脚本。

可是发现在shell脚本里仍然不可执行,网上有说即使是用户root,可能也会因为一些错误而导致并非100%具备root的权限,因此尝试改了一下权限(权限在mysql.user表中),仍然不行。

无奈,只好使用第一种方法了。由于不是用systemctl启动的mysql,因此需要找到mysqld的启动进程我感觉以后装service还是直接装服务类型的程序,而不是用.sh文件启动的服务,那个太麻烦了(主要是我没有去刻意记住程序的位置,每一次都要locate,whereis去定位文件位置)。

然后发现关闭失败,即使找到process ID,kill -9,也无法关闭。然后我发现了一个很好的mysql管理命令:mysqladmin -u root -p command
即使用root用户去运行mysql的某个“command”,启动命令之后先输入password,即可执行。
然后这里是关闭,所以是:mysqladmin -u root -p shutdown。没有显示异常。
再查找一下mysqld是否还存在:ps aux | grep mysqld,确实不存在了。
再在本地的navicat尝试连接数据库,连接失败。好了,数据库确实关闭了。

接下来我们启动mysqld,直接进行/xxx/xxx/mysqld 仍然显示错误,需要用root权限去启动,就跟直接调用shutdown时候出现的错误一样,那就简单了,直接继续用mysqladmin即可:
mysqladmin -u root -p /xxx/xxx/mysqld —daemin=xxx —skip-new
结果发现竟然不可以,推测是mysqladmin只能直接调用相关命令?其实增加参数肯定是可以的,但我不会啊!emm,那么换种思路,直接在调用mysqld脚本的时候增加user参数就好辣,于是:
/usr/sbin/mysqld —deamonize —pid-file=/xxx/xx/xx/xxx/mysqld.pid —skip-new —user=root
然后就启动成功了(其实刚刚shutdown的时候也直接加这么个参数就行了吧)

既然已经重新使用—skip-new参数去启动mysqld了,那么应该就能使用optimize命令了?

回到本地,用navicat继续调用optimize table article; 结果,竟然还是不行。错误信息:
[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column ‘information_schema.PROFILING.SEQ’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by”

然后发现原因是这个:
https://my-blog-1253941628.cos.ap-guangzhou.myqcloud.com/2020-02-14/images/20191108/optinnodb_1.png)
即navicat的版本问题?!那么就直接在服务器上执行一遍吧。

然后再服务器上optimize table,果然没有任何错误。成功执行。(虽然只是个简单的命令,还是折腾了许久)
关于optimize的作用:当 您的库中删除了大量的数据后,您可能会发现数据文件尺寸并没有减小。这是因为删 除操作后在数据文件中留下碎片所致。Discuz! 在系统数设置界面提供了数据表优化的功能,可以去除删除操作后留下的数据文件碎片,减小文件尺寸,加快未来的读写操作。您只要在做完批量删除,或定期(如 每一两个月)进行一次数据表优化操作即可。

参考链接:
https://www.cnblogs.com/Alight/p/3585646.html
https://blog.csdn.net/chuixue24/article/details/86624792

-------------本文结束感谢您的阅读-------------