Re: recuperare db-uri innodb
Ionut Eana <[email protected]>
| Newsgroups | gmane.org.user-groups.rlug.general |
|---|---|
| Message-ID | <CAOfyw8pzAWgjZt26sOA7vzhG0Trat19AMgWVrLfSEfhsc2fc9g@mail.gmail.com> |
2017-04-05 18:40 GMT+02:00 Vlad Georgescu <[email protected]>: > Salut, > Servus! > > Incerc sa recuperez niste baze de date care foloseau engine-ul innodb > din mysql. Dupa un restart programat de sistem, mysqld-ul (5.5.54) n-a > mai vrut sa porneasca, zicand ca: "InnoDB: Assertion failure in thread > 140188413921248 in file btr0pcur.c line 430", etc. Nu a fost nici o > eroare hardware, nici vreo intrerupere brusca, iar "innochecksum -v > ibdata1" zice ca totul e ok. Am incercat pornire cu > innodb_force_recovery de la 1 la 6 in my.cnf, dar fara succes. Am > transferat /var/lib/mysql pe alt system, punand ultima versiune de > mysql, dar din pacate eroarea e similara. S-a mai confruntat cineva cu > asa ceva? Ce pisici sa-i mai fac? > Mai bine mai tarziu decat niciodata :) Sper ca ai innodb_file_per_table... daca nu, nu e de bine! *Pasul 1*. Dintr-un backup ceva faci rost de DDL de la baza/bazele de date *Pasul 2*. Faci backup la baza de date corupta *mv /data/db/mysql /data/db/mysql.bak* *mkdir -vp /data/db/mysql* *cp -av /data/db/mysql.bak/mysql /data/db/mysql/* *cp -av /data/db/mysql.bak/{aria_log.00000001,aria_log_control} /data/db/mysql/* *rm -vf /data/db/mysql/mysql/innodb_{index,table}_stats.** *rm -vf /data/db/mysql/mysql/gtid_slave_pos.** *mkdir -vp /data/db/mysql/tmp* *chown mysql:mysql /data/ -R* *Pasul 3*. Pornesti mysql */etc/init.d/mysql start* *mysql_upgrade -uuser -ppassword --force* */etc/init.d/mysql restart* *Pasul 4*. Importi DDL-urile *mysql database1 < database1.sql* *mysql database2 < database2.sql* ... *Pasul 5*. Discard tablespace pentru *toate* tabelele *alter table database1.table1 discard tablespace;* *alter table database1.table2 discard tablespace;* *alter table database1.tableX discard tablespace;* *alter table database2.table1 discard tablespace;* *alter table database2.table2 discard tablespace;* *alter table database2.tableX discard tablespace;* *Pasul 6*. Copiezi fisierele .idb si importi tablespace pt *toate* tabelele *alter table database1.table1 import tablespace;* *alter table database1.table2 import tablespace;* *alter table database1.tableX import tablespace;* *alter table database2.table1 import tablespace;* *alter table database2.table2 import tablespace;* *alter table database2.tableX import tablespace;* Bafta! Note: - la mine data_dir era in /data/db/mysql - eu am facut asta pe mariadb, nu pe mysql! totusi trebuie sa mearga fara probleme. - procedura de mai sus poti s-o folosesti sa recuperezi spatiul folosit de UNDO_LOG din InnoDB tablespaces > Multumesc, > Vlad > > _______________________________________________ > RLUG mailing list > [email protected] > http://lists.lug.ro/mailman/listinfo/rlug >