restaurar - ¿Se puede crear automáticamente un archivo mysqldump que no aplique las restricciones de clave externa?
respaldar base de datos mysql consola (5)
Cuando ejecuto un comando mysqldump en mi base de datos y luego trato de importarlo, falla ya que intenta crear las tablas alfabéticamente, aunque pueden tener una clave externa que hace referencia a una tabla más adelante en el archivo. No parece haber nada en la documentation y he encontrado respuestas como this que dicen actualizar el archivo después de que se creó para incluir:
set FOREIGN_KEY_CHECKS = 0;
...original mysqldump file contents...
set FOREIGN_KEY_CHECKS = 1;
¿No hay forma de establecer automáticamente esas líneas o exportar las tablas en el orden necesario (sin tener que especificar manualmente todos los nombres de las tablas, ya que puede ser tedioso y propenso a errores)? Podría envolver esas líneas en un guión, pero me preguntaba si existe una manera fácil de garantizar que puedo volcar un archivo y luego importarlo sin actualizarlo manualmente.
El comando mysqldump incluido con MySQL 5.0.51 (y de acuerdo con las versiones de registro de cambios desde 4.1.1 ) desactiva las comprobaciones de claves externas. De forma predeterminada, mysqldump incluye la siguiente línea en la parte superior del archivo de volcado:
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
El /*!40014 ... */
sintaxis es un comentario condicional que se ejecutará en MySQL 4.0.14 y posterior. La configuración de verificación de clave externa antigua se restaura al final del archivo de volcado:
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
Esto puede suceder si usa --compact
como uno de sus comandos mysqldump
. --compact
incluye --skip-comments
por lo que en --compact
lugar --compact
uno debe usar --skip-add-drop-table --skip-add-locks --skip-disable-keys --skip-set-charset
Si está utilizando phpMyAdmin al exportar SQL, seleccione Método de exportación personalizado . Luego, entre las opciones de casilla de verificación, haga clic en " Desactivar verificación de clave externa ". La instrucción SQL exportada tendrá la opción de desactivar y habilitar las comprobaciones de claves externas al principio y al final del archivo de salida, respectivamente.
No es "automático", pero no tendrá que escribir las declaraciones usted mismo para cada exportación.
Tener cuidado. Por algún motivo, mysqldump no escribe FOREIGN_KEY_CHECKS = 0 si se usa la opción --compact.
Ciao.
Tenga cuidado con su cliente MySQL que utiliza, con el comando mysql
, no hay problema. Dumping:
% mysqldump -u ocp6 -pocp6 ocp6 --single-transaction --result-file=dump.sql
Restaurando:
% mysql -u ocp6 -pocp6 ocp6 < dump.sql
Todo está bien.
Con el uso de otro cliente MySQL ( mycli en mi situación) para restaurar el archivo dump:
mysql ocp6@:(none)> /. dump.sql
[…]
(1005, ''Can/'t create table `ocp6`.`composition` (errno: 150 "Foreign key constraint is incorrectly formed")'')
Supongo que mycli no entiende los comentarios condicionales .