Tutorial ini menjelaskan cara membuat backup dan restore database MySQL atau MariaDB dari baris perintah menggunakan utilitas mysqldump.
File backup yang dibuat oleh utilitas mysqldump pada dasarnya adalah seperangkat pernyataan SQL yang dapat digunakan untuk membuat ulang database asli. Perintah mysqldump juga dapat menghasilkan output file dalam format CSV dan XML.
Anda juga dapat menggunakan utilitas mysqldump untuk mentransfer database MySQL Anda ke server MySQL lain.
Jika Anda tidak membuat cadangan database, bug perangkat lunak atau kegagalan hard drive bisa menjadi bencana. Untuk membantu menghemat banyak waktu dan frustrasi, Anda sangat disarankan untuk berhati-hati dengan membuat backup database MySQL Anda secara berkala.
Sintaks Perintah Mysqldump
Sebelum membahas cara menggunakan perintah mysqldump, mari kita mulai dengan meninjau sintaks dasar.
Ekspresi utilitas mysqldump mengambil bentuk berikut:
mysqldump [options] > file.sql
options
– Opsi untuk mysqldumpfile.sql
– Output hasil backup
Untuk menggunakan perintah mysqldump, MySQL server harus dapat diakses dan dijalankan.
Backup Satu Database MySQL
Kasus penggunaan paling umum dari tool mysqldump adalah untuk membuat cadangan satu database.
Misalnya, untuk membuat cadangan dari database bernama analisa_website
dan menyimpannya ke file bernama analisa_website.sql
, untuk melakukannya, jalankan perintah berikut dengan pengguna root
:
mysqldump -u root -p analisa_website > analisa_website.sql
Anda akan diminta memasukkan password root. Setelah otentikasi berhasil, proses dump akan dimulai. Bergantung pada ukuran database, prosesnya bisa relatif.
Jika Anda masuk sebagai pengguna yang sama dengan yang Anda gunakan untuk melakukan ekspor dan pengguna itu tidak memerlukan kata sandi, Anda dapat menghilangkan opsi -u
dan -p
:
mysqldump analisa_website > analisa_website.sql
Cara Backup Beberapa Database MySQL
Untuk mem-backup beberapa database MySQL dengan satu perintah, Anda perlu menggunakan opsi --database
diikuti oleh daftar database yang ingin di backup. Setiap nama database harus dipisahkan oleh spasi.
mysqldump -u root -p --databases analisa_website_a analisa_website_b > database_analisa_a_b.sql
Perintah di atas akan membuat file dump yang berisi kedua database (digabung).
Backup Semua Database MySQL
Gunakan opsi --all-databases
untuk mencadangkan semua database MySQL:
mysqldump -u root -p --all-databases > semua_database.sql
Sama seperti contoh sebelumnya, perintah di atas akan membuat file dump tunggal yang bernama semua_database.sql
dan berisi semua basis data.
Backup Semua Database MySQL ke File Terpisah
Utilitas mysqldump
tidak memberikan opsi untuk mencadangkan semua databases ke file terpisah, tetapi kita dengan mudah mencapainya dengan menggunakan bash FOR
loop sederhana:
for DB in $(mysql -e 'show databases' -s --skip-column-names); do mysqldump $DB > "$DB.sql"; done
Perintah di atas akan membuat file dump terpisah untuk setiap database, output backup akan menggunakan nama database sebagai nama file.
Buat Backup Database MySQL Terkompresi
Jika ukuran basis data sangat besar, maka pilihan untuk mengompres output merupakan ide yang baik. Untuk melakukan itu cukup gunakan simbol pipe ( |
) di output ke utilitas gzip, dan arahkan kembali ke file seperti yang ditunjukkan di bawah ini:
mysqldump nama_database | gzip > nama_hasil.sql.gz
Buat backup dengan Cap Waktu
Jika Anda ingin menyimpan lebih dari satu cadangan di lokasi yang sama, maka Anda dapat menambahkan tanggal saat ini ke nama file cadangan:
mysqldump nama_db > nama_backup-$(date +%Y%m%d).sql
Perintah di atas akan membuat file dengan format berikut nama_backup-20180617.sql
Restore dump MySQL
Anda dapat memulihkan dump MySQL menggunakan tool mysql. Perintah sintaks umum adalah sebagai berikut:
mysqld nama_database < file.sql
Dalam kebanyakan kasus, Anda harus membuat database untuk diimpor. Jika database sudah ada, pertama Anda harus menghapusnya.
Pada contoh berikut ini, perintah pertama akan membuat database bernama nama_database
dan kemudian akan mengimpor dump backup_database.sql
ke dalamnya:
mysql -u root -p -e "create database nama_database"; mysql -u root -p nama_database < backup_database.sql
Restore Database MySQL Tunggal dari Full MySQL Dump
Jika Anda mencadangkan semua basis data Anda menggunakan opsi -all-databases
dan Anda ingin mengembalikan satu database dari file backup yang notabene berisi banyak database, Anda dapat menggunakan opsi --one-database
seperti yang ditunjukkan dalam contoh di bawah ini:
mysql --one-database database_name < all_databases.sql
Export dan Import Database MySQL Dalam Satu Perintah
Alih-alih membuat file dump dari satu database dan kemudian mengimpor backup ke database MySQL lain, Anda bisa menggunakan satu perintah dengan :
mysqldump -u root -p nama_database | mysql -h remote_host -u root -p remote_nama_database
Perintah di atas akan menyalurkan output ke mysql client pada host jarak jauh dan akan mengimpornya ke database bernama remote_nama_database
. Sebelum menjalankan perintah, pastikan database sudah ada di server jauh.
Backup Otomatis Database MySQL Menggunakan Cron job
Mengotomatiskan proses backup database semudah membuat cron job seperti pada umumnya. Kita akan mengatur cron job untuk menjalankan perintah mysqldump pada waktu yang ditentukan.
Untuk mengatur cadangan otomatis dari database MySQL menggunakan cronjob, ikuti langkah-langkah di bawah ini:
- Buat file bernama
.my.cnf
di direktori home pengguna Anda:sudo nano ~/.my.cnf
Copy dan Paste teks berikut ini ke file .my.cnf.
[client] user = dbuser password = dbpasswd
Jangan lupa ganti
dbuser
dandbpasswd
dengan nama dan kata sandi kredensial Anda. - Batasi izin file kredensial sehingga hanya Anda yang dapat mengaksesnya:
chmod 600 ~/.my.cnf
- Buat direktori untuk menyimpan backup :
mkdir ~/folder_backup
- Kemudian Buka file crontab
crontab -e
Tambahkan cron job berikut yang akan membuat backup dari nama database
database_saya
setiap hari pada pukul 3 pagi:0 3 * * * /usr/bin/mysqldump -u dbuser database_saya > /home/username/folder_backup/mydb-$(date +%Y%m%d).sql
Jangan lupa mengganti dbuser dengan nama akun MySQL dan
username
dengan nama akun Anda yang sebenarnya (Nama akun yang ada di sistem operasi).
Anda juga dapat membuat cronjob lain untuk menghapus cadangan yang lebih dari 30 hari:
find /path/to/backups -type f -name "*.sql" -mtime +30 -delete
Tentu saja, Anda perlu menyesuaikan perintah sesuai dengan lokasi cadangan Anda dan nama file. Untuk mempelajari lebih lanjut tentang perintah find, lihat Cara Menemukan File di Linux Menggunakan Command Line.
Kesimpulan
Tutorial ini hanya mencakup dasar-dasar mengelola database MySQL, tetapi dapat menjadi awal yang baik bagi siapa saja yang ingin belajar cara membuat dan restore backup database MySQL dari baris perintah menggunakan utilitas mysqldump.
Jika Anda ingin mempelajari lebih lanjut tentang bekerja dengan MySQL dari baris perintah, Lihat juga panduan lain tentang mengolah dan mengatur database :