Автоматизация MySQL разделов - PullRequest
0 голосов
/ 04 мая 2018

Я много искал об автоматизации разбиения mysql. Но, к сожалению, ничто не соответствует проблеме. Я хочу удалить старые разделы, которые не нужны, но в то же время добавить новые предстоящие данные в раздел. Что я могу сделать здесь, так это каждый день удалять старый раздел и создавать новые разделы с некоторыми автоматическими функциями mysql, такими как MONTH (NOW () - интервал 2 месяца) и т. Д. Но то, что это сделает, увеличит стоимость операции, поскольку каждую ночь мне нужно пересоздавать разделы для новых данных. Я обнаружил, что могу использовать разбиение по диапазону, но есть все жестко закодированные примеры, которые указывают на то, что мне может потребоваться выполнять разбиение каждый раз, когда добавляются новые данные.

Вот пример, который я нашел, но не очень похож на меня:

ALTER TABLE t1 PARTITION BY 
RANGE(TO_DAYS(FROM_UNIXTIME(transaction_date)))(
PARTITION JAN VALUES LESS THAN (TO_DAYS('2013-02-01')),
PARTITION FEB VALUES LESS THAN (TO_DAYS('2013-03-01')),
PARTITION MAR VALUES LESS THAN (TO_DAYS('2013-04-01')),
PARTITION APR VALUES LESS THAN (TO_DAYS('2013-05-01')),
PARTITION MAY VALUES LESS THAN (TO_DAYS('2013-06-01')),
PARTITION JUN VALUES LESS THAN (TO_DAYS('2013-07-01')),
PARTITION JUL VALUES LESS THAN (TO_DAYS('2013-08-01')),
PARTITION AUG VALUES LESS THAN (TO_DAYS('2013-09-01')),
PARTITION SEP VALUES LESS THAN (TO_DAYS('2013-10-01')),
PARTITION `OCT` VALUES LESS THAN (TO_DAYS('2013-11-01')),
PARTITION NOV VALUES LESS THAN (TO_DAYS('2013-12-01')),
PARTITION `DEC` VALUES LESS THAN (TO_DAYS('2014-01-01'))
);

Пожалуйста, предложите мне правильный способ сделать это.

1 Ответ

0 голосов
/ 18 мая 2018

Нет полностью автоматизированного способа - вам нужно написать код.

Но сначала давайте исправим проблему. Есть другой раздел:

PARTITION future VALUES LESS THAN (MAXVALUE)

Это пригодится, если вы случайно не перевернете разделы ночью.

А как насчет ошибки: Ваша таблица практически никогда не содержит полных 12 месяцев данных. Сразу после скольжения перегородок у вас будет всего 11 месяцев. Это нормально? Если нет, то держите 13 месяцев, а не 12.

Теперь немного кода для выполнения работы, а также, возможно, несколько советов: http://mysql.rjweb.org/doc.php/partitionmaint

...