Ada berbagai alasan untuk memutakhirkan basis data Anda. Bisa untuk menerapkan perbaikan keamanan, menggunakan fitur baru, memecahkan masalah kompatibilitas, atau hanya untuk menjaga sistem Anda tetap mutakhir. Pemutakhiran ini dapat berupa pemutakhiran besar atau pemutakhiran kecil, dan tergantung pada teknologinya, ada berbagai pendekatan untuk melakukan pekerjaan ini, tetapi jika Anda memerlukan sistem Anda berjalan sepanjang waktu tanpa waktu henti, melakukan pemutakhiran bergulir bisa menjadi pilihan terbaik .
Di blog ini, kita akan melihat beberapa pertimbangan yang harus dipertimbangkan sebelum memutakhirkan dan bagaimana melakukan pemutakhiran bergulir di MySQL.
Upgrade Kecil vs Besar
Secara umum, peningkatan kecil aman karena Anda dapat dengan mudah menurunkan atau mengembalikannya dan harus kompatibel dengan paket dan fitur sebelumnya.
Upgrade versi utama melibatkan beberapa risiko seperti penghapusan paket database, konfigurasi dan kompatibilitas konektor, fitur yang tidak digunakan lagi, dan banyak lagi.
Jadi, meskipun pengujian penting untuk kedua skenario, dalam kasus peningkatan besar, itu adalah suatu keharusan jika Anda ingin menghindari masalah serius untuk bisnis Anda.
Sebelum Meningkatkan
Sekarang, mari kita lihat beberapa pertimbangan sebelum meningkatkan versi, untuk menghindari masalah di masa mendatang.
Cadangan
Backup selalu penting, dan terlebih lagi jika Anda ingin mengupgrade database Anda. Jika terjadi kesalahan, dan opsi pemulihan bencana lainnya gagal, Anda memerlukan cadangan untuk memulihkan basis data Anda. Jadi, sebelum memulai tugas, ambil cadangan penuh (fisik atau/dan logis) dari database Anda saat ini dan simpan dengan aman hingga memastikan semuanya berfungsi dengan baik selama beberapa hari/minggu.
Tinjau Fitur yang Tidak Digunakan Lagi
Jika Anda menggunakan fitur yang tidak digunakan lagi di versi baru, aplikasi Anda bisa gagal, dan Anda perlu melakukan rollback untuk memulihkan sistem Anda, yang akan menghasilkan waktu henti (tergantung pada pendekatannya) dan kehilangan waktu. Memeriksa fitur yang tidak digunakan lagi dan membandingkannya dengan fitur yang Anda gunakan akan menghindari upaya peningkatan yang gagal ini.
Pengujian
Ini penting tidak hanya untuk peningkatan tetapi juga untuk setiap perubahan dalam database atau aplikasi Anda. Memiliki lingkungan pengujian yang mereplikasi lingkungan produksi dapat menghemat waktu Anda dan menghindari masalah yang tidak terduga selama peningkatan versi atau perubahan basis data.
Kembalikan
Dalam setiap pemutakhiran, penting untuk memiliki rollback yang siap digunakan jika diperlukan agar database Anda aktif dan berjalan secepatnya. Jika tidak, ini dapat memengaruhi RTO (Tujuan Waktu Pemulihan) jika Anda perlu membuat ulang kluster dari cadangan atau opsi paket pemulihan lainnya.
Perlu diingat bahwa terkadang downgrade tidak dapat dilakukan, jadi Anda harus memiliki paket sekunder jika Anda perlu mengembalikan perubahan Anda.
Pemeriksaan Vendor
Tergantung pada vendor dan versinya, Anda dapat menggunakan perintah mysqlcheck untuk melakukan pemeriksaan awal pada penginstalan Anda saat ini dan mengonfirmasi bahwa Anda siap untuk pergi.
$ mysqlcheck -u root -p --all-databases --check-upgrade
Enter password:
mysql.columns_priv OK
mysql.db OK
mysql.engine_cost OK
mysql.event OK
mysql.func OK
mysql.general_log OK
mysql.gtid_executed OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.innodb_index_stats OK
mysql.innodb_table_stats OK
mysql.ndb_binlog_index OK
mysql.plugin OK
mysql.proc OK
mysql.procs_priv OK
mysql.proxies_priv OK
mysql.server_cost OK
mysql.servers OK
mysql.slave_master_info OK
mysql.slave_relay_log_info OK
mysql.slave_worker_info OK
mysql.slow_log OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
sys.sys_config OK
Ini adalah pemeriksaan pertama yang dilakukan sebelum memutakhirkan, dan akan memeriksa apakah tidak ada:
- Tabel yang menggunakan tipe atau fungsi data usang
- File dari anak yatim
- Pemicu dengan definisi yang hilang atau kosong atau konteks pembuatan yang tidak valid
Ada beberapa hal lagi yang perlu Anda periksa tetapi untuk menghindari posting blog yang ekstensif, Anda dapat merujuk ke dokumentasi resmi MySQL untuk ini.
Upgrade Rolling Manual untuk MySQL
Ada berbagai pendekatan untuk melakukan peningkatan versi bergulir. Itu bisa di tempat, menggunakan replikasi, atau bahkan campurannya. Bagaimanapun, jika Anda ingin menghindari waktu henti, Anda tidak boleh melakukan perubahan pada aplikasi Anda selama pemutakhiran. Untuk ini, Anda dapat menambahkan Load Balancer di depan database Anda. Aplikasi Anda akan terhubung ke Load Balancer Anda, dan itu akan mengarahkan lalu lintas ke node yang tersedia.
Misalnya Anda memiliki Replikasi MySQL dengan 1 master dan 2 node slave, dan 1 node HAProxy di depannya:
Cara yang disederhanakan untuk melakukan peningkatan pengguliran manual pada lingkungan ini dapat berupa:
- Nonaktifkan satu node budak dari HAProxy Anda
- Pastikan Anda tidak memiliki traffic di node slave ini
- Upgrade node slave secara manual
- Periksa status replikasi untuk memastikan yang terbaru
- Nonaktifkan node master di HAProxy Anda
- Pastikan Anda tidak memiliki lalu lintas di node master Anda
- Promosikan node budak yang ditingkatkan
- Aktifkan di HAProxy Anda
- Konfirmasi bahwa master baru menerima lalu lintas
- Konfigurasi ulang slave kedua Anda untuk direplikasi dari master baru
- Nonaktifkan budak kedua dari HAProxy Anda
- Pastikan Anda tidak memiliki traffic di node slave ini
- Upgrade node slave secara manual
- Periksa status replikasi untuk memastikan yang terbaru
- Aktifkan di HAProxy Anda
- Konfirmasi bahwa node slave menerima lalu lintas (jika diperlukan)
- Konfigurasi ulang master lama Anda untuk direplikasi dari master baru
- Tingkatkan node master lama secara manual
- Periksa status replikasi untuk memastikan yang terbaru
- Aktifkan di HAProxy Anda
- Konfirmasi bahwa master lama (sekarang slave) menerima lalu lintas (jika diperlukan)
Seperti yang Anda lihat, bahkan dengan cara yang disederhanakan, tugas ini memerlukan banyak langkah, dan ini berarti lebih banyak kemungkinan terjadi kesalahan.
Upgrade Bergulir ClusterControl untuk MySQL
Cara terbaik untuk mengurangi kemungkinan kegagalan adalah dengan mengotomatiskan semua (atau hampir semua) langkah ini. Dengan menggunakan ClusterControl, Anda dapat melakukan peningkatan kecil pada cluster MySQL Anda hanya dengan beberapa klik.
Untuk melakukannya, buka ClusterControl -> Pilih Cluster -> Manage -> Upgrades, di mana Anda melihat opsi Upgrade.
Upgrade sedang online dan dilakukan pada satu node pada satu waktu. Node akan dihentikan, perangkat lunak akan diperbarui, dan kemudian node akan dimulai lagi. Jika sebuah node gagal untuk diupgrade, proses akan dibatalkan.
Jika Anda memilih opsi Upgrade, Anda akan melihat konfirmasi tentang versi yang akan ditingkatkan:
Dan Anda hanya perlu menekan Tingkatkan untuk mengonfirmasi pekerjaan ini. Setelah ini, Anda dapat memantau proses peningkatan di Bagian Aktivitas ClusterControl:
Pada saat yang sama, ClusterControl akan mengonfigurasi ulang Load Balancer Anda untuk mengirim lalu lintas ke node yang tersedia.
ClusterControl hanya mendukung peningkatan kecil, karena, seperti yang kami sebutkan sebelumnya, peningkatan besar adalah tugas berisiko yang memerlukan pengujian dan penelitian untuk memastikan bahwa aplikasi Anda akan berfungsi dengan baik pada versi utama yang baru.
Kesimpulan
Upgrade adalah tugas penting di semua perusahaan dan bisa berisiko jika Anda tidak mengambil tindakan pencegahan tertentu dan mengikuti semua langkah upgrade dengan benar.
Di blog ini, kami menyebutkan beberapa pertimbangan untuk dipertimbangkan sebelum memutakhirkan basis data Anda, dan kami menunjukkan perbedaan antara melakukan tugas ini secara manual dan menggunakan ClusterControl, yang membantu Anda meminimalkan kemungkinan kegagalan.