Today I finally decided to move this site from its old domain to this new one, chunliu.me, which I got last year. For a personal hosted WordPress site, changing domain name is not a straight forward task, especially when you don’t want to break the existing external links that point to the site. Here is how I did it, with a lot of search on internet of course.
Copy the database and WordPress folder
To minimize the impact to the existing site, I duplicated the MySQL database of this site and its WordPress folder. Copy WordPress folder is easy, simply use cp
command to copy the whole folder. Copy database is a bit tricky because I forgot the password of the MySQL root user. I used the following way to reset the password of the root user.
- Run mysql with
--skip-grant-tables
.$ sudo service mysql stop $ sudo mkdir -p /var/run/mysqld $ sudo chown mysql:mysql /var/run/mysqld $ sudo mysqld --skip-grant-tables --skip-networking & $ jobs
- Update the password of root user with mysql client.
$ mysql -u root mysql> FLUSH PRIVILEGES; mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass'; mysql> QUIT;
- Restart mysql service.
$ sudo pkill mysqld $ jobs $ sudo service mysql start
With the above steps, the database can be copied with the following command.
mysqldump -u root --password=<pwd> <original db> | mysql -u root -p <new db>
Update the URL of the new site
With the copied WordPress and database, the URL needs to be updated in the following several places.
- wp_config.php: update
DB_NAME
andDOMAIN_CURRENT_SITE
; - wp_options table: update
site_url
andhome
; - wp_site and wp_blogs table: update
domain
;
Create a URL rewrite rule in the old site
The last thing is to create a url rewrite rule in the old site so that all requests to the old site can be redirected to the new site. This will help to keep the external links without broken.
Edit the .htaccess
file of the old site with the following code.
RewriteEngine On
RewriteCond %{HTTP_HOST} ^olddomain\.com$ [OR]
RewriteCond %{HTTP_HOST} ^blog\.olddomain\.com$
RewriteRule (.*)$ https://newdomain/$1 [R=301,L]
With that, the site is moved to the new domain successfully.