, database sumber terbuka yang dikembangkan oleh Oracle, mendukung beberapa beban kerja terpenting Facebook. Kami secara aktif mengembangkan fitur baru di MySQL untuk mendukung kebutuhan kami yang terus berkembang. Fitur-fitur ini mengubah berbagai area MySQL, termasuk konektor klien, mesin penyimpanan, pengoptimal, dan replikasi. Setiap versi utama MySQL yang baru memerlukan waktu dan upaya yang signifikan untuk memigrasikan beban kerja kami. Tantangannya antara lain
Peningkatan versi utama terakhir kami, ke MySQL 5. 6, membutuhkan waktu lebih dari satu tahun untuk diluncurkan. Ketika versi 5. 7 dirilis, kami masih dalam pengembangan mesin penyimpanan LSM-Tree kami, MyRocks, pada versi 5. 6. Sejak upgrade ke 5. 7 sementara membangun mesin penyimpanan baru secara bersamaan akan memperlambat kemajuan MyRocks secara signifikan, kami memilih untuk tetap menggunakan 5. 6 hingga MyRocks selesai. MySQL8. 0 diumumkan saat kami menyelesaikan peluncuran MyRocks ke tingkat layanan basis data pengguna (UDB) kami. Show Versi itu menyertakan fitur menarik seperti replikasi paralel berbasis set tulis dan kamus data transaksional yang menyediakan dukungan atom DDL. Bagi kami, pindah ke 8. 0 juga akan membawa 5. 7 fitur yang kami lewatkan, termasuk Document Store. Versi 5. 6 mendekati akhir masa pakainya, dan kami ingin tetap aktif dalam komunitas MySQL, terutama dengan pekerjaan kami di mesin penyimpanan MyRocks. Penyempurnaan di 8. 0, seperti DDL instan, dapat mempercepat perubahan skema MyRocks, tetapi kami harus menggunakan 8. 0 basis kode untuk menggunakannya. Mengingat manfaat pembaruan kode, kami memutuskan untuk bermigrasi ke 8. 0. Kami berbagi bagaimana kami menangani 8 kami. 0 proyek migrasi — dan beberapa kejutan yang kami temukan dalam prosesnya. Ketika kami awalnya membatasi proyek, jelas bahwa pindah ke 8. 0 akan lebih sulit daripada bermigrasi ke 5. 6 atau MyRocks
Tambalan kodeKami pertama kali mengatur 8. 0 untuk membangun dan menguji di lingkungan pengembangan kami. Kami kemudian memulai perjalanan panjang untuk memindahkan tambalan dari 5 kami. 6 cabang. Ada lebih dari 1.700 tambalan saat kami mulai, tetapi kami dapat mengaturnya ke dalam beberapa kategori utama. Sebagian besar kode kustom kami memiliki komentar dan deskripsi yang baik sehingga kami dapat dengan mudah menentukan apakah kode tersebut masih diperlukan oleh aplikasi atau dapat dihapus. Fitur yang diaktifkan oleh kata kunci khusus atau nama variabel unik juga memudahkan untuk menentukan relevansi karena kami dapat mencari melalui basis kode aplikasi kami untuk menemukan kasus penggunaannya. Beberapa tambalan sangat tidak jelas dan membutuhkan pekerjaan detektif — menggali dokumen desain lama, pos, dan/atau komentar tinjauan kode — untuk memahami riwayatnya Kami menyortir setiap tambalan ke dalam salah satu dari empat ember
Kami melacak status dan informasi historis yang relevan dari setiap tambalan menggunakan spreadsheet, dan mencatat alasan kami saat melepas tambalan. Beberapa tambalan yang memperbarui fitur yang sama dikelompokkan bersama untuk porting. Patch porting dan berkomitmen ke 8. 0 cabang dianotasi dengan 5. 6 komit informasi. Perbedaan pada status porting pasti akan muncul karena banyaknya tambalan yang perlu kami saring dan catatan ini membantu kami menyelesaikannya Setiap kategori klien dan server secara alami menjadi tonggak rilis perangkat lunak. Dengan porting semua perubahan terkait klien, kami dapat memperbarui perkakas klien dan kode konektor ke 8. 0. Setelah semua fitur server non-MyRocks dipindahkan, kami dapat menerapkan 8. 0 mysqld untuk server InnoDB. Menyelesaikan fitur server MyRocks memungkinkan kami memperbarui instalasi MyRocks Beberapa fitur yang paling kompleks memerlukan perubahan signifikan untuk 8. 0, dan beberapa area memiliki masalah kompatibilitas yang besar. Misalnya hulu 8. 0 format acara binlog tidak kompatibel dengan beberapa kebiasaan kami 5. 6 modifikasi. Kode kesalahan yang digunakan oleh Facebook 5. 6 fitur bertentangan dengan yang ditugaskan ke fitur baru oleh upstream 8. 0. Kami akhirnya perlu menambal 5. 6 server agar kompatibel ke depan dengan 8. 0 Butuh beberapa tahun untuk menyelesaikan porting semua fitur ini. Pada saat kami mencapai akhir, kami telah mengevaluasi lebih dari 2.300 tambalan dan mem-porting 1.500 di antaranya menjadi 8. 0 Jalur migrasiKami mengelompokkan beberapa instance mysqld menjadi satu set replika MySQL. Setiap instans dalam kumpulan replika berisi data yang sama tetapi didistribusikan secara geografis ke pusat data yang berbeda untuk menyediakan ketersediaan data dan dukungan failover. Setiap kumpulan replika memiliki satu instance utama. Instance yang tersisa semuanya sekunder. Primer menangani semua lalu lintas tulis dan mereplikasi data secara asinkron ke semua sekunder Kami mulai dengan set replika yang terdiri dari 5. 6 primer/5. 6 sekunder dan tujuan akhirnya adalah set replika dengan 8. 0 primer/8. 0 sekunder. Kami mengikuti rencana yang mirip dengan rencana migrasi UDB MyRocks.
Setiap set replika dapat bertransisi melalui setiap langkah di atas secara mandiri dan tetap pada satu langkah selama diperlukan. Kami memisahkan set replika menjadi kelompok yang jauh lebih kecil, yang kami gembalakan melalui setiap transisi. Jika kami menemukan masalah, kami dapat kembali ke langkah sebelumnya. Dalam beberapa kasus, set replika dapat mencapai langkah terakhir sebelum yang lainnya memulai Untuk mengotomatiskan transisi sejumlah besar kumpulan replika, kami perlu membangun infrastruktur perangkat lunak baru. Kita dapat mengelompokkan set replika bersama dan memindahkannya melalui setiap tahap hanya dengan mengubah baris dalam file konfigurasi. Set replika apa pun yang mengalami masalah kemudian dapat dibatalkan satu per satu Replikasi berbasis barisSebagai bagian dari 8. 0 upaya migrasi, kami memutuskan untuk standarisasi menggunakan replikasi berbasis baris (RBR). Beberapa 8. 0 membutuhkan RBR, dan itu menyederhanakan upaya porting MyRocks kami. Sementara sebagian besar set replika MySQL kami sudah menggunakan RBR, replikasi berbasis pernyataan (SBR) yang masih berjalan tidak dapat dengan mudah dikonversi. Set replika ini biasanya memiliki tabel tanpa kunci kardinalitas tinggi. Beralih sepenuhnya ke RBR telah menjadi tujuan, tetapi pekerjaan panjang yang diperlukan untuk menambahkan kunci utama sering kali diprioritaskan lebih rendah daripada proyek lain Oleh karena itu, kami menjadikan RBR sebagai persyaratan untuk 8. 0. Setelah mengevaluasi dan menambahkan kunci utama ke setiap tabel, kami mengganti set replika SBR terakhir tahun ini. Menggunakan RBR juga memberi kami solusi alternatif untuk menyelesaikan masalah aplikasi yang kami temui saat kami memindahkan beberapa set replika ke 8. 0 pendahuluan, yang akan dibahas nanti Validasi otomatisasiSebagian besar 8. Proses migrasi V.0 melibatkan pengujian dan verifikasi server mysqld dengan infrastruktur otomasi dan kueri aplikasi kami Seiring berkembangnya armada MySQL kami, infrastruktur otomatisasi yang kami gunakan untuk mengelola server juga meningkat. Untuk memastikan semua otomatisasi MySQL kami kompatibel dengan 8. 0, kami berinvestasi dalam membangun lingkungan pengujian, yang memanfaatkan kumpulan replika pengujian dengan mesin virtual untuk memverifikasi perilaku. Kami menulis tes integrasi ke canary setiap bagian dari otomatisasi untuk berjalan di kedua 5. 6 versi dan 8. 0 versi dan memverifikasi kebenarannya. Kami menemukan beberapa bug dan perbedaan perilaku saat kami melakukan latihan ini Karena setiap infrastruktur MySQL telah divalidasi dengan 8. 0, kami menemukan dan memperbaiki (atau mengatasi) sejumlah masalah menarik
Validasi aplikasiKami ingin transisi untuk aplikasi menjadi setransparan mungkin, tetapi beberapa kueri aplikasi mencapai regresi kinerja atau akan gagal pada 8. 0 Untuk migrasi MyRocks, kami membuat kerangka kerja pengujian bayangan MySQL yang menangkap lalu lintas produksi dan memutarnya kembali untuk menguji instance. Untuk setiap beban kerja aplikasi, kami membuat instance pengujian pada 8. 0 dan memutar ulang kueri lalu lintas bayangan kepada mereka. Kami menangkap dan mencatat kesalahan yang kembali dari 8. 0 server dan menemukan beberapa masalah menarik. Sayangnya, tidak semua masalah ini ditemukan selama pengujian. Misalnya, kebuntuan transaksi ditemukan oleh aplikasi selama migrasi. Kami dapat mengembalikan aplikasi ini ke 5. 6 sementara sementara kami meneliti solusi yang berbeda
Permintaan kami dan pengujian kinerja dari 8. 0 menemukan beberapa masalah yang perlu segera diatasi
Penggunaan memori dibandingkan dengan 5. 6 telah meningkat, terutama untuk instans MyRocks kami, karena InnoDB di 8. 0 harus dimuat. Pengaturan performance_schema default mengaktifkan semua instrumen dan menghabiskan banyak memori. Kami membatasi penggunaan memori dengan hanya mengaktifkan sejumlah kecil instrumen dan membuat perubahan kode untuk menonaktifkan tabel yang tidak dapat dimatikan secara manual. Namun, tidak semua peningkatan memori dialokasikan oleh performance_schema. Kami perlu memeriksa dan memodifikasi berbagai struktur data internal InnoDB untuk mengurangi jejak memori lebih lanjut. Usaha ini menghasilkan 8. Penggunaan memori 0 turun ke tingkat yang dapat diterima. Apa berikutnya8. 0 migrasi telah memakan waktu beberapa tahun sejauh ini. Kami telah mengonversi banyak set replika InnoDB kami untuk berjalan sepenuhnya pada 8. 0. Sebagian besar yang tersisa berada pada berbagai tahap di sepanjang jalur migrasi. Sekarang sebagian besar fitur khusus kami telah dipindahkan ke 8. 0, memperbarui ke rilis minor Oracle relatif lebih mudah dan kami berencana untuk mengikuti versi terbaru Melewatkan versi utama seperti 5. 7 memperkenalkan masalah, yang perlu diselesaikan oleh migrasi kami Pertama, kami tidak dapat memutakhirkan server di tempat dan perlu menggunakan logical dump dan restore untuk membangun server baru. Namun, untuk instance mysqld yang sangat besar, ini dapat memakan waktu berhari-hari di server produksi langsung dan proses rapuh ini kemungkinan besar akan terhenti sebelum dapat diselesaikan. Untuk instans besar ini, kami harus memodifikasi sistem pencadangan dan pemulihan untuk menangani pembangunan kembali Kedua, jauh lebih sulit untuk mendeteksi perubahan API karena 5. 7 dapat memberikan peringatan penghentian kepada klien aplikasi kami untuk memperbaiki potensi masalah. Sebagai gantinya, kami perlu menjalankan pengujian bayangan tambahan untuk menemukan kegagalan sebelum kami dapat memigrasikan beban kerja produksi. Menggunakan perangkat lunak klien mysql yang secara otomatis keluar dari nama objek skema membantu mengurangi jumlah masalah kompatibilitas Mendukung dua versi utama dalam satu set replika itu sulit. Setelah set replika mempromosikan utamanya menjadi 8. 0 misalnya, yang terbaik adalah menonaktifkan dan menghapus 5. 6 orang secepat mungkin. Pengguna aplikasi cenderung menemukan fitur baru yang hanya didukung oleh 8. 0, seperti utf8mb4_0900 collations, dan menggunakan ini dapat memutus aliran replikasi antara 8. 0 dan 5. 6 contoh. Terlepas dari semua rintangan di jalur migrasi kami, kami telah melihat manfaat menjalankan 8. 0. Beberapa aplikasi memilih konversi awal ke 8. 0 untuk memanfaatkan fitur seperti Penyimpanan Dokumen dan peningkatan dukungan waktu dan waktu. Kami telah mempertimbangkan cara mendukung fitur mesin penyimpanan seperti DDL Instan di MyRocks. Secara keseluruhan, versi baru sangat memperluas apa yang bisa kita lakukan dengan MySQL @ Facebook Apa perbedaan antara MySQL 5. 7 dan MySQL 8?MySQL 8. 0 menjadikan UTF8MB4 set karakter default . Kinerja SQL – seperti menyortir string UTF8MB4 – telah ditingkatkan dengan faktor 20 dalam 8. 0 dibandingkan dengan 5. 7. UTF8MB4 adalah pengkodean karakter yang mendominasi untuk web, dan langkah ini akan membuat hidup lebih mudah bagi sebagian besar pengguna MySQL.
Apa yang baru di MySQL 8. 0 28?Dari MySQL 8. 0. 28, hak istimewa AUDIT_ABORT_EXEMPT tersedia untuk mengizinkan kueri akun pengguna untuk selalu dieksekusi bahkan jika item "batalkan" akan memblokirnya . Oleh karena itu, akun dengan hak istimewa ini dapat digunakan untuk mendapatkan kembali akses ke sistem setelah kesalahan konfigurasi audit.
Apa yang terjadi pada MySQL 8. 0 29?29 (26-04-2022, Ketersediaan Umum) Rilis ini tidak lagi tersedia untuk diunduh. Itu telah dihapus karena masalah kritis yang dapat menyebabkan data dalam tabel InnoDB menambahkan kolom untuk diinterpretasikan secara tidak benar .
Haruskah saya menggunakan MySQL 5. 7 atau 8?MySQL 8. 0 harus berperforma lebih baik dan terlihat lebih efisien selama pembandingan . Performanya sangat baik untuk beban kerja baca/tulis versus MySQL 5. 7. Tidak ada alasan untuk tidak menggunakan MySQL 8. 0 jika Anda dapat meningkatkan. Silakan lihat dokumentasi berikut untuk melihat lebih dalam ke MySQL 8. 0. |