Tip Berguna untuk Mengatasi Kesalahan Umum di MySQL


MySQL adalah sistem manajemen basis data relasional open source (RDMS) yang dimiliki oleh Oracle. Selama bertahun-tahun, ini telah menjadi pilihan default untuk aplikasi berbasis web dan masih tetap populer dibandingkan dengan mesin basis data lainnya.

MySQL dirancang dan dioptimalkan untuk aplikasi web - MySQL merupakan bagian integral dari aplikasi berbasis web utama seperti Facebook, Twitter, Wikipedia, YouTube, dan banyak lainnya.

Apakah situs atau aplikasi web Anda didukung oleh MySQL? Pada artikel mendetail ini, kami akan menjelaskan cara memecahkan masalah dan kesalahan umum di server database MySQL. Kami akan menjelaskan bagaimana menentukan penyebab masalah dan apa yang harus dilakukan untuk menyelesaikannya.

1. Tidak Dapat Terhubung ke Server MySQL Lokal

Salah satu kesalahan koneksi klien ke server yang umum di MySQL adalah "ERROR 2002 (HY000): Tidak dapat terhubung ke server MySQL lokal melalui soket '/var/run/mysqld/mysqld.sock' (2)".

Kesalahan ini menunjukkan bahwa tidak ada server MySQL (mysqld) yang berjalan pada sistem host atau Anda telah menetapkan nama file soket Unix atau port TCP/IP yang salah saat mencoba menyambung ke server.

Pastikan server berjalan dengan memeriksa proses bernama mysqld pada host server database Anda menggunakan perintah grep bersama-sama seperti yang ditunjukkan.

$ ps xa | grep mysqld | grep -v mysqld

Jika perintah di atas tidak menunjukkan keluaran, maka server database tidak berjalan. Oleh karena itu, klien tidak dapat terhubung dengannya. Untuk memulai server, jalankan perintah systemctl berikut.

$ sudo systemctl start mysql        #Debian/Ubuntu
$ sudo systemctl start mysqld       #RHEL/CentOS/Fedora

Untuk memverifikasi status layanan MySQL, gunakan perintah berikut.

$ sudo systemctl status mysql       #Debian/Ubuntu
$ sudo systemctl status mysqld      #RHEL/CentOS/Fedora

Dari output perintah di atas, layanan MySQL gagal. Dalam kasus seperti itu, Anda dapat mencoba memulai ulang dan memeriksa statusnya sekali lagi.

$ sudo systemctl restart mysql
$ sudo systemctl status mysql

Selain itu, jika server berjalan seperti yang ditunjukkan oleh perintah berikut, tetapi Anda masih melihat kesalahan di atas, Anda juga harus memverifikasi bahwa port TCP/IP diblokir oleh firewall atau layanan pemblokiran port apa pun.

$ ps xa | grep mysqld | grep -v mysqld

Untuk perintah netstat seperti yang ditunjukkan.

$ sudo netstat -tlpn | grep "mysql"

2. Tidak Dapat Terhubung ke Server MySQL

Kesalahan koneksi lain yang sering ditemui adalah "(2003) Tidak dapat terhubung ke server MySQL di 'server' (10061)", yang berarti bahwa koneksi jaringan telah ditolak.

Di sini, mulailah dengan memeriksa apakah ada server MySQL yang berjalan pada sistem seperti yang ditunjukkan di atas. Juga pastikan bahwa server memiliki koneksi jaringan yang diaktifkan dan port jaringan yang Anda gunakan untuk menghubungkan adalah yang dikonfigurasi di server.

Kesalahan umum lainnya yang mungkin Anda temui saat mencoba terhubung ke server MySQL adalah:

ERROR 2003: Can't connect to MySQL server on 'host_name' (111)
ERROR 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)

Kesalahan ini menunjukkan bahwa server mungkin sedang berjalan, namun, Anda mencoba menyambung menggunakan port TCP/IP, pipa bernama, atau file soket Unix yang berbeda dari yang digunakan server untuk mendengarkan.

3. Access Denied Errors di MySQL

Di MySQL, akun pengguna didefinisikan dalam istilah nama pengguna dan host klien atau host tempat pengguna dapat terhubung ke server. Selain itu, akun mungkin juga memiliki kredensial otentikasi seperti kata sandi.

Meskipun ada banyak penyebab kesalahan "Akses ditolak", salah satu penyebab umum terkait dengan akun MySQL yang diizinkan oleh server untuk digunakan oleh program klien saat menyambungkan. Ini menunjukkan bahwa nama pengguna yang ditentukan dalam koneksi tidak memiliki hak untuk mengakses database.

MySQL memungkinkan pembuatan akun yang memungkinkan pengguna klien untuk terhubung ke server dan mengakses data yang dikelola oleh server. Dalam hal ini, jika Anda menemukan kesalahan akses ditolak, periksa apakah akun pengguna diizinkan untuk terhubung ke server melalui program klien yang Anda gunakan, dan mungkin host dari mana koneksi itu berasal.

Anda bisa melihat hak istimewa yang dimiliki akun dengan menjalankan perintah SHOW GRANTS seperti yang ditunjukkan.

> SHOW GRANTS FOR 'tecmint'@'localhost';

Anda dapat memberikan hak istimewa kepada pengguna tertentu pada database tertentu ke alamat ip jarak jauh menggunakan perintah berikut di shell MySQL.

> grant all privileges on *.test_db to 'tecmint'@'192.168.0.100';
> flush privileges;

Selain itu, kesalahan akses ditolak juga dapat disebabkan oleh masalah dengan koneksi ke MySQL, lihat kesalahan yang dijelaskan sebelumnya.

4. Kehilangan Koneksi ke Server MySQL

Anda mungkin mengalami kesalahan ini karena salah satu alasan berikut: konektivitas jaringan yang buruk, waktu koneksi habis atau masalah dengan nilai BLOB yang lebih besar dari max_allowed_packet. Jika terjadi masalah koneksi jaringan, pastikan Anda memiliki koneksi jaringan yang baik terutama jika Anda mengakses server database jauh.

Jika ini adalah masalah waktu tunggu koneksi, terutama ketika MySQL mencoba menggunakan koneksi awal ke server, tingkatkan nilai parameter connect_timeout. Namun jika nilai BLOB lebih besar dari max_allowed_packet, Anda perlu menyetel nilai yang lebih tinggi untuk max_allowed_packet di file konfigurasi /etc/my.cnf Anda di [mysqld] atau [client] seperti yang ditunjukkan.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Jika file konfigurasi MySQL tidak dapat Anda akses, Anda dapat mengatur nilai ini menggunakan perintah berikut di shell MySQL.

> SET GLOBAL connect_timeout=100;
> SET GLOBAL max_allowed_packet=524288000;

5. Terlalu Banyak Koneksi MySQL

Jika klien MySQL menemukan kesalahan "terlalu banyak koneksi", itu berarti bahwa semua koneksi yang tersedia sedang digunakan oleh klien lain. Jumlah koneksi (default 151) dikontrol oleh variabel sistem max_connections ; Anda dapat memperbaiki masalah dengan meningkatkan nilainya untuk mengizinkan lebih banyak koneksi di file konfigurasi /etc/my.cnf Anda.

[mysqld]
max_connections=1000

6. Memori MySQL Habis

Jika Anda menjalankan kueri menggunakan program klien MySQL dan menemukan kesalahan yang dimaksud, itu berarti MySQL tidak memiliki cukup memori untuk menyimpan seluruh hasil kueri.

Langkah pertama adalah memastikan bahwa kueri benar, jika benar, lakukan hal berikut:

  • jika Anda menggunakan klien MySQL secara langsung, mulailah dengan --quick switch , untuk menonaktifkan hasil yang disimpan dalam cache atau
  • jika Anda menggunakan driver MyODBC, antarmuka pengguna konfigurasi (UI) memiliki tab lanjutan untuk tanda. Centang "Jangan cache hasil".

Alat hebat lainnya adalah, MySQL Tuner - skrip berguna yang akan terhubung ke server MySQL yang sedang berjalan dan memberikan saran tentang bagaimana hal itu dapat dikonfigurasi untuk kinerja yang lebih tinggi.

$ sudo apt-get install mysqltuner     #Debian/Ubuntu
$ sudo yum install mysqltuner         #RHEL/CentOS/Fedora
$ mysqltuner

Untuk tips pengoptimalan dan penyetelan performa MySQL, baca artikel kami: 15 Tips Penyesuaian dan Pengoptimalan Performa MySQL/MariaDB yang Berguna.

7. MySQL Terus Menerjang

Jika Anda mengalami masalah ini, Anda harus mencoba mencari tahu apakah masalahnya adalah server MySQL mati atau apakah kliennya bermasalah. Perhatikan bahwa banyak server mogok disebabkan oleh file data atau file indeks yang rusak.

Anda dapat memeriksa status server untuk menetapkan berapa lama server telah aktif dan berjalan.

$ sudo systemctl status mysql       #Debian/Ubuntu
$ sudo systemctl status mysqld      #RHEL/CentOS/Fedora

Atau, jalankan perintah mysqladmin berikut untuk menemukan waktu aktif server MySQL.

$ sudo mysqladmin version -p 

Solusi lain termasuk tetapi tidak terbatas pada menghentikan server MySQL dan mengaktifkan debugging, lalu memulai layanan lagi. Anda bisa mencoba membuat test case yang bisa digunakan untuk mengulang soal. Selain itu, buka jendela terminal tambahan dan jalankan perintah berikut untuk menampilkan statistik proses MySQL saat Anda menjalankan kueri Anda yang lain:

$ sudo mysqladmin -i 5 status
OR
$ sudo mysqladmin -i 5 -r status 

Meskipun kami telah melihat beberapa masalah dan kesalahan MySQL yang umum dan juga menyediakan cara untuk memecahkan masalah dan menyelesaikannya, hal terpenting dengan mendiagnosis kesalahan adalah memahami artinya (dalam hal apa penyebabnya).

Jadi bagaimana Anda bisa menentukan ini? Poin-poin berikut akan memandu Anda tentang cara memastikan apa yang sebenarnya menyebabkan masalah:

  1. Langkah pertama dan terpenting adalah melihat log MySQL yang disimpan di direktori /var/log/mysql/. Anda dapat menggunakan utilitas baris perintah seperti tail untuk membaca file log.
  2. Jika layanan MySQL gagal dimulai, periksa statusnya menggunakan systemctl atau gunakan perintah journetctl (dengan perintah -xe flag) di bawah systemd untuk memeriksa masalahnya.
  3. Anda juga dapat memeriksa file log sistem seperti /var/log/messages atau yang serupa untuk alasan masalah Anda.
  4. Coba gunakan alat seperti htop untuk memeriksa program mana yang menggunakan semua CPU atau mengunci mesin atau untuk memeriksa apakah Anda kehabisan memori, ruang disk, deskriptor file, atau sumber daya penting lainnya.
  5. Dengan asumsi bahwa masalahnya adalah proses yang tidak berjalan, Anda selalu dapat mencoba mematikannya (menggunakan utilitas pkill atau kill) agar MySQL berfungsi normal.
  6. Misalkan server mysqld menyebabkan masalah, Anda dapat menjalankan perintah: mysqladmin -u root ping atau mysqladmin -u root processlist untuk mendapatkan tanggapan darinya.
  7. Jika masalah ada pada program klien Anda saat mencoba menyambung ke server MySQL, periksa mengapa tidak berfungsi dengan baik, coba dapatkan keluaran apa pun darinya untuk tujuan pemecahan masalah.

Anda mungkin juga ingin membaca artikel terkait MySQL berikut ini:

  1. Pelajari MySQL/MariaDB untuk Pemula - Bagian 1
  2. Cara Memantau Database MySQL/MariaDB menggunakan Netdata di CentOS 7
  3. Cara Mentransfer Semua Database MySQL Dari Server Lama ke Server Baru
  4. Mytop - Alat yang Berguna untuk Memantau Kinerja MySQL/MariaDB di Linux
  5. 12 Praktik Terbaik Keamanan MySQL/MariaDB untuk Linux

Untuk informasi lebih lanjut, lihat manual Referensi MySQL tentang Masalah dan Kesalahan Umum, ini secara komprehensif mencantumkan masalah umum dan pesan kesalahan yang mungkin Anda temui saat menggunakan MySQL, termasuk yang telah kita diskusikan di atas dan banyak lagi.