I need to export a large database without foreign keys. What is the command to do this?
This is what I tried but I know this is incorrect.
mysqldump -u root -p DBNAME SET FOREIGN_KEY_CHECKS = 0; | gzip > database.sql.gzip
I need to export a large database without foreign keys. What is the command to do this?
This is what I tried but I know this is incorrect.
mysqldump -u root -p DBNAME SET FOREIGN_KEY_CHECKS = 0; | gzip > database.sql.gzip
you can use the --init-command
flag on a per-session basis:
mysql --init-command="SET SESSION FOREIGN_KEY_CHECKS=0;" ... < dump.sql
This is ugly, but I ended up just modifying the schema file to remove the foreign keys.
mysqldump -uuser -ppassword --no-data dbname | sed '$!N;s/^\(\s*[^C].*\),\n\s*CONSTRAINT.*FOREIGN KEY.*$/\1/;P;D' | grep -v 'FOREIGN KEY' > dbname_schema_no_fk.sql
sed
finds lines that precede foreign key constraint declarations and replaces those lines with themselves, minus the trailing comma. grep
excludes the foreign key constraints.
mysqldump -uuser -ppassword --no-create-info dbname > dbname_data.sql
$ mysql -uuser -ppassword
> create database foo
> use foo
> source dbname_schema_no_fk.sql
> source dbname_data.sql
Tested with mysqldump Ver 10.13 Distrib 5.6.32-78.1, for Linux (x86_64).
From this SO thread:
Can you automatically create a mysqldump file that doesn't enforce foreign key constraints?
The mysqldump command included with MySQL 5.0.51 (and according to the change log versions since 4.1.1) does switch off foreign key checks. By default, mysqldump includes the following line at the top of the dump file:
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
The /*!40014 ... */ syntax is a conditional comment that will be executed on MySQL 4.0.14 and later. The old foreign key checks setting is restored at the end of the dump file:
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;