What actually moves in a Moodle migration
A Moodle site is three things
The database holds users, courses, grades, logs and settings. The code directory holds Moodle, plugins and the theme. The moodledata directory holds every uploaded file, stored under hashed names that only the database can interpret. A whole-site move must carry all three in a consistent state. Copy the files on Friday and the database on Sunday, and you get submissions that point at nothing. We put the site in maintenance mode for the final sync, having copied the bulk of moodledata in advance so the window stays short.
Course backups and their limits
The .mbz backup is Moodle's portable course format. It carries activities, resources, question banks, settings and, if selected, user data such as submissions, attempts, grades and completion. It is the right tool for moving selected courses or merging sites, and it has limits you should know about before planning around it. Site-level items such as cohorts, site-wide role definitions and site settings are not inside a course backup. Very large courses can exceed time and size limits unless backups are run from the command line. And activities from a plugin that is missing on the target simply do not restore.
Matching people
When a course is restored with user data, Moodle tries to match each user to an existing account and otherwise creates one. In a consolidation that is where duplicates are born. We agree the identifier first, clean both user tables against it, and load or map accounts before any course arrives. Passwords deserve a decision too. Inside a whole-site move they come along. From another platform they generally cannot be reused, so we plan for single sign-on or a reset email at first login.
Coming from a different LMS
There is no button that converts another platform into Moodle. Content moves through standards where the source can export them (SCORM, common cartridge, question formats) and by rebuilding where it cannot. History moves as data: we extract enrolments, grades and completion dates from the old system and write them into Moodle through its APIs, so reports and certificates show the original dates. We tell you up front what cannot be carried, typically attempt-level detail and discussion threads.
Rehearse, reconcile, then switch
Every migration is run at least once in full on a staging target. We time each step, then compare counts between source and target: users, enrolments per course, grade items, completions, files. Your own staff spot-check courses they know. Only when the numbers agree do we schedule the cutover, and the old site stays online in read-only form until you are ready to archive it. If the right destination turns out not to be Moodle at all, our migration and modernization team plans the move out with equal care, including moves to LearnDash.