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
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.