面试题答案
一键面试操作步骤
- 禁用外键约束:在源数据库实例中,对于
orders
表禁用外键约束。以 MySQL 为例,使用以下语句:
ALTER TABLE orders DISABLE KEYS;
- 迁移
customers
表数据:使用数据库工具(如 mysqldump 等)将customers
表的数据从源数据库实例导出,并导入到目标数据库实例。 例如,在源数据库导出:
mysqldump -u username -p --no-data --tables customers > customers_schema.sql
mysqldump -u username -p --no-create-info --tables customers > customers_data.sql
在目标数据库导入:
mysql -u username -p < customers_schema.sql
mysql -u username -p < customers_data.sql
- 重新启用外键约束:在目标数据库实例中,对于
orders
表重新启用外键约束。同样以 MySQL 为例,使用以下语句:
ALTER TABLE orders ENABLE KEYS;
可能遇到的问题及解决方案
- 数据不一致问题:在迁移
customers
表数据过程中,如果orders
表同时有新数据插入且依赖未迁移的customers
表数据,可能导致数据不一致。- 解决方案:在迁移前锁定
orders
表写操作,迁移完成后再解锁。例如在 MySQL 中:
- 解决方案:在迁移前锁定
LOCK TABLES orders WRITE;
-- 迁移 customers 表数据
UNLOCK TABLES;
- 外键约束不匹配问题:如果目标数据库实例中
orders
表的外键约束定义与源数据库不同,可能导致启用外键约束失败。- 解决方案:在迁移前确保目标数据库实例
orders
表的外键约束定义与源数据库一致。可以通过对比源数据库SHOW CREATE TABLE orders
的结果,在目标数据库创建相同外键约束。
- 解决方案:在迁移前确保目标数据库实例
- 迁移过程中数据丢失问题:在数据导出导入过程中,可能因为网络问题等导致部分数据丢失。
- 解决方案:在迁移完成后,对比源数据库和目标数据库
customers
表的记录数,以及关键数据字段的校验和等。如果数据不一致,重新进行迁移。
- 解决方案:在迁移完成后,对比源数据库和目标数据库