innodb数据库 OPTIMIZE TABLE 提示Table does not support optimize, doing recreate + analyze instead

来源:互联网 发布:3d打印设计软件 编辑:程序博客网 时间:2024/06/05 10:04
Table does not support optimize, doing recreate + analyze instead

提要:
1.MySQL官方建议不要经常(每小时或每天)进行碎片整理,一般根据实际情况,只需要每周或者每月整理一次即可。
2.OPTIMIZE TABLE只对MyISAM,BDB和InnoDB表起作用,尤其是MyISAM表的作用最为明显。此外,并不是所有表都需要进行碎片整理,一般只需要对包含上述可变长度的文本数据类型的表进行整理即可。
3.在OPTIMIZE TABLE运行过程中,MySQL会锁定表。
4.默认情况下,直接对InnoDB引擎的数据表使用OPTIMIZE TABLE,可能会显示「 Table does not support optimize, doing recreate + analyze instead」的提示信息。这个时候,我们可以用mysqld --skip-new或者mysqld --safe-mode命令来重启MySQL,以便于让其他引擎支持OPTIMIZE TABLE。

那么怎么使用--skip-new呢?
先看ps看一下mysql的进程吧!
[plain] view plain copy
 print?
  1. ps aux | grep mysqld  
  2.   
  3. root      2359  0.0  0.0 108300  1308 pts/2    S    13:09   0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql  
  4. mysql     3028 46.2 56.5 5771800 4554616 pts/2 Sl   13:09  10:13 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/lib/mysql/122-db.err --open-files-limit=65535 --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock --port=3306  
  5. root      3355  0.0  0.0 103240   872 pts/2    S+   13:31   0:00 grep mysqld  



第一个是守护进程,第二个就是mysql的原始进程。我们只要在这个进程最后追加--skip-new即可。

[plain] view plain copy
 print?
  1. /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/lib/mysql/122-db.err --open-files-limit=65535 --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock --port=3306 --skip-new  



先关闭mysqld,然后执行该命令。
原创粉丝点击