Introduce a DB dialect interface and per-dialect wrappers that expose connection, query and column type operations with pre/post SQL hooks.
Add a YAML config schema for migration jobs (source/target schema, table, primary key, options) and parse it at startup.
Wire a structured logger and a top-level migration job that drives extract, transform and load stages.