Autor Zpráva
bestik_63
Profil
ahoj mám dotaz,
jak zálohovat databázi, která má v tabulkách omezení např. cizí klíč? Pokud si totiž exportuju (v mysql_admin) tabulky i data pomocí sql příkazů, tak se mi jednotlivé tabulky vypíšou podle abecedy. Bohužel se ale stane, že tabulka v abecedním seznamu je závislá na tabulce položené v seznamu níže. Pak při obnově při zápisu do tabulky nastane chyba, protože daná tabulka bude závislá na datech z tabulky, která ještě nebude obsahovat data (ERROR 1452: Cannot add or update a child row: a foreign key constraint fails).

Zálohu bych chtěl provádět, pomocí php skriptu, takže bych si pořadí zálohování a posléze obnovy mohl řídit sám. Zajímalo by mě, jestli by se dal udělat skript pro jakoukoliv databázi (u které nevím kolik a jaké má tabulky (data). Seznam tabulek, pohledů a podobně jde v SQL jednoduše zjistit. Pak si zazálohuju data, problém je v tom, ale jak zapisovat data při obnově, protože kvůli cizím klíčům je třeba dodržet pořadí zápisu tabulek.
Alphard
Profil
Snad každý rozumný admin nastavuje SET foreign_key_checks = 0, nevím, jaký nástroj používáte, že tohle neumí.
juriad
Profil
phpMyAdmin to nějak řeší; co je mysql_admin?

Tabulky vytvářej bez referenčních omezení, importuj data bez kontrol a následně pomocí ALTER TABLE ty constraints znovu přidej.
Relevantní: http://stackoverflow.com/questions/17890461/foreign-key-constraints-missing-after-phpmyadmin-export

Nebo lze foreign constraints dočasně zakázat: http://stackoverflow.com/questions/11468783/export-and-import-data-from-phpmyadmin
Mysqldump to také řeší tímto způsobem: http://stackoverflow.com/questions/2429655/can-you-automatically-create-a-mysqldump-file-that-doesnt-enforce-foreign-key-c
bestik_63
Profil
Děkuju moc za rady.
SET foreign_key_checks = 0 řeší přesně můj problém. Holt se člověk pořád učí :-)
mysql_admin je http://www.phpmyadmin.net/home_page/index.php, jen jsem to blbě napsal :-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0