Puncte:1

Erori MySQL / Corupție după actualizarea WordPress

drapel cn

Ieri mi-am actualizat site-ul web Wordpress la cea mai recentă versiune de WordPress (6.0) și am actualizat câteva alte plugin-uri la cele mai recente versiuni ale acestora.După actualizări, totul părea să funcționeze bine, așa că mi-am dezactivat pagina de întreținere. Câteva ore mai târziu, serverul meu MySQL de la distanță (utilizat pentru baza de date WP) s-a prăbușit și în această dimineață serverul meu Web (Nginx) nu s-a putut conecta la baza de date.

Mi-am restaurat serverele de producție din backup și am atașat volumul potențial corupt de pe serverul MySQL la o instanță nouă. MySQL nu pornește și am examinat jurnalele, dar acestea sunt cu mult peste nivelul meu de expertiză.

Mai jos sunt două secțiuni ale jurnalelor. Primul descrie potențiala corupție? Am adăugat innodb_force_recovery = 6 la fișierul meu CNF și asta permite MySQL să pornească, dar nu știu cu adevărat ce înseamnă asta. Asta înseamnă că există o garanție de 100% a corupției și, dacă da, cum aș afla cauza/unde?

A doua secțiune are o eroare de pool-buffer, care este puțin mai ușor de înțeles pentru mine. Am comentat setarea mea innodb_buffer_pool_size în fișierul meu CNF, dar asta nu a avut niciun efect asupra pornirii MySQL fără innodb_force_recovery setat la 6.

Sper că cineva poate explica erorile și, eventual, cum să aflu cauza/cele?

MySQL8.0.29 R6G.Large (2 nuclee, 16 gb ram) Bazin tampon: 12000M

Sectiunea 1:

InnoDB: Generăm în mod intenționat o capcană de memorie.
InnoDB: Trimiteți un raport de eroare detaliat la http://bugs.mysql.com.
InnoDB: Dacă primiți erori de afirmare repetate sau blocări, chiar
InnoDB: imediat după pornirea mysqld, poate exista
InnoDB: corupție în spațiul tabel InnoDB. Va rog, referiti-va la
InnoDB: http://dev.mysql.com/doc/refman/8.0/en/forcing-innodb-recovery.html
InnoDB: despre forțarea recuperării.
18:49:04 UTC - mysqld a primit semnalul 6;
Cel mai probabil, ați lovit o eroare, dar această eroare poate fi cauzată și de o funcționare defectuoasă a hardware-ului.
Indicator de fir: 0xfffc28000b20
Încercarea de întoarcere. Puteți folosi următoarele informații pentru a afla
unde mysqld a murit. Dacă nu vedeți niciun mesaj după aceasta, ceva a mers
teribil de gresit...
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*) [+0x1fcc]) [+0x1]
/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]

Încerc să obțin câteva variabile.
Unele indicatoare pot fi nevalide și pot duce la anularea dump-ului.
Interogare (0): ID conexiune (ID fir): 0
Stare: NOT_KILLED

Pagina de manual de la http://dev.mysql.com/doc/mysql/en/crashing.html conține
informații care ar trebui să vă ajute să aflați care este cauza accidentului.
2022-05-25T18:49:04.565524Z 0 [Avertisment] [MY-010918] [Server] „default_authentication_plugin” este învechit și va fi eliminat într-o versiune viitoare. Vă rugăm să utilizați în schimb authentication_policy.
2022-05-25T18:49:04.565544Z 0 [Sistem] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.29) începând cu procesul 6679
2022-05-25T18:49:04.571539Z 1 [Sistem] [MY-013576] [InnoDB] Inițializarea InnoDB a început.
2022-05-25T18:49:05.807854Z 1 [Sistem] [MY-013577] [InnoDB] Inițializarea InnoDB s-a încheiat.
2022-05-25T18:49:06.622221Z 0 [Sistem] [MY-010229] [Server] Se pornește recuperarea în caz de accident XA...
2022-05-25T18:49:06.625449Z 0 [Sistem] [MY-010232] [Server] Recuperarea în caz de accident XA sa încheiat.
2022-05-25T18:49:07.251794Z 0 [Avertisment] [MY-010068] [Server] Certificatul CA ca.pem este autosemnat.
2022-05-25T18:49:07.251829Z 0 [Sistem] [MY-013602] [Server] Canal mysql_main configurat pentru a suporta TLS. Conexiunile criptate sunt acum acceptate pentru acest canal.
2022-05-25T18:49:07.272581Z 0 [Sistem] [MY-011323] [Server] X Plugin gata pentru conexiuni. Adresă de legătură: port '::': 33060, socket: /var/run/mysqld/mysqlx.sock
2022-05-25T18:49:07.272631Z 0 [Sistem] [MY-010931] [Server] /usr/sbin/mysqld: gata pentru conexiuni. Versiunea: „8.0.29” socket: „/var/lib/mysql/mysql.sock” port: 3306 MySQL Community Server - GPL.
2022-05-25T18:49:07.347411Z 0 [EROARE] [MY-012687] [InnoDB] [FATAL] Rec offset 99, cur1 offset 4038, cur2 offset 16004
2022-05-25T18:49:07.347449Z 0 [EROARE] [MY-013183] [InnoDB] Eșec de afirmare: page0page.cc:502:ib::fir declanșat fatal 281457662619536

Sectiunea 2:

Pagina de manual de la http://dev.mysql.com/doc/mysql/en/crashing.html conține
informații care ar trebui să vă ajute să aflați care este cauza accidentului.
2022-05-26T12:27:29.518146Z 0 [Avertisment] [MY-010918] [Server] „default_authentication_plugin” este învechit și va fi eliminat într-o versiune viitoare. Vă rugăm să utilizați în schimb authentication_policy.
2022-05-26T12:27:29.518165Z 0 [Sistem] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.29) începând cu procesul 17135
2022-05-26T12:27:29.524074Z 1 [Sistem] [MY-013576] [InnoDB] Inițializarea InnoDB a început.
2022-05-26T13:20:40.613066Z 0 [Avertisment] [MY-010918] [Server] „default_authentication_plugin” este depreciat și va fi eliminat într-o versiune viitoare. Vă rugăm să utilizați în schimb authentication_policy.
2022-05-26T13:20:40.613087Z 0 [Sistem] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.29) începând cu procesul 1086
2022-05-26T13:20:41.866918Z 1 [Sistem] [MY-013576] [InnoDB] Inițializarea InnoDB a început.
2022-05-26T13:20:49.824464Z 0 [Avertisment] [MY-012681] [InnoDB] page_aligned_alloc mmap(137232384 bytes) a eșuat; eroare 12
2022-05-26T13:20:49.844869Z 0 [Avertisment] [MY-012681] [InnoDB] page_aligned_alloc mmap(137232384 bytes) a eșuat; eroare 12
2022-05-26T13:20:49.961232Z 1 [EROARE] [MY-012956] [InnoDB] Nu se poate aloca memorie pentru pool-ul de buffer
2022-05-26T13:20:49.961279Z 1 [EROARE] [MY-012930] [InnoDB] Inițializarea pluginului a fost anulată cu eroare Eroare generică.
2022-05-26T13:20:49.962080Z 1 [EROARE] [MY-010334] [Server] Nu s-a inițializat DD Storage Engine
2022-05-26T13:20:49.962240Z 0 [EROARE] [MY-010020] [Server] Inițializarea dicționarului de date a eșuat.
2022-05-26T13:20:49.962355Z 0 [EROARE] [MY-010119] [Server] Se anulează
2022-05-26T13:20:49.966630Z 0 [Sistem] [MY-010910] [Server] /usr/sbin/mysqld: Închidere finalizată (mysqld 8.0.29) MySQL Community Server - GPL.

Orice ajutor ar fi grozav.

Actualizare: am rulat mysqlcheck pe baza mea de date defectuoasă și a găsit corupție. Se pare că cauza este WooCommerce?

Iată eroarea pe care mysqlcheck returnează:

production.wp_wc_admin_note_actions
Avertisment: InnoDB: Arborele B al indexului PRIMARY este corupt.
Avertisment: InnoDB: indexul „note_id” conține 1004 intrări, ar trebui să fie 18446744073709551615.
eroare: corupt

Jack

drapel ua
Depuneți o eroare la bugs.mysql.com -- Nu cred că WP este _direct_ de vină. S-a întâmplat altceva în același timp? Cum ar fi pană de curent, defecțiune de disc etc?
drapel cn
Hei Rick, nu că am găsit. Orice altceva pare în regulă. O eroare nu mi-ar fi afectat și backupul, care nu a avut probleme? Volumul afectat rulează pe o instanță separată în modul de recuperare 6 timp de 24 de ore și nu a mai avut alte probleme. Există o modalitate de a afla dacă există tabele corupte și sau o cauză?
drapel ua
„Peste gradul meu de plată”
drapel cn
Și al meu :) , sper că un alt membru va avea câteva idei. Mulțumiri
drapel cn
@RickJames , se pare că actualizarea WooCommerce a cauzat problema. Mi-am dat seama cum să folosesc mysqlcheck și a găsit corupție în wp_wc_admin_note_actions, vezi mai sus, mi-am actualizat postarea.
drapel ua
Tabelul Engine=MyISAM a fost? Asta are probleme de corupție. Treceți la InnoDB.
drapel cn
Este innoDB, nu am folosit niciodată MyISAM. Am contactat asistența WooCommerce și ei investighează.
Wilson Hauck avatar
drapel jp
Jack, ai trecut prin innodb_force_recovery=1 apoi 2 apoi 3 sau ai trecut direct pentru 6? Stepping este metoda documentată pentru cele mai multe date recuperabile cu cel mai mic grad de risc.
drapel cn
Wilson, nu, am citit documentația aia doar după aceea. Am copii de rezervă complete înainte de corupție și am o copie de rezervă a serverului corupt înainte de recuperarea forțată. De atunci am restaurat serverul corupt din backup și recuperare. 1 nu s-a repornit, dar 2 a făcut-o. Încă nu am reușit să restrâng cauza. WooCommerce a spus că nu sunt ei și că nimeni altcineva nu a raportat o problemă. Aveți idee cum să găsiți cauza?
drapel jp
Noi vedem exact aceeași problemă. Rulăm aproximativ 300 de servere MySQL 8.0.29. În ultimele 2 1/2 săptămâni am văzut această problemă pe cel puțin nouă servere MySQL. Este aproape întotdeauna legat de tabelul pe care l-ați menționat: wp_wc_admin_note_actions. Acestea fiind spuse, am văzut-o și pe alte mese. Am creat un thread pe forumurile MySQL pentru asta: https://forums.mysql.com/read.php?22,704532,704532#msg-704532 Din păcate, nu pot reproduce problema deloc, deși am încercat multe , pare să se întâmple la întâmplare, până acum.
drapel cn
@user40974 , foarte interesant! Ați avut problema doar de când ați actualizat WordPress sau WooCommerce? Plănuiesc să-mi dublez mediul de producție și să actualizez unul câte unul, cu 24 de ore între fiecare actualizare și să verific dacă baza de date este deteriorată înainte de a actualiza următoarea. WooCommerce pare să creadă că nu sunt ei. Nu cred că este MySQL, deoarece celelalte baze de date MySQL care rulează aceeași versiune, dar care nu sunt conectate la WordPress etc., nu au avut probleme.
drapel jp
@JackJohnstone53 Din păcate, pot vedea asta doar dintr-o perspectivă exterioară, lucrând ca administrator de sisteme, așa că de obicei observ doar când este prea târziu și nu știu exact ce au făcut clienții noștri înainte. Se pare totuși că este într-adevăr conectat de obicei la o actualizare a Woocommerce. Dar, așa cum s-a spus deja, am văzut deja că se întâmplă acest lucru și cu alte tabele de plugin wordpress, așa că bănuiesc că este o eroare MySQL. Un plugin nu ar trebui să poată corupe o bază de date InnoDB, indiferent cât de ciudate sunt datele pe care le furnizează/modifică. A început și după upgrade-ul 8.0.29.
drapel jp
Un alt tabel în care am avut două cazuri în acest sens se numește „spbc_scan_results”. Se pare că are legătură cu acest plugin wordpress: https://de.wordpress.org/plugins/security-malware-firewall/
drapel cn
@user40974, întotdeauna am crezut că un plugin poate deteriora o bază de date, dar asta este peste nivelul meu de competență. Voi continua cu asistența WooCommerce și le voi trimite linkurile pentru firul și postarea dvs. pe forumul MySQL. Voi actualiza threadul dacă găsesc ceva. Mulțumiri!

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.