Website Migration – Part 3: MySQL Migration for WordPress
In this post, I’ll walk through the process of migrating my WordPress database from a Windows server to a Linux server, along with setting up MySQL on the Linux server.
1. Backing Up the Existing Database on Windows
Before migrating, I needed to backup the WordPress database from the Windows server.
Exporting MySQL Database
I used the MySQL command line to export the database. First, navigate to the MySQL installation directory:
cd "C:\Program Files\MySQL\MySQL Server 8.0\bin"
Then, run the following command to export the database:
.\mysqldump.exe -u ruiand -p ruianweb > C:\ruianweb_backup.sql
Transferring the Backup File to the Linux Server
Using SCP, I transferred the backup file from the Windows server to the Linux server:
scp C:\ruianweb_backup.sql root@{ipaddress}:/data/sqlbackup/
2. Configuring MySQL on the Linux Server
Logging into MySQL
After installing MySQL on the Linux server, I logged in using the root account:
sudo mysql -u root -p
Since I hadn’t set a password for the root user earlier, I configured it immediately:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password'; FLUSH PRIVILEGES;
Creating a New Database
I created a new database for WordPress:
CREATE DATABASE ruianweb;
Creating a User and Granting Permissions
Next, I created the ruiand
user (to match the WordPress configuration) and granted all privileges on the new database:
CREATE USER 'ruiand'@'localhost' IDENTIFIED BY '<my_password>'; GRANT ALL PRIVILEGES ON ruianweb.* TO 'ruiand'@'localhost'; FLUSH PRIVILEGES;
Exiting MySQL
After the setup was done, I exited the MySQL console:
EXIT;
3. Importing the Database Backup
Importing the Database
I tried importing the database backup on the Linux server:
mysql -u ruiand -p ruianweb < /data/sqlbackup/ruianweb_backup.sql
Unfortunately, I encountered the following error:
ERROR: ASCII '\0' appeared in the statement...
To fix this, I added the --binary-mode=1
option:
mysql --binary-mode=1 -u ruiand -p ruianweb < /data/sqlbackup/ruianweb_backup.sql
However, I still faced the same issue. Suspecting a character set problem (as my blog contains Chinese text), I re-exported the database using UTF-8 encoding:
mysqldump --default-character-set=utf8 -u ruiand -p ruianweb > ruianweb_backup.sql
Despite this, the error persisted. Further investigation revealed that the backup file was in UTF-16 encoding. I used iconv
to convert it to UTF-8:
iconv -f UTF-16 -t UTF-8 /data/sqlbackup/ruianweb_backup.sql -o /data/sqlbackup/ruianweb_backup_utf8.sql
But the import still failed with syntax errors. At this point, I suspected the issue was due to cross-platform differences.
4. Using MySQL Workbench for Backup
Instead of using mysqldump
, I switched to MySQL Workbench for a graphical backup:
Backing Up the Database
a. Open MySQL Workbench and connect to the database.
b. Go to Data Export, select the ruianweb database, and export it as an SQL file.
c. Ensure you select Export to self-contained file.
Transferring and Importing
I then used SCP to transfer the new backup file to the Linux server and successfully imported it without any errors.
5. Verifying the Database Connection
After importing the database, I verified that WordPress could connect to the new MySQL database.
Updating wp-config.php
I ensured that the database settings in WordPress were correctly configured:
define( 'DB_NAME', 'ruianweb' ); define( 'DB_USER', 'ruiand' ); define( 'DB_PASSWORD', '{password}' ); define( 'DB_HOST', 'localhost' );
Restarting Apache and Testing
Finally, I restarted Apache:
sudo systemctl restart apache2
I then accessed https://www.ruianding.com/blog to confirm that everything was running smoothly.
This post covered the steps I took to successfully migrate my WordPress database to the Linux server, along with troubleshooting key issues during the migration process.