我发现也许有更酷的方法可以解决分区表上的此问题。我需要删除几年前的分区,并且必须在2014年添加一些分区。几乎所有分区都报告此错误,旧分区也是如此。非常讨厌的崩溃。
因此,当删除旧文件并使用MAXVALUE分区的REORGANIZE(最后一个)时,它将创建可以的新文件,因此我得到的警告越来越少。同时,它有助于增加日志序列计数器,因此我不需要插入虚假数据。我在主服务器上发生这种情况...
所以这:
ALTER TABLE Events DROP PARTITION p1530 , p1535 , p1540 , p1545 ,
p1550, p1555 , p1560 , p1565 , p1570 , p1575 , p1580 , p1585 , p1590 ,
p1595 , p1600 , p1605 , p1610 , p1615 , p1620 , p1625 , p1630 , p1635 ,
p1640 , p1645 , p1650 , p1655 , p1660 , p1665 , p1670 , p1675 , p1680 ,
p1685 , p1690 , p1695 , p1700 , p1705 , p1710 , p1715 , p1720 , p1725 ,
p1730 , p1735 , p1740 , p1745 , p1750 , p1755 , p1760 , p1765 , p1770 ,
p1775 , p1780 , p1785 , p1790 , p1795 , p1800 , p1805 , p1810 , p1815 ,
p1820 , p1825 , p1830 , p1835 , p1840;
还有这个:
ALTER table Events REORGANIZE PARTITION p3000 INTO (
PARTITION p3500 VALUES LESS THAN (TO_DAYS('2013-01-01')),
PARTITION p3510 VALUES LESS THAN (TO_DAYS('2013-01-04')),
PARTITION p3520 VALUES LESS THAN (TO_DAYS('2013-01-07')),
PARTITION p3530 VALUES LESS THAN (TO_DAYS('2013-01-10'))
...
PARTITION p4740 VALUES LESS THAN (TO_DAYS('2014-01-08')),
PARTITION p9000 VALUES LESS THAN MAXVALUE)
这将有效地删除更改中的每个分区,并使用其中的内容的临时副本重新创建该分区。您可以根据需要在每个表中执行此操作,我的应用程序允许执行此操作,因此无需担心同步备份等问题。
现在,对于表的其余部分,由于我没有触摸过该过程中的所有分区,因此某些分区将保留日志顺序警告,对于那些已损坏但被此重组操作覆盖的分区,我可能会运行以下命令:
ALTER TABLE Events REBUILD PARTITION p0, p1;
或者那个
ALTER TABLE Events OPTIMIZE PARTITION p0, p1;
因此,这让我开始思考,您可以使用普通的原始表来完成此操作,通过哈希临时添加分区,然后再将其删除(或者保留它们,我强烈建议您使用分区)。
我正在使用mariadb,而不是mysql(所以是XtraDB)
也许这对某人有帮助。到目前为止,我仍在运行它。更改ENGINE似乎也可以完成这项工作,因此我将它在MyIsam和他们之间又回到InnoDB。
这是很合逻辑的,如果您更改ENGINE,该表将从innodb中消失,因此不再是问题。
ALTER TABLE Events ENGINE=MyISAM;
ALTER TABLE Events ENGINE=InnoDB;
它似乎在这里工作。我可以确认分区表上的一些内容:
- ALTER TABLE xyz ENGINE = InnoDB非常慢,到Aria(mariadb)快一倍,但通常是增加日志序列计数器的慢方法
- ALTER TABLE xyz REBUILD PARTITION ALL是“修复”表并帮助增加计数器的最快方法
- ALTER TABLE xyz ANALYZE PARTITION ALL被慢速地修复到前者,并且不重写签出可以的分区。REBUILD确保重写为临时表架构。
我在几张桌子上用了最后一张。当尝试打开文件时会发生警告,并且打开的每个分区定义都有一个警告,但存在计数器问题。今天几乎快要过去了最后几张桌子的柜台。我认为一旦处理完毕,就需要刷新二进制日志。
更新:现在我可以得出一些结论,设法解决了这个问题。
- 我的崩溃是由于重组Aria格式(MariaDB)的表上的分区而引起的。
- (对我而言)对分区进行重建的最佳和最快方法是使序列计数器增加。更改引擎的速度很慢,您需要执行两次以影响innodb。与MyIsam或Aria相比,更改为innoDB相当慢。
- 我升级到了MariaDB 5.3,而不是5.5(was:5.2),它可以正常工作。我认为aria,5.5中的分区(以及已确认的错误)存在太多问题,无法使用该组合。
- 确实应该有更好的方法来重置日志序列计数器。