Cara Migrasi Database MySQL ke Server Lain di Ubuntu 14.04

Prasyarat
Untuk mengikuti panduan ini, Anda harus menjalankan sebuah aplikasi dan database dalam suatu server VPS.

Agar mudah dipahami, server ini akan disebut lamp-1 untuk seterusnya.

Di samping itu, Anda perlu membuat database MySQL di server VPS lainnya yang memiliki fitur private networking. Untuk seterusnya sever ini akan dinamakan mysql-1.

Tujuan dari Panduan ini
Di akhir panduan ini, database di lamp-1 akan berpindah ke mysql-1.

Ada dua langkah utama yang harus dilakukan untuk mencapai tujuan panduan ini:

  1. Memindahkan database ke server baru.
  2. Menghubungkan aplikasi ke database tersebut.

Memindahkan Database ke Server Baru
Pertama-tama, Anda harus memiliki server VPS lain yang akan digunakan untuk MySQL database. Server ini akan dinamakan mysql-1.

Jika sudah, masuklah ke dalam server tersebut dan lakukan update apt dengan command berikut:

sudo apt-get update
Lalu, ketik apt command di bawah ini untuk install server MySQL:

sudo apt-get install mysql-server
Anda akan diminta untuk memasukkan root password untuk instalasi ini, yang nantinya juga dapat digunakan sebagai password untuk akses ke dalam server ini. Sesudahnya, buatlah tabel database dengan command ini:

sudo mysql_install_db
Sebagai langkah terakhir, tambahkan command di bawah ini:

sudo mysql_secure_installation
Berikutnya akan muncul beberapa pertanyaan. Pilih “Yes” untuk semuanya, kecuali jika Anda ingin merespon dengan jawaban “No” untuk reset root password.

Saat ini database MySQL yang baru hanya dapat berhubungan dengan localhost atau 127.0.0.1. Agar server lamp-1 dapat dihubungkan dengan database tersebut, Anda harus mengaturnya untuk bisa merespons IP addressnya sendiri. Akses konfigurasi MySQL dengan command berikut:

sudo vi /etc.mysql/my.cnf
Di dalamnya, Anda akan menemukan line seperti ini:

bind-address = 127.0.0.1
Gantilah 127.0.0.1 dengan IP address server mysql-1. Hasilnya seperti demikian:

bind-address = mysql_1_private_IP
Apabila ada pengaturan MySQL lain yang ingin diubah, Anda dianjurkan untuk melakukannya sekarang. Jika sudah, simpanlah perubahan yang telah dibuat dan tutup konfigurasi tersebut. Namun, MySQL perlu di-restart dengan command berikut agar dapat berfungsi:

sudo service mysql restart
Dengan melakukan langkah-langkah di atas, server mysql-1 dapat merespons traffic MySQL melalui IP addressnya. Pada bagian selanjutnya, Anda akan diajak untuk memindahkan database yang ada di server lamp-1.

Ekspor Backup Database Lama
Sebelum memulai proses ini, perlu diingat bahwa Anda bisa meminta server lamp-1 untuk tidak menambahkan data apa pun ke database lama ketika perpindahan dilakukan. Walau demikian, database ini akan tetap terkunci secara otomatis selama proses berlangsung.

Pada tahap ini, Anda akan mengekspor backup database lama dan memindahkannya ke server mysql-1. Pertama, Anda harus mengunci database tersebut agar bisa melakukan data dump. Ketika sebuah database dikunci, aplikasi yang menggunakannya tidak akan dapat menyimpan informasi baru sampai Anda menyelesaikan proses ini.

Masuklah ke dalam console MySQL di server lamp-1 dengan command berikut:

mysql -u root -p
Command di bawah ini akan mengunci database pada server lamp-1:

FLUSH TABLES WITH READ LOCK;
SET GLOBAL read_only = ON;
EXIT
Sekarang jalankan command berikut di command shell Anda untuk mengekspor backup database lama ke dalam file dump.sql:

Mysqldump –lock-all-tables -u root -p –all-databases > dump.sql
Copy file dump.sql tersebut ke dalam server mysql-1 menggunakan SCP (secure copy protocol):

scp dump.sql [email protected]_1_private_IP:/tmp
Karena database di server lamp-1 sudah tidak akan digunakan lagi, Anda dapat membiarkannya terkunci. Namun apabila Anda ingin membukanya kembali, masukkanlah command ini di console MySQL:

SET GLOBAL read_only = OFF;
UNLOCK TABLES;
Baca Juga : Tutorial Lengkap Instalasi Ubuntu Server

Impor Database ke Server Baru
Pada tahap ini, Anda akan mengimpor database ke server mysql-1. Masukkan command ini di dalam server tersebut untuk memindahkan file dump.sql:

mysql -u root -p < /tmp/dump.sql
Dengan demikian, semua data dan user di database lama sudah berpindah ke server mysql-1. Selanjutnya Anda akan membuat user-user baru dengan privilege yang sama.

Membuat User Baru untuk Menghubungkan Server Lama
Pengelolaan user di MySQL menggunakan username dan host pair. Oleh karena itu, Anda harus membuat user-user baru dengan host value yang cocok dengan IP address server lamp-1. Mulailah dengan mengakses console MySQL:

mysql -u root -p
Lalu masukkan statement berikut untuk memperlihatkan semua user dan host database:

SELECT user,host FROM mysql.user;
Contoh outputnya demikian:

+------------------+-----------+
| user             | host      |
+------------------+-----------+
| root             | 127.0.0.1 |
| root             | ::1       |
| debian-sys-maint | localhost |
| root             | localhost |
| wordpressuser    | localhost |
+------------------+-----------+
5 rows in set (0.00 sec)

Seperti yang bisa Anda lihat di atas, ada user bernama wordpressuser dengan source host localhost. Andaikan wordpressuser sebagai nama user aplikasi Anda.

Karena sekarang aplikasi dan databasenya tidak berada dalam satu server, ia tidak akan menggunakan koneksi dari localhost. Anda harus membuat user baru bernama wordpressuser dengan nama host diisi oleh IP address server lamp-1 agar aplikasi dapat terhubung dengan database baru.

Di samping itu, Anda juga perlu menggunakan password yang telah dibuat ketika melakukan pengaturan MySQL di server mysql-1:

CREATE USER ‘wordpressuser’@’lamp_1_private_IP IDENTIFIED BY ‘password’;
Setiap Anda membuat ulang user yang sudah ada di database lama, misalnya wordpressuser, jalankan statement berikut untuk melihat privilege-nya:

SHOW GRANTS FOR [email protected];
Contoh output:

Perhatikan teks setelah GRANT USAGE ON *.* karena Anda akan mengubahnya untuk mengatur privilege user baru.

Sebagai contoh, Anda akan menggunakan statement berikut untuk memberikan privilege ke user baru (contoh database ini akan dinamakan wordpress). Statement ini sama seperti pada output di atas, tetapi localhost diganti dengan IP address server lamp-1:

GRANT ALL PRIVILEGES ON `wordpress`.* TO ‘wordpressuser’@’lamp_1_private_IP’;
Sekarang masukkan command berikut untuk menunjukkan privilege user yang baru saja dibuat:

SHOW GRANTS FOR [email protected]_1_private_IP;
Contoh output:

Setelah mengubah host value semua user baru, jalankan statement berikut untuk mengaktifkan perubahannya dan menutup console MySQL:

FLUSH PRIVILEGES;
EXIT
Setelah database telah dipindah ke server mysql-1 dan dikonfigurasikan, Anda perlu mengubah pengaturan aplikasi agar dapat terhubung dengan database di server tersebut.

Memperbarui Pengaturan Aplikasi
Langkah terakhir dalam panduan ini adalah menghubungkan aplikasi Anda ke database baru di server mysql-1. Lokasi file konfigurasi tergantung pada aplikasi yang digunakan serta letak instalasinya. Sebagai contoh, panduan ini menggunakan WordPress.

Contoh Pengaturan WordPress
WordPress menyimpan pengaturan koneksi database-nya dalam file wp-config.php. File ini dapat Anda temukan di direktori instalasi aplikasi tersebut, contohnya /var/www/html/.

Bukalah pengaturan WordPress dengan command ini:

sudo vi /var/www/html/wp-config.php
Kemudian, temukan teks berikut:

/** MySQL hostname */
define (‘DB_HOST’, ‘localhost’);
Gantilah localhost dengan IP address server mysql-1. Contohnya seperti di bawah ini:

define(‘DB_HOST’, ‘mysql_1_private_IP’);
Jika sudah, simpan lalu tutup pengaturannya. Tidak akan ada yang berubah pada WordPress, tapi sekarang aplikasi tersebut telah terhubung dengan database baru di server mysql-1.

Aplikasi Lainnya
Cara di panduan ini bisa diterapkan pada aplikasi apapun. Anda hanya perlu mengakses pengaturan koneksi database aplikasi, lalu mengganti host value localhost atau 127.0.0.1 dengan IP address server baru.

Agar proses ini berhasil, Anda juga perlu memulai ulang aplikasi yang digunakan.

Menghentikan MySQL di Server Lama
Setelah dipastikan bahwa aplikasi Anda dapat terhubung dengan database baru, perlu database lama perlu dihapus. Setidaknya, Anda perlu menghentikan kinerja MySQL agar tidak menggunakan resource server.