Рейтинг:1

Ошибки/повреждения MySQL после обновления WordPress

флаг cn

Вчера я обновил свой веб-сайт Wordpress до последней версии WordPress (6.0) и обновил несколько других плагинов до их последних версий.После обновлений все работало нормально, поэтому я отключил свою страницу обслуживания. Несколько часов спустя мой удаленный сервер MySQL (используемый для базы данных WP) вышел из строя, и сегодня утром мой веб-сервер (Nginx) не смог подключиться к базе данных.

Я восстановил рабочие серверы из резервной копии и подключил потенциально поврежденный том с сервера MySQL к новому экземпляру. MySQL не запускается, и я просматривал журналы, но они намного выше моего уровня знаний.

Ниже приведены два раздела журналов. Первый описывает потенциальную коррупцию? Я добавил innodb_force_recovery = 6 в свой CNF-файл, и это позволяет запускать MySQL, но я действительно не знаю, что это значит. Означает ли это, что есть 100% гарантия порчи, и если да, то как мне узнать причину / где?

Во втором разделе есть ошибка буферного пула, которую мне немного легче понять. Я закомментировал параметр innodb_buffer_pool_size в своем файле CNF, но это не повлияло на запуск MySQL без значения 6 для параметра innodb_force_recovery.

Я надеюсь, что кто-то может объяснить ошибки и, возможно, как выяснить причину/причины?

MySQL8.0.29 R6G.Large (2 ядра, 16 ГБ оперативной памяти) Буферный пул: 12000M

Секция 1:

InnoDB: мы намеренно создаем ловушку памяти.
InnoDB: Отправьте подробный отчет об ошибке на http://bugs.mysql.com.
InnoDB: если вы сталкиваетесь с повторяющимися ошибками утверждения или сбоями, даже
InnoDB: сразу после запуска mysqld может быть
InnoDB: повреждение в табличном пространстве InnoDB. Пожалуйста, обратитесь к
InnoDB: http://dev.mysql.com/doc/refman/8.0/en/forcing-innodb-recovery.html
InnoDB: о принудительном восстановлении.
18:49:04 UTC - mysqld получил сигнал 6 ;
Скорее всего, вы столкнулись с ошибкой, но эта ошибка также может быть вызвана неисправностью оборудования.
Указатель темы: 0xfffc28000b20
Попытка обратного следа. Вы можете использовать следующую информацию, чтобы узнать
где mysqld умер. Если вы не видите сообщений после этого, что-то пошло
ужасно неправильно...
stack_bottom = fffc488565f0 thread_stack 0x100000
/usr/sbin/mysqld(my_print_stacktrace(unsigned char const*, unsigned long)+0x44) [0x1d0e2a4]
/usr/sbin/mysqld(print_fatal_signal(int)+0x28c) [0xe3278c]
/usr/sbin/mysqld(my_server_abort()+0xa0) [0xe32920]
/usr/sbin/mysqld(my_abort()+0x14) [0x1d08244]
/usr/sbin/mysqld(ut_dbg_assertion_failed(char const*, char const*, unsigned long)+0x290) [0x1f79ba0]
/usr/sbin/mysqld() [0x1f7c42c]
/usr/sbin/mysqld(page_copy_rec_list_end_no_locks(buf_block_t*, buf_block_t*, unsigned char*, dict_index_t*, mtr_t*)+0x2dc) [0x1ec1dec]
/usr/sbin/mysqld(page_copy_rec_list_end(buf_block_t*, buf_block_t*, unsigned char*, dict_index_t*, mtr_t*)+0x300) [0x1ec2270]
/usr/sbin/mysqld(btr_compress(btr_cur_t*, bool, mtr_t*)+0x624) [0x1fa53f4]
/usr/sbin/mysqld(btr_cur_pessimistic_delete(dberr_t*, bool, btr_cur_t*, unsigned int, bool, unsigned long, unsigned long, unsigned long, mtr_t*, btr_pcur_t*, purge_node_t*)+0x1cc) [0x1fb130c]
/usr/sbin/mysqld() [0x1f02bf8]
/usr/sbin/mysqld(row_purge_step(que_thr_t*)+0x4f4) [0x1f05364]
/usr/sbin/mysqld(que_run_threads(que_thr_t*)+0x578) [0x1ece5e8]
/usr/sbin/mysqld(srv_worker_thread()+0x21c) [0x1f3184c]
/usr/sbin/mysqld(std::thread::_State_impl<std::thread::_Invoker<std::tuple<Detached_thread, void (*)()> > >::_M_run()+0xd4) [0x1e85774]
/usr/sbin/mysqld() [0x244623c]
/lib64/libpthread.so.0(+0x722c) [0xffffab1ec22c]
/lib64/libc.so.6(+0xd2e5c) [0xffffaaa99e5c]

Попытка получить некоторые переменные.
Некоторые указатели могут быть недействительными и привести к прерыванию дампа.
Запрос (0): идентификатор соединения (идентификатор потока): 0
Статус: НЕ УБИТО

Страница руководства по адресу http://dev.mysql.com/doc/mysql/en/crashing.html содержит
информация, которая должна помочь вам выяснить, что вызывает сбой.
2022-05-25T18:49:04.565524Z 0 [Предупреждение] [MY-010918] [Сервер] 'default_authentication_plugin' устарел и будет удален в будущем выпуске. Пожалуйста, используйте вместо этого authentication_policy.
2022-05-25T18:49:04.565544Z 0 [Система] [MY-010116] [Сервер] /usr/sbin/mysqld (mysqld 8.0.29), начиная с процесса 6679
2022-05-25T18:49:04.571539Z 1 [Система] [MY-013576] [InnoDB] Началась инициализация InnoDB.
2022-05-25T18:49:05.807854Z 1 [Система] [MY-013577] [InnoDB] Инициализация InnoDB завершена.
2022-05-25T18:49:06.622221Z 0 [Система] [MY-010229] [Сервер] Запуск аварийного восстановления XA...
2022-05-25T18:49:06.625449Z 0 [Система] [MY-010232] [Сервер] Восстановление XA после сбоя завершено.
2022-05-25T18:49:07.251794Z 0 [Предупреждение] [MY-010068] [Сервер] Сертификат ЦС ca.pem является самозаверяющим.
2022-05-25T18:49:07.251829Z 0 [Система] [MY-013602] [Сервер] Канал mysql_main настроен для поддержки TLS. Для этого канала теперь поддерживаются зашифрованные соединения.
2022-05-25T18:49:07.272581Z 0 [Система] [MY-011323] [Сервер] X Плагин готов к подключению. Адрес привязки: '::' порт: 33060, сокет: /var/run/mysqld/mysqlx.sock
2022-05-25T18:49:07.272631Z 0 [Система] [MY-010931] [Сервер] /usr/sbin/mysqld: готово для подключения. Версия: '8.0.29' сокет: '/var/lib/mysql/mysql.sock' порт: 3306 MySQL Community Server - GPL.
2022-05-25T18:49:07.347411Z 0 [ОШИБКА] [MY-012687] [InnoDB] [FATAL] Смещение записи 99, смещение cur1 4038, смещение cur2 16004
2022-05-25T18:49:07.347449Z 0 [ОШИБКА] [MY-013183] [InnoDB] Ошибка утверждения: page0page.cc:502:ib::фатальный запущенный поток 281457662619536

Раздел 2:

Страница руководства по адресу http://dev.mysql.com/doc/mysql/en/crashing.html содержит
информация, которая должна помочь вам выяснить, что вызывает сбой.
2022-05-26T12:27:29.518146Z 0 [Предупреждение] [MY-010918] [Сервер] 'default_authentication_plugin' устарел и будет удален в будущем выпуске. Пожалуйста, используйте вместо этого authentication_policy.
2022-05-26T12:27:29.518165Z 0 [Система] [MY-010116] [Сервер] /usr/sbin/mysqld (mysqld 8.0.29), начиная с процесса 17135
2022-05-26T12:27:29.524074Z 1 [Система] [MY-013576] [InnoDB] Началась инициализация InnoDB.
2022-05-26T13:20:40.613066Z 0 [Предупреждение] [MY-010918] [Сервер] 'default_authentication_plugin' устарел и будет удален в будущем выпуске. Пожалуйста, используйте вместо этого authentication_policy.
2022-05-26T13:20:40.613087Z 0 [Система] [MY-010116] [Сервер] /usr/sbin/mysqld (mysqld 8.0.29), начиная с процесса 1086
2022-05-26T13:20:41.866918Z 1 [Система] [MY-013576] [InnoDB] Началась инициализация InnoDB.
2022-05-26T13:20:49.824464Z 0 [Предупреждение] [MY-012681] [InnoDB] page_aligned_alloc mmap (137232384 байт) не удалось; ошибка 12
2022-05-26T13:20:49.844869Z 0 [Предупреждение] [MY-012681] [InnoDB] page_aligned_alloc mmap (137232384 байт) не удалось; ошибка 12
2022-05-26T13:20:49.961232Z 1 [ОШИБКА] [MY-012956] [InnoDB] Не удается выделить память для пула буферов
2022-05-26T13:20:49.961279Z 1 [ОШИБКА] [MY-012930] [InnoDB] Инициализация плагина прервана из-за ошибки Общая ошибка.
2022-05-26T13:20:49.962080Z 1 [ОШИБКА] [MY-010334] [Сервер] Не удалось инициализировать механизм хранения DD
2022-05-26T13:20:49.962240Z 0 [ОШИБКА] [MY-010020] [Сервер] Ошибка инициализации словаря данных.
2022-05-26T13:20:49.962355Z 0 [ОШИБКА] [MY-010119] [Сервер] Прерывание
2022-05-26T13:20:49.966630Z 0 [Система] [MY-010910] [Сервер] /usr/sbin/mysqld: завершение работы (mysqld 8.0.29) Сервер сообщества MySQL — GPL.

Любая помощь будет здорово.

Обновление: я запустил mysqlcheck в своей неисправной базе данных и обнаружил повреждение. Похоже, причина в WooCommerce?

Вот ошибка, которую возвращает mysqlcheck:

production.wp_wc_admin_note_actions
Предупреждение: InnoDB: B-дерево индекса PRIMARY повреждено.
Предупреждение: InnoDB: индекс «note_id» содержит 1004 записи, должно быть 18446744073709551615.
ошибка: повреждено

разъем

флаг ua
Сообщите об ошибке на bugs.mysql.com — я не думаю, что WP _непосредственно_ виновата. Что-то еще произошло в то же время? Например, сбой питания, сбой диска и т. д.?
флаг cn
Привет, Рик, Не то, чтобы я нашел. Все остальное кажется в порядке. Разве ошибка не повлияла бы и на мою резервную копию, с которой не было никаких проблем? Затронутый том работал на отдельном экземпляре в режиме восстановления 6 в течение 24 часов и больше не имел проблем. Есть ли способ узнать, есть ли поврежденные таблицы и / или причина?
флаг ua
«Выше моей зарплаты»
флаг cn
Мой тоже :), надеюсь, у другого участника будут какие-то идеи. Спасибо
флаг cn
@RickJames, похоже, проблема возникла из-за обновления WooCommerce. Я разобрался, как использовать mysqlcheck, и он обнаружил повреждение в wp_wc_admin_note_actions, см. выше, я обновил свой пост.
флаг ua
Была ли таблица Engine=MyISAM? Там проблемы с коррупцией. Переключитесь на InnoDB.
флаг cn
Это innoDB, я никогда не использовал MyISAM. Я обратился в службу поддержки WooCommerce, и они проводят расследование.
Wilson Hauck avatar
флаг jp
Джек, вы прошли через innodb_force_recovery=1, затем 2, затем 3 или сразу 6? Пошаговое выполнение — это задокументированный метод для наиболее восстанавливаемых данных с наименьшим риском.
флаг cn
Уилсон, нет, я только потом прочитал эту документацию. У меня есть полные резервные копии до повреждения, и у меня есть резервная копия поврежденного сервера до принудительного восстановления. С тех пор я восстановил поврежденный сервер из резервной копии, и восстановление 1 не перезапустилось, а 2 перезапустилось. Я до сих пор не смог сузить причину. WooCommerce заявила, что это не они, и никто другой не сообщил о проблеме. Любая идея о том, как найти причину?
флаг jp
Мы sseing точно такой же вопрос. Мы используем около 300 серверов MySQL 8.0.29. За последние 2 1/2 недели мы наблюдали эту проблему как минимум на девяти серверах MySQL. Это почти всегда связано с упомянутой вами таблицей: wp_wc_admin_note_actions. При этом мы также видели это и на других столах. Для этого я создал ветку на форумах MySQL: https://forums.mysql.com/read.php?22,704532,704532#msg-704532 К сожалению, я вообще не могу воспроизвести проблему, хотя много пробовал , пока что это происходит случайно.
флаг cn
@user40974, очень интересно! У вас возникла проблема только после обновления WordPress или WooCommerce? Я планирую дублировать производственную среду и обновлять ее одно за другим, с интервалом в 24 часа между каждым обновлением и проверкой базы данных на наличие повреждений перед обновлением следующего. WooCommerce, кажется, думает, что это не они. Я не думаю, что это MySQL, так как другие мои базы данных MySQL, работающие с той же версией, но не подключенные к WordPress и т. д., не имели проблем.
флаг jp
@JackJohnstone53 К сожалению, я могу видеть это только со стороны, работая системным администратором, поэтому обычно я замечаю только тогда, когда уже слишком поздно, и я точно не знаю, что наши клиенты делали раньше. Однако кажется, что это действительно обычно связано с обновлением Woocommerce. Но, как уже было сказано, я уже видел, как это происходит и с другими таблицами плагинов WordPress, поэтому я предполагаю, что это ошибка MySQL. Плагин не должен иметь возможности повредить базу данных InnoDB, независимо от того, насколько странные данные он предоставляет/изменяет. Тоже началось после обновления 8.0.29.
флаг jp
Другая таблица, в которой у нас было два случая, называется «spbc_scan_results». Кажется, это связано с этим плагином WordPress: https://de.wordpress.org/plugins/security-malware-firewall/
флаг cn
@ user40974, я всегда думал, что плагин может повредить базу данных, но это выше моего уровня компетенции. Я свяжусь с поддержкой WooCommerce и отправлю им ссылки на ветку и ваше сообщение на форуме MySQL. Я обновлю ветку, если что-нибудь найду. Спасибо!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.