我干数据库DBA近9年,深感数据库安全、稳定、高效运行的重要性和迫切性。数据库类似财务的账单,一旦出现损坏或者删除,那相应的财务账单都丢失了,可以说公司是否还能继续经营下去都不好说。
最近研发清理了mysql表的大量数据,需要我低峰期操作mysql库的表碎片整理optimize table 降低高水位,此时却遇到异常,如下:
mysql> optimize table t_xxxx_change;
+--------------------------------------------+----------+----------+--------------------------------------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+--------------------------------------------+----------+----------+--------------------------------------------------------------------------+
| db_name.t_xxxx_change | optimize | note | Table does not support optimize, doing recreate + analyze instead |
| db_name.t_xxxx_change | optimize | error | Duplicate entry '2025017293409575970576169' for key 'idx_associate_guid' |
| db_name.t_xxxx_change | optimize | status | Operation failed |
主库执行失败,但是从库却执行成功,从库上的表碎片消失,表的体积急剧降低,因为mysql时逻辑复制,而且从库上没有业务做dml操作不影响optimize操作。后面通过主从切换,在新主库上执行optimize操作去规避optimize失败的问题。