Tip Berguna untuk Memecahkan Masalah Kesalahan Umum di MySQL


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

Baca Juga: Cara Install MySQL Terbaru di RHEL/CentOS dan Fedora

MySQL dirancang dan dioptimalkan untuk aplikasi web – ini 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? Dalam artikel mendetail ini, kami akan menjelaskan cara memecahkan masalah dan kesalahan umum di server database MySQL. Kami akan menjelaskan cara menentukan penyebab masalah dan apa yang harus dilakukan untuk mengatasinya.

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 menentukan nama file soket Unix atau TCP/IP< yang salah port ketika mencoba terhubung ke server.

Pastikan server berjalan dengan memeriksa proses bernama mysqld di host server database Anda menggunakan perintah ps dan perintah grep secara bersamaan 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 ke sana. 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 ini, 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, namun 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 menemukan port yang didengarkan server, gunakan perintah netstat seperti yang ditunjukkan.

sudo netstat -tlpn | grep "mysql"

2. Tidak Dapat Terhubung ke Server MySQL

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

Di sini, mulailah dengan memeriksa apakah ada server MySQL yang berjalan di sistem seperti yang ditunjukkan di atas. Pastikan juga server memiliki koneksi jaringan yang diaktifkan dan port jaringan yang Anda gunakan untuk menyambung adalah port yang dikonfigurasi di server.

Kesalahan umum lainnya yang mungkin Anda temui saat mencoba menyambung 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 didengarkan server.

3. Kesalahan Akses Ditolak di MySQL

Di MySQL, akun pengguna didefinisikan dalam istilah nama pengguna dan host klien atau host tempat pengguna dapat terhubung ke server. Selain itu, sebuah 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 menghubungkan. Hal ini menunjukkan bahwa nama pengguna yang ditentukan dalam koneksi tidak memiliki hak istimewa untuk mengakses database.

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

Anda dapat melihat hak istimewa yang dimiliki akun tertentu 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 koneksi ke MySQL, lihat kesalahan yang telah 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 paket_maks_diizinkan. Jika terjadi masalah koneksi jaringan, pastikan Anda memiliki koneksi jaringan yang baik terutama jika Anda mengakses server database jarak jauh.

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

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Jika file konfigurasi MySQL tidak dapat diakses oleh Anda, maka 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 mengalami kesalahan “terlalu banyak koneksi ”, itu berarti semua koneksi yang tersedia sedang digunakan oleh klien lain. Jumlah koneksi (defaultnya adalah 151) dikontrol oleh variabel sistem max_connections; Anda dapat mengatasi masalah ini dengan meningkatkan nilainya untuk mengizinkan lebih banyak koneksi di file konfigurasi /etc/my.cnf Anda.

[mysqld]
max_connections=1000

6. Kehabisan Memori MySQL

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 tersebut benar, jika ya, lakukan hal berikut:

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

Alat hebat lainnya adalah, MySQL Tuner – skrip berguna yang akan terhubung ke server MySQL yang sedang berjalan dan memberikan saran tentang cara mengonfigurasinya untuk kinerja yang lebih tinggi.

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

Untuk tip pengoptimalan dan penyesuaian kinerja MySQL, baca artikel kami: 15 Tip Penyetelan dan Pengoptimalan Kinerja MySQL/MariaDB yang Berguna.

7. MySQL Terus Error

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

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

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

Alternatifnya, jalankan perintah mysqladmin berikut untuk mengetahui uptime server MySQL.

sudo mysqladmin version -p 

Solusi lainnya termasuk namun tidak terbatas pada menghentikan server MySQL dan mengaktifkan proses debug, 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 lainnya:

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

Intinya: Menentukan Apa yang Menyebabkan Masalah atau Kesalahan

Meskipun kita telah melihat beberapa masalah dan kesalahan umum MySQL dan juga memberikan cara untuk memecahkan masalah dan menyelesaikannya, hal terpenting dalam mendiagnosis kesalahan adalah memahami apa artinya (dalam hal apa yang menyebabkannya) .

Jadi bagaimana Anda bisa menentukannya? Poin-poin berikut akan memandu Anda tentang cara memastikan apa sebenarnya yang 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 tanda -xe) di bawah systemd untuk memeriksa masalahnya.
  3. Anda juga dapat memeriksa file log sistem seperti /var/log/messages atau serupa untuk mengetahui alasan masalah Anda.
  4. Coba gunakan alat seperti Mytop, sekilas, top, ps, atau 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 mendapatkannya tanggapan darinya.
  7. Jika masalahnya ada pada program klien Anda saat mencoba menyambung ke server MySQL, periksa mengapa program tersebut 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 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 mengenai Masalah dan Kesalahan Umum, yang berisi daftar lengkap masalah umum dan pesan kesalahan yang mungkin Anda temui saat menggunakan MySQL, termasuk yang telah kita bahas di atas dan banyak lagi.