MySQL adalah SQL Database Management System (DMS) sumber terbuka yang paling populer, dikembangkan, didistribusikan, dan didukung oleh Oracle Corporation. Dengan pembaruan terkini pada tahun , DMS telah mengembalikan posisinya sebagai DMS terbaik di pasar. MySQL8. 0. Pembaruan 25 hadir dengan peningkatan kinerja dan keamanan utama
Beberapa sorotan utama termasuk
- Peningkatan performa
- Keamanan dan manajemen akun
- Manajemen enkripsi tabel
- peningkatan InnoDB
- peningkatan JSON
- Pengoptimal
- Dukungan ekspresi reguler
- Penyimpanan Dokumen MySQL
- Kamus Data Transaksional
- Peran SQL
- Bawaan ke utf8mb4
- Ekspresi Tabel Umum
- Fungsi Jendela
Mempertimbangkan peningkatan ini, disarankan agar DMS aplikasi Anda ditingkatkan ke server MySQL terbaru. Upgrade ke versi terbaru MySQL dari 5. 1 versi memerlukan banyak pengeditan kecil dan besar dalam aplikasi perusahaan Anda
Kami baru-baru ini menerima mandat untuk memigrasi database perusahaan kami ke versi terbaru MySQL. Ini memungkinkan kami untuk menambahkan fitur baru ke platform dan meningkatkan kemampuan keamanan dan pengoptimalan data
Kami telah mendokumentasikan perjalanan bertahap kami dan pelajaran yang didapat selama proses tersebut
Konfigurasi aplikasi perusahaan kamiUntuk memahami proses migrasi dengan jelas, saya telah menguraikan tumpukan teknologi aplikasi
Jawa 1. 8
Maven 2. 2. 1
Musim semi 2. 5
Hibernasi 3. 2. 6
Kucing jantan 7. 0. 54
MySQL5. 1. 34
Liquidbase 1. 9. 0. 0
Tujuan utama kami adalah untuk meningkatkan versi platform DMS
Proses MigrasiDi awal proses migrasi, kami mempertimbangkan 3 parameter
- Meninjau apa yang baru di MySQL 8. 0
- Mencatat perubahan database/skema
- Mengupgrade dependensi
Sesuai dokumentasi MySQL, peta pemutakhiran adalah 5. 1 → 5. 5 → 5. 6 → 5. 7 → 8. 0. Kami mengikuti dokumentasi untuk peningkatan prosedural
Proses langkah demi langkah untuk Upgrade (Linux — Centos)1. Ambil cadangan dari Database saat ini dan konfigurasinyamysqldump -u****** -p****** --routines --triggers TEST_DB | gzip > /opt/db_bck.sql.gz_
Jika ukuran DB Anda besar, Anda dapat menggunakan perintah nohup yang menjalankan proses pencadangan di latar belakang. Jadi perintah dump di atas akan dimodifikasi menjadi
nohup sh -c 'mysqldump -u****** -p****** --routines --triggers TEST_DB |gzip > /opt/db_bck.sql.gz' > /opt/bck_error_log.log &
Jika ada kesalahan yang terjadi selama proses dump, itu akan dicatat di bck_error_log. file log
Sekarang, buat cadangan file konfigurasi mysql saat ini yang terletak di /etc/my.cnf dengan perintah ini
cp /etc/my.cnf /opt/5.1_my.cnf_
2. Copot pemasangan MySQL5. 1 dengan perintah berikut
- Buka terminal. Ctrl + Alt + T
- Hentikan layanan mysql. systemctl stop mysql_
- Hapus mysql-server. sudo yum remove mysql mysql-server
- Hapus perpustakaan mysql. sudo yum remove mysql mysql-server mysql-libs compat-mysql51_
- Temukan MySQL 5. 1 file. find / -name mysql_
Perintah di atas akan mencantumkan jalur folder berikut
- /var/lib/mysql
- /etc/selinux/targeted/active/modules/100/mysql
- /usr/bin/mysql
- /usr/lib64/mysql
- /usr/include/mysql
Hapus folder yang tercantum di atas. Juga, hapus saya. cnf jika ada
3. Instal MySQL8. 0 (diuji dengan 8. 0. 23) dengan perintah berikut- Setel yum repo untuk MySQL 8. 0. mysqldump -u****** -p****** --routines --triggers TEST_DB | gzip > /opt/db_bck.sql.gz_0
- Instal MySQL8. 0. mysqldump -u****** -p****** --routines --triggers TEST_DB | gzip > /opt/db_bck.sql.gz_1
- Aktifkan layanan mysqld. mysqldump -u****** -p****** --routines --triggers TEST_DB | gzip > /opt/db_bck.sql.gz_2
- Mulai layanan mysqld. systemctl mulai mysqld
- Dapatkan kata sandi sementara untuk server MySQL yang diinstal. mysqldump -u****** -p****** --routines --triggers TEST_DB | gzip > /opt/db_bck.sql.gz_3
- Jalankan penginstalan aman untuk mengatur kata sandi root dan menghapus basis data pengujian. mysqldump -u****** -p****** --routines --triggers TEST_DB | gzip > /opt/db_bck.sql.gz_4
- Periksa versi MySQL dan detail lainnya dengan masuk ke server mysql dengan perintah berikut. mysqldump -u****** -p****** --routines --triggers TEST_DB | gzip > /opt/db_bck.sql.gz_5
Catatan. Setelah Anda masuk, buat pengguna baru dan berikan izin kepada pengguna itu. Hindari login pengguna root
mysqldump -u****** -p****** --routines --triggers TEST_DB | gzip > /opt/db_bck.sql.gz_6
Ini adalah perintah Nohup untuk file dump ukuran lebih besar
mysqldump -u****** -p****** --routines --triggers TEST_DB | gzip > /opt/db_bck.sql.gz_7
Jika ada kesalahan selama proses pemuatan dump, itu akan dicatat di dump_error_log. file log. Setelah proses dump berhasil, Jalankan mysqldump -u****** -p****** --routines --triggers TEST_DB | gzip > /opt/db_bck.sql.gz_8 dan itu akan menghapus jumlah cek yang dihitung dengan versi Liquibase yang lebih lama dan checksum baru akan dihitung pada perintah migrasi berikutnya
5. PengujianSetelah pemutakhiran selesai, kami menjalankan pengujian komprehensif pada semua bagian aplikasi. Kami memastikan pengujian terfokus dilakukan untuk Liquibase untuk memeriksa apakah Liquibase memigrasikan semua set perubahan dan memuat metadata dengan benar
Aplikasi ini juga diuji menggunakan beberapa browser web seperti Google Chrome, Firefox, dan Microsoft Edge
Perubahan Basis DataSelama proses upgrade, akan ada perubahan tertentu pada konfigurasi database. Penting untuk mencatat perubahan tersebut untuk memastikan bahwa aplikasi berjalan dengan lancar setelah pemutakhiran DMS. Perubahan besar akan terjadi
- Kumpulan karakter default telah berubah dari latin1 menjadi utf8mb4
- Tampilan InnoDB INFORMATION_SCHEMA diganti namanya
- Kata kunci cadangan baru telah ditambahkan
- Log biner diaktifkan secara default. Tahu lebih banyak
Seperti yang baru saja saya katakan, akan ada beberapa perubahan besar dalam database dan kita perlu memutakhirkan dependensi yang sesuai. Mungkin ada beberapa tantangan untuk tumpukan teknologi yang ada untuk terhubung dengan versi baru dari Sistem Manajemen Basis Data
Dalam kasus aplikasi kami, kami menggunakan Liquibase untuk mengelola perubahan skema database dan plugin dbunit untuk penyemaian perubahan meta. Ketika kami mencoba menghubungkan aplikasi kami dengan MySQL 8. 0 database server menggunakan mysql-connector/J-8. 0 untuk menjalankan skema dan migrasi data, kami menghadapi beberapa masalah saat membuat dan mengambil tabel. Ini karena aplikasi kami memiliki Liquibase 1 versi lama. 9. 0. 0, yang tidak sepenuhnya kompatibel dengan MySQL 8. 0. Jadi kami memutakhirkan ke versi Liquibase yang lebih tinggi, yang didukung penuh oleh MySQL 8. 0. Setelah kami memutakhirkan Liquibase, kami menyadari bahwa kami perlu memutakhirkan dependensi yang sesuai juga
Memutakhirkan Liquibase ke versi yang lebih tinggi menyebabkan pemutakhiran pustaka Ant dan dependensinya juga. Setelah selesai, sistem log perubahan skema kami untuk proses migrasi sudah siap
Ada beberapa tantangan yang dihadapi selama proses migrasi. Untuk memastikan bahwa Anda tidak mengalaminya, kami telah mencantumkannya di bawah ini dengan solusi yang sesuai
Tantangan & SolusiTantangan #1Masalah dengan Liquibase-1. 9. 0 pada pembuatan tabel DATABASECHANGELOG dan DATABASECHANGELOGLOCK saat menggunakan mysql-connector-Java-8. 0 atau lebih tinggi
Larutan. Upgrade Liquibase ke versi yang mendukung MySQL 8. 0. Saya telah memutakhirkan Liquibase dari 1. 9. 0. 0 sampai 3. 6. 3
Mengambil tabel tanpa nama skema/DB yang cocok, yang mengarah ke pengecualian Tabel Ambigu
Larutan. Ini terjadi karena koneksi JDBC dihasilkan dengan MySQL Connector/J 8. 0. 25 adalah umum. Jadi, beberapa tabel dengan nama file yang sama dari skema/DB berbeda diambil. Perbarui konfigurasi POM untuk dbunit untuk mengambil tabel dengan nama skema/DB
<schema>TEST_DB</schema><dataTypeFactoryName>org.dbunit.ext.mysql.MySqlDataTypeFactory</dataTypeFactoryName><metadataHandlerName>org.dbunit.ext.mysql.MySqlMetadataHandler</metadataHandlerName>Tantangan #3Kami memiliki tag mysqldump -u****** -p****** --routines --triggers TEST_DB | gzip > /opt/db_bck.sql.gz_9 di set perubahan kami yang tidak digunakan lagi dari Liquibase 2. 0
Larutan. Kita dapat menggunakan tag nohup sh -c 'mysqldump -u****** -p****** --routines --triggers TEST_DB |gzip > /opt/db_bck.sql.gz' > /opt/bck_error_log.log &_0 dengan nohup sh -c 'mysqldump -u****** -p****** --routines --triggers TEST_DB |gzip > /opt/db_bck.sql.gz' > /opt/bck_error_log.log &1 bersama dengan tag nohup sh -c 'mysqldump -u****** -p****** --routines --triggers TEST_DB |gzip > /opt/db_bck.sql.gz' > /opt/bck_error_log.log &2, alih-alih menggunakan tag mysqldump -u****** -p****** --routines --triggers TEST_DB | gzip > /opt/db_bck.sql.gz9. Lihat dokumentasi Liquibase untuk memilih tag yang tepat untuk aplikasi Anda
Tantangan #4Liquidbase 3. 6. 3 tidak dapat mencatat kumpulan perubahan dengan pustaka Ant 1. 6. 5
Larutan. Tingkatkan Semua perpustakaan dari 1. 6. 5 (dalam proyek kami) ke 1. 7. 0, itu akan kompatibel dengan Liquibase 3. 6. 3
Perubahan Tambahan Diperlukan- Jenis boolean diubah dari nohup sh -c 'mysqldump -u****** -p****** --routines --triggers TEST_DB |gzip > /opt/db_bck.sql.gz' > /opt/bck_error_log.log &_4 menjadi nohup sh -c 'mysqldump -u****** -p****** --routines --triggers TEST_DB |gzip > /opt/db_bck.sql.gz' > /opt/bck_error_log.log &5
- Gunakan nohup sh -c 'mysqldump -u****** -p****** --routines --triggers TEST_DB |gzip > /opt/db_bck.sql.gz' > /opt/bck_error_log.log &_6 di Changeset xmls untuk menggunakan tag nohup sh -c 'mysqldump -u****** -p****** --routines --triggers TEST_DB |gzip > /opt/db_bck.sql.gz' > /opt/bck_error_log.log &2
Catatan. Kata kunci cadangan baru telah ditambahkan di MySQL 8. 0. 25. Jika tabel set perubahan Anda berisi salah satunya, gunakan (`) sebagai pola pelarian, yang ditangani secara internal di Liquibase 3. 6. 3 (mis. PERINGKAT -> `PERINGKAT`)
Berikut adalah Konfigurasi Akhir yang Diperbarui dari Aplikasi kamiJawa 1. 8
Maven 2. 2. 1
Musim semi 2. 5
Hibernasi 3. 2. 6
Kucing jantan 7. 0. 54
MySQL8. 0. 23
Liquidbase 3. 6. 3
Suka panduan langkah demi langkah kami?