Migrasi dari database Oracle ke open source dapat membawa sejumlah manfaat. Biaya kepemilikan yang lebih rendah menggoda, dan mendorong banyak perusahaan untuk bermigrasi. Pada saat yang sama DevOps, SysOps, atau DBA perlu menjaga ketat SLA untuk memenuhi kebutuhan bisnis.
Salah satu perhatian utama ketika Anda merencanakan migrasi data ke database lain, terutama open source adalah bagaimana menghindari kehilangan data. Tidaklah terlalu jauh bahwa seseorang secara tidak sengaja menghapus bagian dari database, seseorang lupa memasukkan klausa WHERE dalam kueri DELETE atau menjalankan DROP TABLE secara tidak sengaja. Pertanyaannya adalah bagaimana pulih dari situasi seperti itu.
Hal-hal seperti itu mungkin dan akan terjadi, tidak dapat dihindari tetapi dampaknya bisa menjadi bencana. Seperti yang dikatakan seseorang, "Semuanya menyenangkan dan permainan sampai pencadangan gagal". Aset yang paling berharga tidak dapat dikompromikan. Titik.
Ketakutan akan hal yang tidak diketahui adalah wajar jika Anda tidak terbiasa dengan teknologi baru. Faktanya, pengetahuan tentang solusi database Oracle, keandalan, dan fitur hebat yang ditawarkan Oracle Recovery Manager (RMAN) dapat membuat Anda atau tim Anda enggan untuk bermigrasi ke sistem database baru. Kami suka menggunakan hal-hal yang kami ketahui, jadi mengapa bermigrasi ketika solusi kami saat ini berfungsi. Siapa yang tahu berapa banyak proyek yang ditunda karena tim atau individu tidak yakin dengan teknologi baru?
Cadangan Logis (exp/imp, expdp/impdb)
Menurut dokumentasi MySQL, pencadangan logis adalah "cadangan yang mereproduksi struktur tabel dan data, tanpa menyalin file data yang sebenarnya." Definisi ini dapat berlaku untuk dunia MySQL dan Oracle. Hal yang sama adalah "mengapa" dan "kapan" Anda akan menggunakan cadangan logis.
Pencadangan logis adalah pilihan yang baik ketika kami mengetahui data apa yang akan dimodifikasi sehingga Anda hanya dapat mencadangkan bagian yang Anda butuhkan. Ini menyederhanakan pemulihan potensial dalam hal waktu dan kompleksitas. Ini juga sangat berguna jika kita perlu memindahkan beberapa bagian dari kumpulan data berukuran kecil/menengah dan menyalin kembali ke sistem lain (seringkali pada versi database yang berbeda). Oracle menggunakan utilitas ekspor seperti exp dan expdp untuk membaca data database dan kemudian mengekspornya ke file di tingkat sistem operasi. Anda kemudian dapat mengimpor data kembali ke database menggunakan utilitas impor imp atau impdp.
Utilitas Ekspor Oracle memberi kita banyak pilihan untuk memilih data apa yang perlu diekspor. Anda pasti tidak akan menemukan jumlah fitur yang sama dengan mysql, tetapi sebagian besar kebutuhan tercakup dan sisanya dapat dilakukan dengan skrip tambahan atau alat eksternal (periksa mydumper).
MySQL hadir dengan paket alat yang menawarkan fungsionalitas yang sangat mendasar. Mereka adalah mysqldump, mysqlpump (versi modern dari mysqldump yang memiliki dukungan asli untuk paralelisasi) dan klien MySQL yang dapat digunakan untuk mengekstrak data ke file datar.
Di bawah ini Anda dapat menemukan beberapa contoh cara menggunakannya:
Cadangkan struktur basis data saja
mysqldump --no-data -h localhost -u root -ppassword mydatabase > mydatabase_backup.sql
Struktur tabel cadangan
mysqldump --no-data --single- transaction -h localhost -u root -ppassword mydatabase table1 table2 > mydatabase_backup.sql
Cadangkan baris tertentu
mysqldump -h localhost --single- transaction -u root -ppassword mydatabase table_name --where="date_created='2019-05-07'" > table_with_specific_rows_dump.sql
Mengimpor Tabel
mysql -u username -p -D dbname < tableName.sql
Perintah di atas akan menghentikan pemuatan jika terjadi kesalahan.
Jika Anda memuat data langsung dari klien mysql, kesalahan akan diabaikan dan klien akan melanjutkan
mysql> source tableName.sql
Untuk mencatat keluaran, Anda perlu menggunakan
mysql> tee import_tableName.log
Anda dapat menemukan semua bendera yang dijelaskan di bawah tautan di bawah ini:
- https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html
- https://dev.mysql.com/doc/refman/8.0/en/mysqlimport.html
- https://dev.mysql.com/doc/refman/8.0/en/mysql.html
Jika Anda berencana menggunakan pencadangan logis di berbagai versi basis data, pastikan Anda memiliki penyiapan susunan yang tepat. Pernyataan berikut dapat digunakan untuk memeriksa set karakter default dan susunan untuk database yang diberikan:
USE mydatabase;
SELECT @@character_set_database, @@collation_database;
Cara lain untuk mengambil variabel sistem collation_database adalah dengan menggunakan SHOW VARIABLES.
SHOW VARIABLES LIKE 'collation%';
Karena keterbatasan dump mysql, kita sering harus memodifikasi output. Contoh modifikasi tersebut dapat berupa kebutuhan untuk menghapus beberapa baris. Untungnya, kami memiliki fleksibilitas untuk melihat dan memodifikasi output menggunakan alat teks standar sebelum memulihkan. Alat seperti awk, grep, sed bisa menjadi teman Anda. Di bawah ini adalah contoh sederhana tentang cara menghapus baris ketiga dari file dump.
sed -i '1,3d' file.txt
Kemungkinannya tidak terbatas. Ini adalah sesuatu yang tidak akan kami temukan dengan Oracle karena data ditulis dalam format biner.
Ada beberapa hal yang perlu Anda pertimbangkan ketika Anda menjalankan logis mysql. Salah satu batasan utama adalah dukungan murni paralelisme dan penguncian objek.
Pertimbangan pencadangan yang logis
Saat pencadangan tersebut dijalankan, langkah-langkah berikut akan dilakukan.
- KUNCI tabel TABEL.
- TAMPILKAN BUAT tabel TABEL.
- PILIH * FROM tabel INTO OUTFILE file sementara.
- Tuliskan konten file sementara hingga akhir file dump.
- BUKA TABEL
Secara default mysqldump tidak menyertakan rutinitas dan acara dalam outputnya - Anda harus secara eksplisit mengatur flag --routines dan --events.
Pertimbangan penting lainnya adalah mesin yang Anda gunakan untuk menyimpan data Anda. Mudah-mudahan hari ini sebagian besar sistem produksi menggunakan mesin yang sesuai dengan ACID yang disebut InnoDB. Mesin lama MyISAM harus mengunci semua tabel untuk memastikan konsistensi. Ini adalah saat FLUSH TABLES WITH READ LOCK dieksekusi. Sayangnya, ini adalah satu-satunya cara untuk menjamin snapshot tabel MyISAM yang konsisten saat server MySQL sedang berjalan. Ini akan membuat server MySQL menjadi read-only sampai UNLOCK TABLES dieksekusi.
Untuk tabel di mesin penyimpanan InnoDB, disarankan untuk menggunakan opsi --single-transaksi. MySQL kemudian menghasilkan pos pemeriksaan yang memungkinkan dump untuk menangkap semua data sebelum pos pemeriksaan saat menerima perubahan yang masuk.
Opsi --single-transaction dari mysqldump tidak melakukan FLUSH TABLES WITH READ LOCK. Ini menyebabkan mysqldump menyiapkan transaksi READ REPEATABLE untuk semua tabel yang dibuang.
Cadangan mysqldump jauh lebih lambat daripada alat Oracle exp, expdp. Mysqldump adalah alat berulir tunggal dan ini adalah kelemahannya yang paling signifikan - kinerjanya ok untuk database kecil tetapi dengan cepat menjadi tidak dapat diterima jika kumpulan data bertambah hingga puluhan gigabyte.
- MULAI TRANSAKSI DENGAN GAMBAR KONSISTEN.
- Untuk setiap skema dan tabel database, dump melakukan langkah-langkah berikut:
- TAMPILKAN BUAT tabel TABEL.
- PILIH * FROM tabel INTO OUTFILE file sementara.
- Tuliskan konten file sementara hingga akhir file dump.
- KOMITMEN.
Cadangan fisik (RMAN)
Untungnya, sebagian besar keterbatasan pencadangan logis dapat diatasi dengan alat Percona Xtrabackup. Percona XtraBackup adalah perangkat lunak pencadangan panas MySQL/MariaDB sumber terbuka paling populer yang melakukan pencadangan tanpa pemblokiran untuk basis data InnoDB dan XtraDB. Itu termasuk dalam kategori cadangan fisik, yang terdiri dari salinan persis direktori data MySQL dan file di bawahnya.
Ini adalah kategori alat yang sama seperti Oracle RMAN. RMAN hadir sebagai bagian dari perangkat lunak basis data, XtraBackup perlu diunduh secara terpisah. Xtrabackup tersedia sebagai paket rpm dan deb dan hanya mendukung platform Linux. Instalasi sangat sederhana:
$ wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-8.0.4/binary/redhat/7/x86_64/percona-XtraBackup-80-8.0.4-1.el7.x86_64.rpm
$ yum localinstall percona-XtraBackup-80-8.0.4-1.el7.x86_64.rpm
XtraBackup tidak mengunci database Anda selama proses pencadangan. Untuk database besar (100+ GB), ini memberikan waktu pemulihan yang jauh lebih baik dibandingkan dengan mysqldump. Proses pemulihan melibatkan penyiapan data MySQL dari file cadangan, sebelum mengganti atau mengalihkannya dengan direktori data saat ini pada node target.
Percona XtraBackup bekerja dengan mengingat nomor urutan log (LSN) saat dimulai dan kemudian menyalin file data ke lokasi lain. Menyalin data membutuhkan waktu, dan jika file berubah, mereka mencerminkan keadaan database pada titik waktu yang berbeda. Pada saat yang sama, XtraBackup menjalankan proses latar belakang yang mengawasi file log transaksi (alias redo log), dan menyalin perubahan darinya. Ini harus dilakukan terus-menerus karena log transaksi ditulis secara round-robin, dan dapat digunakan kembali setelah beberapa saat. XtraBackup memerlukan catatan log transaksi untuk setiap perubahan pada file data sejak dimulainya eksekusi.
Saat XtraBackup diinstal, Anda akhirnya dapat melakukan pencadangan fisik pertama Anda.
xtrabackup --user=root --password=PASSWORD --backup --target-dir=/u01/backups/
Opsi berguna lainnya yang dilakukan administrator MySQL adalah streaming cadangan ke server lain. Streaming tersebut dapat dilakukan dengan menggunakan alat xbstream, seperti pada contoh di bawah ini:
Mulai pendengar di server eksternal pada port yang lebih disukai (dalam contoh ini 1984)
nc -l 1984 | pigz -cd - | pv | xbstream -x -C /u01/backups
Jalankan pencadangan dan transfer ke host eksternal
innobackupex --user=root --password=PASSWORD --stream=xbstream /var/tmp | pigz | pv | nc external_host.com 1984
Seperti yang mungkin Anda perhatikan, proses pemulihan dibagi menjadi dua langkah utama (mirip dengan Oracle). Langkah-langkah dipulihkan (salin kembali) dan pemulihan (terapkan log).
XtraBackup --copy-back --target-dir=/var/lib/data
innobackupex --apply-log --use-memory=[values in MB or GB] /var/lib/data
Bedanya kita hanya bisa melakukan recovery sampai pada saat backup diambil. Untuk menerapkan perubahan setelah pencadangan, kita perlu melakukannya secara manual.
Pemulihan Titik dalam Waktu (pemulihan RMAN)
Di Oracle, RMAN melakukan semua langkah ketika kami melakukan pemulihan database. Ini dapat dilakukan baik ke SCN atau waktu atau berdasarkan kumpulan data cadangan.
RMAN> run
{
allocate channel dev1 type disk;
set until time "to_date('2019-05-07:00:00:00', 'yyyy-mm-dd:hh24:mi:ss')";
restore database;
recover database; }
Di mysql, kita membutuhkan alat lain untuk melakukan untuk mengekstrak data dari log biner (mirip dengan archivelog Oracle) mysqlbinlog. mysqlbinlog dapat membaca log biner dan mengubahnya menjadi file. Yang perlu kita lakukan adalah
Prosedur dasarnya adalah
- Pulihkan cadangan lengkap
- Pulihkan cadangan tambahan
- Untuk mengidentifikasi waktu mulai dan berakhirnya pemulihan (yang bisa jadi merupakan akhir pencadangan dan nomor posisi sebelum tabel drop sayangnya).
- Konversi binglog yang diperlukan ke SQL dan terapkan file SQL yang baru dibuat dalam urutan yang benar - pastikan untuk menjalankan satu perintah mysqlbinlog.
> mysqlbinlog binlog.000001 binlog.000002 | mysql -u root -p
Enkripsi Cadangan (Dompet Oracle)
Percona XtraBackup dapat digunakan untuk mengenkripsi atau mendekripsi cadangan lokal atau streaming dengan opsi xbstream untuk menambahkan lapisan perlindungan lain ke cadangan. Opsi --encrypt-key dan --encryptkey-file keduanya dapat digunakan untuk menentukan kunci enkripsi. Kunci enkripsi dapat dibuat dengan perintah seperti
$ openssl rand -base64 24
$ bWuYY6FxIPp3Vg5EDWAxoXlmEFqxUqz1
Nilai ini kemudian dapat digunakan sebagai kunci enkripsi. Contoh perintah innobackupex menggunakan --encrypt-key:
$ innobackupex --encrypt=AES256 --encrypt-key=”bWuYY6FxIPp3Vg5EDWAxoXlmEFqxUqz1” /storage/backups/encrypted
Untuk mendekripsi, cukup gunakan opsi --decrypt dengan --encrypt-key:
$ innobackupex --decrypt=AES256 --encrypt-key=”bWuYY6FxIPp3Vg5EDWAxoXlmEFqxUqz1”
/storage/backups/encrypted/2019-05-08_11-10-09/
Kebijakan pencadangan
Tidak ada fungsionalitas kebijakan cadangan bawaan baik di MySQL/MariaDB atau bahkan alat Percona. Jika Anda ingin mengelola cadangan logis atau fisik MySQL, Anda dapat menggunakan ClusterControl untuk itu.
ClusterControl adalah sistem manajemen database open source all-inclusive untuk pengguna dengan lingkungan campuran. Ini menyediakan fungsionalitas manajemen pencadangan tingkat lanjut untuk MySQL atau MariaDB.
Dengan ClusterControl Anda dapat:
- Buat kebijakan cadangan
- Pantau status pencadangan, eksekusi, dan server tanpa pencadangan
- Jalankan pencadangan dan pemulihan (termasuk pemulihan waktu tertentu)
- Kontrol retensi cadangan
- Simpan cadangan di penyimpanan awan
- Validasi cadangan (pengujian penuh dengan pemulihan di server mandiri)
- Enkripsi cadangan
- Kompres cadangan
- Dan masih banyak lagi
Simpan cadangan di awan
Organisasi secara historis menggunakan solusi backup tape sebagai sarana untuk melindungi
data dari kegagalan. Namun, munculnya komputasi awan publik juga memungkinkan model baru dengan TCO lebih rendah daripada yang tersedia secara tradisional. Tidak masuk akal untuk mengabstraksi biaya solusi DR dari desainnya, sehingga organisasi harus menerapkan tingkat perlindungan yang tepat dengan biaya serendah mungkin.
Cloud telah mengubah industri pencadangan data. Karena titik harganya yang terjangkau, bisnis kecil memiliki solusi di luar lokasi yang mencadangkan semua data mereka (dan ya, pastikan itu dienkripsi). Baik Oracle dan MySQL tidak menawarkan solusi penyimpanan cloud bawaan. Sebagai gantinya, Anda dapat menggunakan alat yang disediakan oleh vendor Cloud. Contohnya di sini bisa jadi s3.
aws s3 cp severalnines.sql s3://severalnine-sbucket/mysql_backups
Kesimpulan
Ada beberapa cara untuk membuat cadangan basis data Anda, tetapi penting untuk meninjau kebutuhan bisnis sebelum memutuskan strategi pencadangan. Seperti yang Anda lihat, ada banyak kesamaan antara cadangan MySQL dan Oracle yang diharapkan dapat memenuhi SLA Anda.
Selalu pastikan bahwa Anda mempraktikkan perintah-perintah ini. Tidak hanya ketika Anda baru mengenal teknologi tetapi setiap kali DBMS menjadi tidak dapat digunakan sehingga Anda tahu apa yang harus dilakukan.
Jika Anda ingin mempelajari lebih lanjut tentang MySQL, silakan lihat whitepaper kami Panduan DevOps untuk Pencadangan Basis Data untuk MySQL dan MariaDB.