Its almost the end of year. Many offer came and out include hosting. My friend just have her hosting account expire and the reason why she not continue her hosting plan is cost. She got her hosting package last year for $10 (from facebook group). The package cover free domain + 12 month of hosting and when renewal process came she can afford it. Its $104 now. Ten times from previous invoice. She already knew it and try to find other solution to keep her blog alive.
She already red my post about utilize vps. Her blog is using wordpress and she want to try it after she see my other blog that load blazing fast. I told her about Vultr and she could try it for cheapest package.
I promise her to help the migration process in exchange she let me share the process for hostingformula.net reader (I won’t reveal domain name). Hope this useful for others.
Lets get start!
Backup WordPress
In general WordPress is PHP and MySQL application. To backup wordpress the step is quite simple.
1. Backup database
To see all database credentials see wp-config.php content and write it down to notepad or other equal application. I’m lucky the host provide ssh access. So I can use command line for quick access 🙂
# cat wp-config.php
This command will display the content of wp-config.php . If you just want to extract the database essentials use this command : (my assumptions that you already log in with ssh).
# cat htdocs/wp-config.php | grep DB_NAME
# cat htdocs/wp-config.php | grep DB_USER
# cat htdocs/wp-config.php | grep DB_PASSWORD
Each command will show you database name, database user and database password.
Dump database :
# mysqldump -udb_user -p db_name > backupname.sql
In my case, the dump failed to table crash.
Use mysqlcheck to see the details.
# mysqlcheck -u db_user -p db_name
Enter password:
nita.wp_affp_referrals OK
nita.wp_cn_track_post
Error : Table ‘nita.wp_cn_track_post’ doesn’t exist
status : Operation failed
nita.wp_commentmeta OK
nita.wp_comments OK
nita.wp_fgallery_album_images OK
nita.wp_fgallery_albums OK
nita.wp_fgallery_albums_settings OK
nita.wp_fgallery_images OK
nita.wp_fgallery_templates OK
nita.wp_likes
Error : Table ‘nita.wp_likes’ doesn’t exist
status : Operation failed
nita.wp_links OK
nita.wp_options OK
nita.wp_postmeta OK
nita.wp_posts OK
nita.wp_stt2_meta OK
nita.wp_subscribe_reloaded OK
nita.wp_term_relationships OK
nita.wp_term_taxonomy OK
nita.wp_terms OK
nita.wp_usermeta OK
nita.wp_users OK
nita.wp_visitor_maps_ge OK
nita.wp_visitor_maps_st OK
nita.wp_visitor_maps_wo
warning : Table is marked as crashed and last repair failed
warning : 1 client is using or hasn’t closed the table properly
warning : Size of indexfile is: 351232 Should be: 157696
warning : Found 1019968 deleted space in delete link chain. Should be 1020008
error : Found 7492 deleted rows in delete link chain. Should be 7493
error : record delete-link-chain corrupted
error : Corrupt
nita.wp_wp_rp_tags OK
nita.wpsd_trends OK
Wow, since backup not available for certain tables then the only option I have is drop it.
# mysql -udb_user -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 78037
Server version: 5.5.40-0ubuntu0.14.04.1-log (Ubuntu)
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql> use nita;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+—————————–+
| Tables_in_nita |
+—————————–+
| wp_affp_referrals |
| wp_cn_track_post |
| wp_commentmeta |
| wp_comments |
| wp_fgallery_album_images |
| wp_fgallery_albums |
| wp_fgallery_albums_settings |
| wp_fgallery_images |
| wp_fgallery_templates |
| wp_likes |
| wp_links |
| wp_options |
| wp_postmeta |
| wp_posts |
| wp_stt2_meta |
| wp_subscribe_reloaded |
| wp_term_relationships |
| wp_term_taxonomy |
| wp_terms |
| wp_usermeta |
| wp_users |
| wp_visitor_maps_ge |
| wp_visitor_maps_st |
| wp_visitor_maps_wo |
| wp_wp_rp_tags |
| wpsd_trends |
+—————————–+
26 rows in set (0.00 sec)
mysql>
mysql> drop table wp_cn_track_post;
Query OK, 0 rows affected (0.01 sec)
mysql> drop table wp_likes;
Query OK, 0 rows affected (0.01 sec)
mysql> drop table wp_visitor_maps_wo;
Query OK, 0 rows affected (0.01 sec)
mysql> exit
Bye
Done. All tables are deleted.
Re-run mysqldump
# mysqldump -udb_user -p db_name > nita25nov.sql
Enter password:
# ls -l | grep sql
-rw-r–r– 1 root root 41696899 Nov 25 21:02 nita25nov.sql
Work well this time.
#cd ..
2. Compress the database + wordpress files
# tar cvzf public_nita25nov.tar.gz public
# mv public_nita25nov.tar.gz public/
#cd public
#nano index.php
Add these lines
<?php
echo ‘Migration to new server in progress, estimation time : 1 day’;
exit();
/**
* Front to the WordPress application. This file doesn’t do anything, but loads
* wp-blog-header.php which does and tells WordPress to load the theme.
*
* @package WordPress
In general the lines told to blog audience that the process is in progress.
At this stage backup wordpress is complete.
Backup file accessible from this address.
http://domainname.com/public_nita25nov.tar.gz
Choose cheap vps server for wordpress
I use Vultr for its value. DigitalOcean also nice but since Vultr give more memory (512 MB vs 768 MB) than DigitalOcean so I suggest Vultr.
For operating system I use Ubuntu 12.04 32 bit. I’ve try it before and consume lower memory that 14.04.
After place order the server will be initialized. This stage is little slower than DigitalOcean but I’ll wait 🙂
I ever use ServerPilot before but since Serverpilot only support 64 bit architecture then I choose EasyEngine.
Install EasyEngine on Vultr
The installation is straightforward.
Update everything
#apt-get update && apt-get upgrade && apt-get dist-upgrade
Create swap on Vultr
In general swap size is twice as installed memory. Lowest memory Vultr provide is 768MB. Target swap size for 768 MB memory is :
768 x 2 = 1536 MB
I prefer to use fallocate so I check it’s existence :
# which fallocate
/usr/bin/fallocate
You may continue
# fallocate -l 1536M /mnt/swap.img
fallocate: /mnt/swap.img: fallocate failed: Operation not supported
Ups, the command not work.
Old fashion way
# dd if=/dev/zero of=/mnt/swap.img bs=1024 count=1572864
1572864+0 records in
1572864+0 records out
1610612736 bytes (1.6 GB) copied, 3.29304 s, 489 MB/s
How to get 1572864? 1536 x 1024 is the answer.
mkswap
# mkswap /mnt/swap.img
Setting up swapspace version 1, size = 1572860 KiB
no label, UUID=dc4969ce-be42-4748-962b-1432c3ebc5d8
# swapon /mnt/swap.img
# echo '/mnt/swap.img none swap sw 0 0' >> /etc/fstab
# echo 'vm.swappiness=10' >> /etc/sysctl.conf
Check swap
# swapon -s
Filename Type Size Used Priority
/mnt/swap.img file 1572860 0 -1
or using free
# free -m
total used free shared buffers cached
Mem: 748 694 53 0 91 533
-/+ buffers/cache: 69 679
Swap: 1535 0 1535
Back to easy engine :
# wget -qO ee rt.cx/ee && sudo bash ee
Enter your name and your email address when asked.
How to create site on EasyEngine
Easyengine provide many type of sites creation through command line interface. Since my mission is import existing wordpress to easyengine based vps then my choice is create php+mysql site.
# ee site create domainname --mysql
That command will automatically create folder domainname inside /var/www folder . Within the folder you’ll find ee-config.php . This file contain all database credentials.
Import wordpress into easyengine
Download backup file from old host.
# wget http://domainname.com/public_nita25nov.tar.gz
# tar xvzf public_nita25nov.tar.gz
# mv htdocs htdocs-old
# mv public htdocs
# nano htdocs/wp-config.php
Edit the value according to ee-config.php value.
save the file.
Import database
mysql -udb_user -p db_name < nita25nov.sql
At this stage import process is done.
Enable the site on EasyEngine
If you already change A record to vps address then you’ll see nginx page. To see actual wordpress page you need to enable it.
# ee site enable domainname
Finish. At this stage everything should work fine.
A few things that might help you in trace error if needed.
- logs folder (located inside public folder created by easyengine).
- wp-config.php (if you have cache solution like wp super cache then you need to inspect related line).
- email (Vultr block email by default, you need to open ticket. Ask them to enable email for your vps).