Minecraft Field guide

Moving Paper Plugins and Their Data to Another Server: SQLite, Permissions, and Databases

Migrating PaperMC plugins and databases to another server: flushing SQLite WAL logs, archiving the plugins directory, setting file permissions, and startup verification.

Moving Paper Plugins and Their Data to Another Server: SQLite, Permissions, and Databases

Migrating a Minecraft server to higher-performance hardware, unbundling a monolithic server into a Velocity or BungeeCord proxy network, or switching hosting providers requires transferring not just world maps, but your complete plugin infrastructure: LuckPerms permissions, EssentialsX balances, WorldGuard regions, and CoreProtect audit histories.

In this practical guide, we break down the structure of the plugins/ directory, execute clean daemon shutdowns to flush SQLite Write-Ahead Logs (WAL), migrate data to the new server, and verify dependency initialization.

Understanding the plugins Directory: Jars, Configs, and Datastores#

The plugins/ folder on a PaperMC instance holds three distinct classes of files:

  1. Executable Binaries (.jar): The compiled Java plugin logic.
  2. Configuration Files (.yml, .json): Behavioral settings and localized strings (messages.yml).
  3. Local Datastores: Embedded SQLite databases (.db, .sqlite), player profile records (userdata/<UUID>.yml), and flat data files.

A frequent error is assuming that copying .jar files alone is sufficient. The core value of your setup lives inside the matching plugin data folders, which maintain permissions hierarchies, player balances, and protected boundaries.

Migration Preparation: Daemon Shutdown and WAL Flushing#

Modern plugins like LuckPerms and CoreProtect utilize SQLite in Write-Ahead Logging (WAL) mode. During active gameplay, updates buffer inside temporary .db-wal and .db-shm files. Archiving the plugins/ directory while the server is live risks copying a desynchronized or corrupted database.

Halt the server service to force memory buffers to disk:

bash
sudo systemctl stop minecraft && sudo systemctl status minecraft

Verify that the java process has exited completely, then compile an archive of the entire plugin tree:

bash
cd /opt/minecraft/server
tar -czvf /tmp/plugins_migration.tar.gz plugins/
ls -lh /tmp/plugins_migration.tar.gz

Transferring Archives and Correcting Permissions on the Destination#

Transfer the compiled archive to the destination host via scp:

bash
scp /tmp/plugins_migration.tar.gz user@new-server-ip:/tmp/

On the destination server, unpack the archive into the server root and restore file ownership:

bash
cd /opt/minecraft/server
tar -xzvf /tmp/plugins_migration.tar.gz
sudo chown -R minecraft:minecraft /opt/minecraft/server/plugins
sudo chmod -R 755 /opt/minecraft/server/plugins

If files remain owned by root, the plugin runtime cannot create or lock database files upon startup, triggering immediate java.io.IOException: Permission denied crashes.

External Database Synchronization and Startup Verification#

If any plugins connect to an external SQL database (MySQL, MariaDB, or PostgreSQL), audit and update the connection credentials (host, database, user, password) within plugins/<PluginName>/config.yml:

bash
grep -rn "host:" /opt/minecraft/server/plugins/*/config.yml 2>/dev/null

Start the PaperMC service on the destination host:

bash
sudo systemctl start minecraft && sudo journalctl -u minecraft -f --no-tail

Audit logs/latest.log for initialization exceptions:

bash
grep -E "ERROR|Enabling LuckPerms|Enabling Vault" /opt/minecraft/server/logs/latest.log

Clean startup output confirming Vault and LuckPerms without database corruption warnings validates that all permissions and economy balances transferred seamlessly.

If you are looking to deploy a high-performance PaperMC instance with fast SFTP data migration, automated scheduled backups, and optimized server runtimes, professional Minecraft server hosting delivers the tools required for painless server migrations.

References#