mysql 导入自参考 table 跳过记录
mysql import for self reference table skipping records
我正在尝试以编程方式将 table 和数据从一个数据库迁移到另一个数据库。
源数据库和目标数据库是 MySQL。我正在使用 mysql 导入命令从 sqldump 插入数据。我有一个自我相关的table(比如图片table)。每当我为这个 table 执行 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 条记录 table。
Table 有 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 导入,不知道在单个命令中导入的方式是什么。
如果有人知道请告诉我。
找到适合我的解决方案
假设 table 中的记录相互依赖,我尝试对 table 进行排序,首先转储子行,然后转储父行。
对于上面的 table,用于按 Related-ID 对记录进行排序,在我的例子中,子记录的 ID 大于父记录。
按 relatedID 排序的行在上图中看起来相同,最后插入 table
我正在尝试以编程方式将 table 和数据从一个数据库迁移到另一个数据库。
源数据库和目标数据库是 MySQL。我正在使用 mysql 导入命令从 sqldump 插入数据。我有一个自我相关的table(比如图片table)。每当我为这个 table 执行 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 条记录 table。
Table 有 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 导入,不知道在单个命令中导入的方式是什么。
如果有人知道请告诉我。
找到适合我的解决方案
假设 table 中的记录相互依赖,我尝试对 table 进行排序,首先转储子行,然后转储父行。
对于上面的 table,用于按 Related-ID 对记录进行排序,在我的例子中,子记录的 ID 大于父记录。
按 relatedID 排序的行在上图中看起来相同,最后插入 table