Я получил эту ошибку InnoDB в MySQL 5.0. Mysqld был остановлен чисто, но мне удалось потерять ib_logfile0 & ib_logfile1 впоследствии. Теперь, после чистого запуска, InnoDB сделал свое «восстановление после сбоя». Я просмотрел бизнес innodb_force_recovery = 4, отремонтировал зависшую таблицу MyISAM, и теперь репликация готова, кроме этого. Большие числа переданы:
111116 15:49:36 InnoDB: Error: page 393457 log sequence number 111 561,760,232
InnoDB: is in the future! Current system log sequence number 70 3,946,969,851.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB: http://dev.mysql.com/doc/refman/5.0/en/forcing-recovery.html
InnoDB: for more information.
Это на подчиненном сервере. Выше ошибка извергает сотнями. Я нашел ответ: «вставьте и удалите данные размером> 64 ГБ, чтобы порядковый номер журнала стал достаточно большим».
http://forums.mysql.com/read.php?22,50163,50163#msg-50163
Это магическое число 64 ГБ прибывает из 4 ГБ * 16, где «основной номер» журнала этого парня должен был увеличиться с 0 до 15. У меня с 70 до 111 = 164 ГБ. Это займет 5 дней. Я продолжу работать над ускорением моего сценария и буду запускать его параллельно, чтобы ускорить это. В то же время, я надеюсь, что у кого-то есть лучший ответ. Это глупо.
Ответы:
Это была довольно редкая ситуация. Я надеюсь никогда не оказаться там снова, с InnoDB "порядковый номер журнала в будущем!" ошибка. Из-за моих конкретных деталей перестройка / восстановление данных моего сервера была последним средством. Некоторые читы в помощь были хорошими идеями, но, в конце концов, я решил просто улучшать свой Perl-скрипт, чтобы играть в эту глупую игру и набирать как можно больше концертов в час. Какого черта, это хороший системный стресс-тест.
Помните: цель состоит в том, чтобы увеличить один счетчик («порядковый номер журнала»), который хранится где-то в заголовках ib_logfile0 и ib_logfile1 . Это для того, чтобы подделать InnoDB, чтобы он игнорировал явный временной сдвиг и продолжал жить. Но никто не знает, как редактировать этот номер. Или, если они знают, никто не говорит.
Вот мой конечный продукт. YMMV, но использование функции REPEAT в mysql для внутренней генерации данных очень эффективно.
Мой предложенный рецепт:
while true; do date; junk.pl dataX; done
.Наблюдайте, как растет ваш LSN, возможно, в другом цикле:
Большим числом является 32-разрядный INT без знака, который будет иметь размер 4 ГБ, увеличивая меньшее число каждый раз. В приведенном выше случае он просто опустился со 124 до 125. Ваша цель скрыта в mysqld.log, который отправил вас в Google за это нелепое решение. Как только вы пересечете финишную черту, все! Дуй в рога! Выпустите конфетти!
источник
У вас есть три (3) варианта:
ВАРИАНТ 01: Выполнить rsync от Master до Slave (время простоя на Master)
reset master;
мастер (Zaps Binary Logs)service mysql stop
на мастереservice mysql stop
на рабservice mysql start
на мастереservice mysql stop --skip-slave-start
на рабstart slave;
на ведомом устройстве и дайте репликации догнатьВАРИАНТ 02: Выполнить rsync от Master до Slave (минимальное время простоя на Master)
reset master;
мастер (Zaps Binary Logs)service mysql stop
на рабservice mysql stop
на мастереservice mysql start
на мастереservice mysql stop --skip-slave-start
на рабstart slave;
на ведомом устройстве и дайте репликации наверстать упущенноеВАРИАНТ 03: Используйте XtraBackup
Этот программный инструмент не только сделает ненавязчивую копию работающего мастера, но и создаст для вас соответствующие файлы ib_logfiles. Вам придется настроить репликацию
Я уже писал в StackExchange на эту тему
Я делал это много раз для моей веб-хостинговой компании. У одного клиента было 3,7 ТБ для перемещения, и это заняло около 16 часов. 64ГБ очень мало по сравнению.
источник
RESET SLAVE
это полезно, особенно если вы накопили много ГБ журналов ретрансляции. После процесса rsync и восстановления репликации помните, что команда CHANGE MASTER TO также уничтожит журналы ретрансляции для вас.Я обнаружил, что, возможно, есть более крутой способ решения этой проблемы, работающий с многораздельными таблицами. Мне нужно было удалить разделы несколько лет назад, и мне пришлось добавить несколько на 2014 год. Почти все разделы сообщают об этой ошибке, также как и старые. Очень неприятный сбой.
Таким образом, в то время как УДАЛЕНИЕ старого и использование REORGANIZE раздела MAXVALUE (последнего), он будет создавать новые файлы, которые в порядке, поэтому я получаю все меньше и меньше предупреждений. В то же время, это помогает увеличить счетчик последовательности журнала, поэтому мне не нужно вставлять фиктивные данные. У меня это происходит на главном сервере, кстати ...
Итак, это:
И это:
Это эффективно отбросит каждый раздел в изменении и воссоздает его с временной копией содержимого того, что было там. Вы можете сделать это для каждой таблицы, если хотите, мое приложение позволяет это делать, поэтому не нужно беспокоиться о синхронизированных резервных копиях и т. Д.
Теперь для остальной части таблицы, так как я не коснулся всех разделов в процессе, некоторые останутся с предупреждением о последовательности журналов, для тех, которые сломаны, но и покрыты этим действием реорганизации, я, вероятно, выполню это:
или это
Итак, это заставило меня задуматься: вы можете сделать это с простыми ванильными таблицами, временно добавить разделы с помощью хэша, а затем удалить его (или оставить их, я настоятельно рекомендую разделы).
Однако я использую mariadb, а не mysql (поэтому XtraDB)
Возможно, это кому-то поможет. Я все еще бегаю, пока все хорошо. Смена ENGINE, похоже, тоже хорошо справляется с этой задачей, поэтому я перенесу ее обратно между MyIsam и ими обратно в InnoDB.
Это довольно логично, если вы измените ENGINE, таблица исчезнет из innodb, так что это больше не будет проблемой.
это похоже на работу здесь. Я могу подтвердить несколько вещей на секционированных таблицах:
Я использовал последние на нескольких столах. Предупреждения появляются, когда он пытается открыть файлы, и есть одно для каждого определения раздела, которое он открывает с проблемами счетчика. Почти перевернулся сегодня за последние столы. Я думаю, что после того, как все это обработано, нужно очистить двоичные журналы.
обновление : я могу сделать несколько выводов, теперь мне удалось решить эту проблему.
источник
USE INFORMATION_SCHEMA; SELECT CONCAT("ALTER TABLE `", TABLE_SCHEMA,"`.`", TABLE_NAME, "` REBUILD PARTITION ALL;") AS MySQLCMD AS MySQLCMD FROM TABLES;
(source: dba.stackexchange.com/questions/35073/… ) и передать его в файл, который будет выполнен в виде последовательности команд.