Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara mencadangkan database MySQL dari baris perintah di Linux

Evolusi teknologi saat ini dari setiap aspek kehidupan telah membuat data lebih berharga daripada emas dan perak. Jika Anda dapat memperoleh, menumbuhkan, dan melindungi data, Anda selangkah lagi menjadi dewa data. Namun, perusahaan besar yang mengendalikan aspek kehidupan seperti e-commerce, bahan bakar, transportasi, dan lanskap makanan mengandalkan perlindungan data untuk melindungi diri dari kehancuran yang tak terhindarkan.

Saat ini, kehilangan data seperti kehilangan asuransi jiwa Anda. Jadi sistem manajemen basis data yang Anda gunakan harus memiliki orientasi cadangan. Jika Anda adalah administrator MySQL atau pengguna yang berurusan dengan pertumbuhan data, Anda harus mempertimbangkan untuk menerapkan rencana otomatisasi pencadangan yang lebih sering. Alasan? Anda mungkin menjadi korban peretasan data atau bahkan mengubah data Anda secara tidak sengaja.

Keadaan seperti itu dapat menyebabkan pelanggaran data yang tak termaafkan, terutama ketika Anda tidak memiliki rencana pencadangan basis data. Jika Anda adalah pengguna atau administrator MySQL yang berinvestasi, artikel ini ada di sini untuk memperbaiki kekhawatiran pencadangan basis data Anda. Kami akan memenuhi dua tujuan. Pertama, Anda akan memahami implementasi mengekspor database melalui "mysqldump". Kemudian, terakhir, kita akan membahas bagaimana menggunakan “crontab” dapat membuat seluruh proses ini lebih mudah melalui otomatisasi.

Siapkan direktori cadangan data

Karena Linux tidak membuat rekomendasi pengguna untuk tujuan pencadangan data MySQL, Anda harus memilih lokasi pencadangan yang sesuai. Misalnya, dalam panduan tutorial ini, kita akan bekerja di bawah direktori cadangan di “/var/www_my_backups/”. Kami hanya mempertimbangkan pendekatan ini untuk memahami mekanisme pencadangan data MySQL. Idealnya, disarankan agar semua pencadangan data penting dilakukan di server offside.

Anda dapat membuat direktori cadangan pilihan Anda di mesin lokal Anda melalui perintah terminal yang mirip dengan berikut ini:

$ sudo mkdir /var/www_my_backups/

Pastikan bahwa mesin pencadangan yang dioperasikan Linux yang Anda gunakan telah memberi Anda hak istimewa dengan akses root atau hak sudo. Jika Anda tidak memiliki akses pemilik ke direktori cadangan yang dibuat, Anda akan menghadapi kesalahan izin saat menjalankan tes mysqldump. Perintah berikut harus mencantumkan pengguna sistem yang aktif saat ini dan detailnya jika Anda memiliki hak kepemilikan pada folder cadangan yang dibuat.

$ sudo chown $(whoami):$(whoami) /var/www_my_backups/

Utilitas klien mysqldump

Alat MySQL ini melakukan pencadangan logis. Ini menghasilkan beberapa set pernyataan SQL, yang membuat ulang data tabel database asli dan definisi objek saat dieksekusi. Selain itu, satu atau beberapa dump database MySQL dicadangkan atau ditransfer ke server database SQL sekunder.

Perintah mysqldump standar diwakili oleh sintaks perintah berikut.

$ mysqldump -u [mysql_username] -p[mysql_password] [mysql_database_name] > /path/to/[mysql_dump_file_name].sql
  • -u [mysql_username]: mewakili pengguna istimewa dari database MySQL. Pengguna ini harus dapat menjalankan operasi dump database.
  • -p[mysql_password]: mewakili kata sandi pengguna dari database MySQL. JANGAN tambahkan spasi antara “-p” dan “[mysql_password]”.
  • [mysql_dump_file_name]: mewakili nama database MySQL Anda.
  • >: menunjuk ke tujuan dump keluaran
  • /path/to/[mysql_dump_file_name].sql: menunjuk ke lokasi jalur file dump terkait. Anda dapat memberikan nama khusus untuk file dump ini [mysql_dump_file_name] jika Anda mau.

Sebelum kita melanjutkan dengan panduan tutorial ini, ada sesuatu yang perlu disebutkan tentang “-p[mysql_password]”. Meskipun panduan artikel ini akan fokus untuk mengaitkan penggunaannya dengan beberapa contoh dump MySQL, Anda harus menghindari menggunakannya secara langsung saat menangani dump cadangan MySQL Anda yang sebenarnya, terutama di jaringan bersama.

Dump yang sedang berjalan dapat dibajak dengan perintah dua dimensi seperti “ps ax”, yang mengungkapkan nama pengguna dan sandi database terkait. Namun, menggunakan lokasi “~/.my.cnf” untuk menyimpan kata sandi database MySQL Anda membuat penggunaan “-p[mysql_password]” dalam perintah dump yang disebutkan tidak diperlukan. Jika perintah dump ini dijalankan melalui pekerjaan cron, opsi perintah “–defaults-extra-file=/path/to/.my.cnf” harus mengarahkan perintah mysqldump ke lokasi kata sandi database.

Beberapa contoh backup database MySQL

Mari kita pertimbangkan beberapa skenario pengguna di mana kita dapat menggunakan perintah mysqldump untuk membuat cadangan data database MySQL.

Mencadangkan semua database

Menggunakan opsi perintah “–all-databases” di perintah mysqldump Anda akan menangani semua dump database MySQL di sistem Linux Anda. Misalnya, perintah berikut menunjukkan cara membuang semua database MySQL Anda ke file “/var/www_my_backups/” yang sudah ada. Pengguna sistem Linux ini harus root atau memiliki hak sudo.

Dalam kasus kami, dan untuk pemahaman Anda, kami menamai file dump kami "all-databases.sql," tetapi Anda dapat menggunakan nama lain dari preferensi Anda. Karena kita berurusan dengan semua database, menjadi pengguna akun MySQL root diperlukan.

$ mysqldump -u root -p[mysql_password] --all-databases > /var/www_my_backups/all-databases.sql

Mencadangkan satu basis data

Jika hanya satu database MySQL yang penting bagi Anda, membuat cadangannya dengan perintah mysqldump memerlukan penggantian opsi perintah “[mysql_database]” dengan nama sebenarnya. Nama file dump bisa mengambil nama database ini “[mysql_database].sql” sehingga menjadi mudah untuk dilacak dan di restore nantinya. Anda juga dapat menggunakan nama file dump khusus lainnya jika diinginkan.

Perintah contoh ini diimplementasikan menggunakan pengguna root, tetapi pengguna lain mana pun yang memiliki akses ke database yang ditargetkan adalah opsi yang layak.

$ mysqldump -u root -p[mysql_password] [mysql_database_name] > /var/www_my_backups/[mysql_database_name].sql

Mencadangkan beberapa basis data

Mungkin Anda memiliki pilihan database MySQL tertentu yang ingin Anda backup. Dalam hal ini, opsi perintah "[mysql_database_name]" akan muncul lebih dari sekali, dan setiap kasus dikaitkan dengan nama database yang ingin Anda backup. Ingatlah untuk memberi spasi pada nama database ini pada perintah mysqldump. File dump “[mysql_database_name].sql” juga harus dikaitkan dengan nama unik yang akan Anda ingat.

$ mysqldump -u root -p[mysql_password] [mysql_database_1_name] [mysql_database_2_name] > /var/www_my_backups/[mysql_databases_1_2_names].sql

Mencadangkan satu tabel

Ketika rutinitas pencadangan Anda hanya setelah tabel database tertentu, membuat cadangannya harus memiliki nama database dan nama tabel database sebagai opsi perintah dari perintah mysqldump. Anda dapat memberi file dump Anda nama yang sama dengan tabel database yang ditargetkan, mis. [mysql_database_table_name].sql.

$ mysqldump -u root -p[mysql_password] [mysql_database_name] [mysql_database_table_name] > /var/www_my_backups/[mysql_databases_table_name].sql

Mencadangkan beberapa tabel

Saat Anda ingin mencadangkan banyak tabel database MySQL tertentu, penyebutan semua nama tabel database yang Anda pilih harus muncul setelah nama database yang menampung tabel-tabel ini. File dump yang ditargetkan dapat mengambil nama seperti [mysql_database_tables_1_2_names].sql

$ mysqldump -u root -p[mysql_password] [mysql_database_name] [mysql_database_table_1_name] [mysql_database_table_2_name] > /var/www_my_backups/[mysql_databases_tables_1_2_names].sql

Mencadangkan basis data jarak jauh

Contoh implementasi ini juga mudah. Perintah dump database MySQL perlu menyertakan opsi perintah “-h” diikuti dengan nama host mesin jarak jauh atau alamat IP terkait. Semua sintaks perintah backup database biasa lainnya harus mengikuti.

$ mysqldump -h [remote_computer_ip_or_hostname] -u root -p[mysql_password] [mysql_database_name] > /var/www_my_backups/[remote_mysql_database_name].sql

Anda dapat menyesuaikan perintah mysqldump ini untuk menangani kasus pencadangan basis data lain yang telah dibahas, misalnya, pencadangan MySQL dengan banyak basis data atau tabel.

Mencadangkan database yang terkait dengan kompresi

Jika Anda ingin mengaitkan cadangan data Anda dengan kompresi, tombol “| gzip -c>” opsi perintah mysqldump dapat digunakan untuk menyalurkan output gzip.

$ mysqldump -u root -p[mysql_password] [mysql_database_name] | gzip -c > /var/www_my_backups/[mysql_database_name].sql.gz

Jika database MySQL Anda sangat besar dan Anda ingin melacak kemajuan kompresi, selalu pertimbangkan untuk menerapkan opsi verbose seperti yang digambarkan dalam contoh berikut.

$ mysqldump -u root -p[mysql_password] [mysql_database_name] | gzip -c --verbose > /var/www_my_backups/[mysql_database_name].sql.gz

Memulihkan database MySQL

Setelah Anda selesai dengan cadangan database MySQL Anda, apa selanjutnya? Bagaimana Anda mengakses data yang Anda amankan dengan sangat hati-hati? Memulihkan data Anda memerlukan kepatuhan terhadap sintaks pemulihan MySQL berikut.

$ mysql -u [mysql_username] -p[mysql_password] [mysql_database_name] < /path/to/[mysql_database_name].sql 

Seperti yang mungkin belum Anda catat, satu-satunya perbedaan antara perintah pemulihan basis data ini dan perintah pencadangan basis data adalah bahwa kami menggunakan opsi "mysql" alih-alih opsi "mysqldump" dan opsi "<" alih-alih opsi ">".

Mengotomatiskan pencadangan MySQL

Sistem operasi Linux dilengkapi dengan beberapa layanan berguna yang tak ternilai harganya bagi administrator database seperti yang ada di bawah RDBMS MySQL. Salah satu layanan tersebut adalah layanan cron. Ini efektif dalam menjadwalkan perintah otomatis. Perintah-perintah ini, setelah dibuat, dialokasikan ke tabel cron crontab. Anda dapat mengakses crontab melalui perintah berikut.

$ sudo crontab -e

Jika diminta, perintah ini mungkin ingin mengaitkan eksekusinya ke editor teks untuk memilih editor teks nano.

File dengan nama seperti "/tmp/crontab.LVY6A9/crontab" akan terbuka. Di bagian bawah file crontab ini, masukkan jadwal cron yang layak bersama dengan perintah dump MySQL yang berlaku. Contoh yang diilustrasikan di bawah ini mengimplementasikan penggunaan kompresi gzip untuk backup database harian. Terkadang Anda mungkin memiliki file .sql besar yang dijadwalkan untuk dicadangkan. Menggunakan gzip mengurangi file tersebut ke ukuran yang wajar sebelum penyimpanan cadangan. Ini membantu dengan manajemen memori cadangan.

00 03 * * * mysqldump -u root -p[mysql_password] [mysql_database_name] | gzip -c > /var/www_my_backups/[mysql_database_name].sql.gz

Opsi perintah “00 03 ***” dapat diartikan sebagai berikut. Setiap 24 jam setelah jam 3 pagi, perintah mysqldump yang mengikutinya dijalankan untuk membuat cadangan database. File cadangan database yang saat ini ada sebelum dimulainya proses pencadangan ini akan ditimpa. Dalam kasus Anda, Anda tidak perlu menunggu setelah 24 jam untuk menyaksikan otomatisasi pencadangan basis data Anda beraksi melalui crontab.

Anda dapat mengedit opsi "00 03 ***" pada file crontab menjadi sesuatu seperti "02 00 ***", dan hanya dalam dua menit, proses pencadangan akan menginisialisasi sendiri. Atau, jika waktu Anda adalah 22:30, mengedit file dengan "34 22 ***" akan menginisialisasi proses backup database pada 22:34. Ingatlah untuk menyimpan (Ctrl+X) file crontab ini sebelum menutupnya agar perintah ini dapat dieksekusi.

Setelah menit yang Anda atur berlalu, tugas cron seharusnya sudah dijalankan. Kemudian, daftar folder cadangan yang dibuat di terminal Anda, dan file cadangan .sql.gz yang dibuat harus ada.

$ ls -l /var/www_my_backups/

Output yang dihasilkan harus serupa dengan berikut ini:

-rw-r--r-- 1 root root 36M Jul 29 22:24 [mysql_database_name].sql.gz

Jika Anda memiliki masalah dalam menemukan file cadangan MySQL .sql.gz, periksa waktu crontab Anda atau seluruh perintah. Mungkin ada kesalahan sintaks, atau ada sesuatu yang hilang. Atau, log cron sistem dapat menunjukkan di mana ada masalah.

$ sudo grep CRON /var/log/syslog 

Ingatlah untuk mengatur ulang entri crontab ke jadwal basis data pilihan Anda setelah Anda mengonfirmasi semuanya berfungsi dengan benar.

Menggunakan my.cnf untuk menyimpan sandi database MySQL  

Kami telah menyebutkan kelemahan opsi "-p[mysql_password]" pada perintah mysqldump, terutama di bawah jaringan bersama. Kita perlu membahas bagaimana menerapkan penyimpanan kata sandi di file “~/.my.cnf”. Pengguna yang menggunakan cron untuk mengotomatiskan pencadangan basis data mereka perlu memahami implementasi opsi perintah “–defaults-extra-file=/path/to/.my.cnf”.

Mengedit file my.cnf

Direktori home sistem Linux Anda berisi file tersembunyi ini. Jalur sistem langsung ke sana adalah "/home/your_username/.my.cnf". Gunakan editor teks nano untuk membuka file ini. Opsi “~” menunjuk ke direktori home.

$ sudo nano ~/.my.cnf

Edit file yang terbuka ini sesuai dengan sintaks berikut untuk berhasil menyimpan kata sandi database MySQL Anda. Bagian "YOUR_DB_PASS" adalah satu-satunya entri yang perlu Anda ubah dengan kata sandi basis data Anda yang sebenarnya. Masukkan detail informasi ini di bagian bawah file dan simpan.

[mysqldump] 
password=YOUR_DB_PASS

Gunakan Ctrl+X untuk menyimpan file ini. File "my.cnf" ini juga memerlukan beberapa pengaturan izin. Terapkan perintah berikut:

$ sudo chmod 600 ~/.my.cnf

Sekarang saatnya untuk melihat pembuatan ulang perintah mysqldump baru kami dengan opsi perintah “-p[mysql_password]” dihilangkan.

$ mysqldump -u root [mysql_database_name] | gzip -c > /var/www_my_backups/[mysql_database_name].sql.gz 

Seperti yang Anda lihat, kami tidak menambahkan apa pun. Sepertinya satu-satunya yang kami hapus adalah opsi perintah "-p[mysql_password]".

Crontab dan –defaults-extrs-file

Untuk pengguna yang lebih suka mengotomatiskan pencadangan basis data, Anda perlu mengambil kata sandi basis data di file “~/.my.cnf” melalui opsi perintah “–defaults-extra-file”. Pendekatan ini memudahkan perintah mysqldump ketika perlu mereferensikan pengguna database dan keaslian kata sandi. Anda harus spesifik tentang jalur ke file my.cnf dan tidak hanya menggunakan simbol “~”. Pertimbangkan implementasi berikut di dalam file crontab:

30 22 * * *   mysqldump --defaults-extra-file=/home/system_username/.my.cnf -u root [mysql_database_name] | gzip -c > /var/www_my_backups/[mysql_database_name].sql.gz 

Dalam contoh ini, crontab dijalankan setiap hari pada jam 22:30 untuk membuat kompresi gzip yang dicadangkan dari database MySQL.

Catatan akhir

Artikel ini membahas mekanisme pencadangan basis data lokal tentang direktori pencadangan “/ var/www_my_backups”. Karena Anda sekarang memahami bagaimana proses pencadangan berlangsung, Anda harus menskalakan lebih tinggi dan mulai memikirkan pencadangan di luar kantor. Namun, pendekatan yang lebih praktis adalah melalui konfigurasi akses SFTP yang mengarah ke direktori cadangan “/var/www_my_backups” ini.

Dengan konfigurasi seperti itu, dimungkinkan untuk membuat pekerjaan cron SFTP melalui server jauh untuk mengambil salinan file database yang disimpan secara lokal ini untuk penyimpanan asuransi di malam hari dan setiap hari.

Saat kami menyimpulkan panduan artikel yang luar biasa ini, Anda sekarang menjadi master yang bangga dengan skenario pencadangan basis data MySQL, pemulihan cadangan basis data, dan otomatisasi pencadangan basis data. Anda sekarang harus percaya diri dan percaya diri dalam menggunakan pekerjaan cron untuk menjadwalkan dan menangani otomatisasi pencadangan database MySQL Anda. Jadwal otomatisasi tidak harus harian karena bisa juga mingguan dan bulanan.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menyimpan Tanggal Java ke Mysql datetime dengan JPA

  2. Kesalahan MySQL 1436:Tumpukan utas diserbu, dengan kueri sederhana

  3. Bagaimana cara mengubah jumlah minggu menjadi tanggal?

  4. Bagaimana cara mengganti ekspresi reguler di MySQL?

  5. Percona Live Dublin - Rekap Acara &Sesi Kami