После обновления mysql, работающего на ZFS до версии 8.0 сервис не стартует, а в логе /var/log/mysql/error.log и наблюдаю такое:

The redo log file ./#innodb_redo/#ib_redo5 size 3072000 is not a multiple of innodb_page_size

https://stackoverflow.com/a/73200473
Вот тут написано - что нужно довести его размер до кратного 8192 или 16384 (в завосимости от заданного innodb_page_size) путём дописывания нулей в конец файла.
В моем случае - размер файла кратен 8192, но не кратен 16384.
Попробую дописать в файл 8192 нуля:

dd if=/dev/zero bs=1 count=8192 of=./zeros
cat zeros >> /var/lib/mysql/#innodb_redo/#ib_redo5 
service mysql restart

Или еще проще, для всех файлов сразу:

truncate -s 64M /var/lib/mysql/#innodb_redo/#ib_redo*

В результате - сервис нормально стартует.
Однако - успешный запуск не предполагает успешного перезапуска. Чтобы зафиксировать успех делаем следующее:

  • копируем файлик сервиса, чтобы немного кастомизировать его:
    cp /lib/systemd/system/mysql.service /etc/systemd/system/

  • Добавляем в файл /etc/systemd/system/mysql.service строку:

    ExecStartPre=+/bin/bash -c '/usr/bin/truncate -s 64M /var/lib/mysql/#innodb_redo/#ib_redo*'

  • Обновляем конфиг сервисов:

    systemctl daemon-reload

  • Проверяем:

    service mysql restart
Enter your comment. Wiki syntax is allowed:
 
  • linux_faq/mysql_the_redo_log_file_is_not_a_multiple_of_innodb_page_size.txt
  • Last modified: 2022/08/16 10:36
  • by admin