Kematian MySQL berarti layanan MySQL Anda tidak dapat diakses atau tidak responsif dari sudut pandang pihak lain. Pemadaman dapat disebabkan oleh banyak kemungkinan penyebab..
- Masalah jaringan - Masalah konektivitas, sakelar, perutean, resolver, tingkat penyeimbang beban.
- Masalah sumber daya - Apakah Anda telah mencapai batas atau hambatan sumber daya.
- Salah konfigurasi - Izin atau kepemilikan salah, variabel tidak dikenal, sandi salah, hak istimewa diubah.
- Penguncian - Kunci global atau tabel mencegah orang lain mengakses data.
Dalam posting blog ini, kita akan melihat beberapa langkah yang harus diambil jika Anda mengalami gangguan MySQL (lingkungan Linux).
Langkah Pertama:Dapatkan Kode Kesalahan
Saat Anda mengalami gangguan, aplikasi Anda akan mengeluarkan beberapa kesalahan dan pengecualian. Kesalahan ini biasanya disertai dengan kode kesalahan, yang akan memberi Anda gambaran kasar tentang apa yang Anda hadapi dan apa yang harus dilakukan selanjutnya untuk memecahkan masalah dan memulihkan pemadaman.
Untuk mendapatkan detail lebih lanjut tentang kesalahan, periksa halaman Kode Kesalahan MySQL atau Kode Kesalahan MariaDB masing-masing untuk mencari tahu apa arti kesalahan.
Langkah Kedua:Apakah Server MySQL Berjalan?
Masuk ke server melalui terminal dan lihat apakah daemon MySQL berjalan dan dengarkan port yang benar. Di Linux, seseorang akan melakukan hal berikut:
Pertama, periksa proses MySQL:
$ ps -ef | grep -i mysql
Anda harus mendapatkan sesuatu sebagai balasannya. Jika tidak, MySQL tidak berjalan. Jika MySQL tidak berjalan, coba mulai:
$ systemctl start mysql # systemd
$ service mysql start # sysvinit/upstart
$ mysqld_safe # manual
Jika Anda melihat kesalahan pada langkah di atas, Anda harus melihat log kesalahan MySQL, yang bervariasi tergantung pada sistem operasi dan konfigurasi variabel MySQL untuk log_error dalam file konfigurasi MySQL. Untuk server berbasis RedHat, biasanya file tersebut berada di:
$ cat /var/log/mysqld.log
Perhatikan baris terbaru dengan level log "[Error]". Beberapa baris berlabel "[Peringatan]" dapat menunjukkan beberapa masalah, tetapi itu jarang terjadi. Sebagian besar waktu, kesalahan konfigurasi dan masalah sumber daya dapat dideteksi dari sini.
Jika MySQL sedang berjalan, periksa apakah itu mendengarkan port yang benar:
$ netstat -tulpn | grep -i mysql
tcp6 0 0 :::3306 :::* LISTEN 1089/mysqld
Anda akan mendapatkan nama proses "mysqld", mendengarkan semua antarmuka (:::3306 atau 0.0.0.0:3306) pada port 3306 dengan PID 1089 dan statusnya adalah "LISTEN". Jika Anda melihat baris di atas menunjukkan 127.0.0.1:3306, MySQL hanya mendengarkan secara lokal. Anda mungkin perlu mengubah nilai bind_address dalam file konfigurasi MySQL untuk mendengarkan semua alamat IP, atau cukup berkomentar di telepon.
Langkah Ketiga:Periksa Masalah Konektivitas
Jika server MySQL berjalan dengan baik tanpa kesalahan di dalam log kesalahan MySQL, kemungkinan terjadinya masalah konektivitas cukup tinggi. Mulailah dengan memeriksa konektivitas ke host melalui ping (jika ICMP diaktifkan) dan telnet ke server MySQL dari server aplikasi:
(application-server)$ ping db1.mydomain.com
(application-server)$ telnet db1.mydomain.com 3306
Trying db1.mydomain.com...
Connected to 192.168.0.16.
Escape character is '^]'.
O
5.6.46-86.2sN&nz9NZ�32?&>H,EV`_;mysql_native_password
Anda akan melihat beberapa baris di output telnet jika Anda dapat terhubung ke port MySQL. Sekarang, coba sekali lagi dengan menggunakan klien MySQL dari server aplikasi:
(application-server)$ mysql -u db_user -p -h db1.mydomain.com -P3306
ERROR 1045 (28000): Access denied for user 'db_user'@'db1.mydomain.com' (using password: YES)
Dalam contoh di atas, kesalahan memberi kita sedikit informasi tentang apa yang harus dilakukan selanjutnya. Di atas mungkin karena seseorang telah mengubah kata sandi untuk "db_user" atau kata sandi untuk pengguna ini telah kedaluwarsa. Ini adalah perilaku yang agak normal dari MySQL 5.7. 4 dan di atasnya, di mana kebijakan kedaluwarsa sandi otomatis diaktifkan secara default dengan ambang batas 360 hari - artinya semua sandi akan kedaluwarsa setahun sekali.
Langkah Empat:Periksa Daftar Proses MySQL
Jika MySQL berjalan dengan baik tanpa masalah konektivitas, periksa daftar proses MySQL untuk melihat proses apa yang sedang berjalan:
mysql> SHOW FULL PROCESSLIST;
+-----+------+-----------+------+---------+------+-------+-----------------------+-----------+---------------+
| Id | User | Host | db | Command | Time | State | Info | Rows_sent | Rows_examined |
+-----+------+-----------+------+---------+------+-------+-----------------------+-----------+---------------+
| 117 | root | localhost | NULL | Query | 0 | init | SHOW FULL PROCESSLIST | 0 | 0 |
+-----+------+-----------+------+---------+------+-------+-----------------------+-----------+---------------+
1 row in set (0.01 sec)
Perhatikan kolom Info dan Waktu. Beberapa operasi MySQL dapat cukup merusak untuk membuat database terhenti dan menjadi tidak responsif. Pernyataan SQL berikut, jika dijalankan, dapat memblokir orang lain untuk mengakses database atau tabel (yang dapat menyebabkan penghentian layanan MySQL dari perspektif aplikasi):
- FLUSH TABLES DENGAN READ LOCK
- KUNCI TABEL ...
- ALTER TABLE ...
Beberapa transaksi yang berjalan lama juga dapat menghentikan transaksi lainnya, yang pada akhirnya akan menyebabkan waktu tunggu untuk transaksi lain menunggu untuk mengakses sumber daya yang sama. Anda dapat mematikan transaksi ofensif untuk membiarkan orang lain mengakses baris yang sama atau mencoba lagi transaksi enqueue setelah transaksi panjang selesai.
Kesimpulan
Pemantauan proaktif sangat penting untuk meminimalkan risiko pemadaman MySQL. Jika database Anda dikelola oleh ClusterControl, semua aspek yang disebutkan dimonitor secara otomatis tanpa konfigurasi tambahan dari pengguna. Anda akan menerima alarm di kotak masuk Anda untuk deteksi anomali seperti kueri yang berjalan lama, salah konfigurasi server, sumber daya yang melebihi ambang batas dan banyak lagi. Selain itu, ClusterControl akan secara otomatis mencoba memulihkan layanan database Anda jika terjadi masalah dengan host atau jaringan.
Anda juga dapat mempelajari lebih lanjut tentang Pemulihan Bencana MySQL &MariaDB dengan membaca buku putih kami.