Avatar
1
Tuyen Nguyen Beginner
Tuyen Nguyen Beginner
[Mysql] Migrate table production
Chào anh Dũng và mọi người

Database: Mysql

Framework: Laravel

  • Answer
Remain: 5
1 Answer
Avatar
tvd12 Beginner
tvd12 Beginner
Thật may là anh đã từng làm migrate rồi, anh viết 1 chương trình để chạy migrate em ạ, em tham khảo, anh viết bằng java, em có thể convert sang php nhé.
public class Migrator {

    @Data
    public static class Record {
        private long id;
        // data
    }

    public static void main(String[] args) {
        int limit = 300;
        long lastMigratedId = getLastMigratedId();
        Logger logger = LoggerFactory.getLogger(Migrator.class);
        logger.info("migration start");
        while (true) {
            try {
                logger.info(
                    "get records to migrate, limit: {}, last id: {}",
                    limit,
                    lastMigratedId
                );
                List<Record> records = getRecordsToMigrateFromDatabaseA(
                    lastMigratedId,
                    limit
                );
                logger.info(
                    "done get records to migrate, records.size: {}",
                    records.size()
                );
                saveRecordsToDatabaseB(records);
                logger.info("saved records");
                if (records.size() < limit) {
                    break;
                }
                saveLastMigratedId(records.get(records.size() - 1).getId());
            } catch (Exception e) {
                logger.error("migrate failed", e);
                break;
            }
        }
        logger.info("migration done");
    }
}
  • 0
  • Reply
Để em tham khảo xem ạ . Em đang hiểu ý tưởng như sau:
  • Đầu tiên tạo 1 list để lưu record từ table cũ
  • Số lượng bản ghi lấy mỗi lần là 300 bản ghi
  • Lấy id của bản ghi cuối cùng đã lấy được
  • Sẽ lấy bản số lượng bản ghi dựa theo lastMigratedID và offset và limit
  • Lưu vào table mới
  • Lưu lại giá trị của lastMigrateID
 –  Tuyen Nguyen 1705048196000
Không cần theo offset và limit chỉ cần theo lastMigratedID là đủ em ạ  –  monkey 1705048372000
vâng em sẽ check lại ạ  –  Tuyen Nguyen 1705048768000
Cảm ơn anh  –  Tuyen Nguyen 1705048779000