[Ghost] Migrate from sqlite3 to MySQL
So you’re running a Ghost blog with the default sqlite3 database, but you changed your mind and now you want to switch to MySQL ? Don’t worry, it shouldn’t take more that 10 minutes.
This tutorial assumes that you are already running a MySQL server and a Ghost blog on the same server, at the address example.com
.
This as been tested on Ubuntu 12.04 server and Ghost 0.3.3.
Why ?
There are a lot of reasons to switch from sqlite3 to MySQL. I was personnaly motivated by the followings:
- I already run a few databases in MySQL
- I could backup the database without shutting down Ghost
- I could use phpMyAdmin
BTW, I don’t think performance is a reason to change. Although it’s true that MySQL is faster, it’s well known that sqlite3 is fast enough for a blog.
Step 1 : Export database
Within your web browser, open example.com/ghost/debug/
.
Then click “Export” and choose a location for your GhostData.json
.
Keep it until step 6.
Step 2 : Install MySQL module
In order to use MySQL in Ghost, we first need to install the MySQL module for node.js:
cd /var/www/ghost
npm install mysql
Step 3 : Create MySQL user and database
Ghost needs a MySQL user account to connect to the database, so we’ll create a ghost
user and grant him with the required priviledges.
Then we’ll create the ghost
database, because Ghost won’t create it by itself.
mysql -u root -p
CREATE USER ghost@localhost IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON ghost.* TO ghost@localhost;
CREATE DATABASE ghost CHARACTER SET utf8;
EXIT;
Step 4 : Configure Ghost
Edit /var/www/ghost/config.js
and replace the database
section by:
database: {
client: 'mysql',
connection: {
host: '127.0.0.1',
user: 'ghost',
password: 'password',
database: 'ghost',
charset: 'utf8'
}
},
Step 5 : Start Ghost
Now that Ghost is ready, you can start it:
npm start --production
Then, in your web browser, open example.com
and create a user like the first time you created your blog.
It doesn’t matter what user name or password you choose since they will be replaced by the original ones.
Step 6 : Import database
With your web browser, open example.com/ghost/debug/
.
Then select the GhostData.json
in your hard drive and click “Import”.
Step 7 : Clean up
First thing you’ll notice is that, in the admin interface, the posts appear in the wrong order. Don’t worry, they appear correctly in the blog. (This bug has been fixed in Ghost 0.4)
Then, you’ll see that the “Welcome to Ghost” post has been created again, like it did when you first created your blog. You need to delete this post, like you’d do for any post.
Finally, if you want to get rid of the sqlite3 database:
rm /var/www/ghost/content/data/ghost.db