【发布时间】:2020-07-02 10:02:18
【问题描述】:
我正在尝试以编程方式将表和数据从一个数据库迁移到另一个数据库。
源数据库和目标数据库是 MySQL。我正在使用 mysql import 命令从 sqldump 插入数据。我有一个自我相关的表(比如图像表)。每当我为此表执行 mysql 导入时,我都会看到某些记录被跳过。我不明白它们被跳过的原因,尝试了 --verbose 和 --debug 选项,不知道为什么这些不起作用。
我尝试了一些东西,
- 首先我尝试使用 mysql import 导入数据,我们跳过了 100/209 条记录。
结果 =>
Records:209 Deleted:0 Skipped:100 Warning:100 - 然后我尝试再次导入相同的 sql 转储文件,现在插入了剩余的 100 条记录,跳过了已经插入的 109 条记录。结果 =>
Records:209 Deleted:0 Skipped:109 Warning:109
我可以在目标数据库表中看到 209 条记录。
表格有related_image 列,说明所有图像与该特定ID 相关。
所以,看起来关系太深了,需要 N 次才能获取所有记录。有没有办法使用 mysql import 中的某些选项一次插入所有数据?
#!/bin/sh
MYSQLDUMP="mysqldump --login-path=$dest_loc$env"
MYSQLIMPORT="mysqlimport --login-path=$dest_loc$env"
#disable constraints
$MYSQL --database $dest_db -e "ALTER TABLE $table_name DISABLE KEYS; SET FOREIGN_KEY_CHECKS=0;"
#import data
$MYSQLIMPORT --columns "Id, Created, Status, Updated, ImageName, ImageType, MediaType, Sequence, Tag, ReceiptId, RelatedImageId, OriginalCreateDate, ContentLength" --lines-terminated-by="\n" --fields-terminated-by=',' --fields-optionally-enclosed-by="'" $dest_db $image_dump_source_file
#enable constraints
$MYSQL --database $dest_db -e "SET FOREIGN_KEY_CHECKS=1; ALTER TABLE $table_name ENABLE KEYS;"
不想重复两次mysql导入,不知道单条命令的导入方式是什么。
如果有人知道,请告诉我。
【问题讨论】:
-
禁用 FK,导入,启用 FK?
-
@P.Salmon,是的。
标签: mysql mysqlimport