Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Tips Berguna untuk Memecahkan Kesalahan Umum di MySQL

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

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 terperinci ini, kami akan menjelaskan cara memecahkan masalah dan kesalahan umum di MySQL server basis data. Kami akan menjelaskan cara 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 MySQL server (mysqld) berjalan di sistem host atau Anda telah menetapkan nama file soket Unix yang salah atau TCP/IP port ketika mencoba menyambung ke server.

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

$ ps xa | grep mysqld | grep -v mysqld

Jika perintah di atas tidak menunjukkan output, 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 MySQL status layanan, gunakan perintah berikut.

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

Dari output perintah di atas, MySQL layanan telah 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 TCP/IP port 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 MySQL server berjalan pada sistem seperti yang ditunjukkan di atas. Pastikan juga 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 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 TCP/IP port, pipa bernama, atau file soket Unix yang berbeda dari yang didengarkan oleh server.

3. Akses Kesalahan yang Ditolak di MySQL

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

Meskipun ada banyak penyebab berbeda dari “Akses ditolak ”, salah satu penyebab umum terkait dengan akun MySQL yang diizinkan server untuk digunakan oleh program klien saat menghubungkan. Ini menunjukkan bahwa nama pengguna 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 tersebut berasal.

Anda dapat melihat hak istimewa yang dimiliki akun tertentu dengan menjalankan SHOW GRANTS perintah 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;

Selanjutnya, 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 BLOB nilai yang lebih besar dari max_allowed_packet . Jika terjadi masalah koneksi jaringan, pastikan Anda memiliki koneksi jaringan yang baik terutama jika Anda mengakses server basis data jarak jauh.

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

[mysqld]
connect_timeout=100
max_allowed_packet=500M

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

[mysqld]
max_connections=1000

6. Kehabisan Memori MySQL

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

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

  • jika Anda menggunakan klien MySQL secara langsung, mulai dengan --quick switch , untuk menonaktifkan hasil yang di-cache atau
  • jika Anda menggunakan MyODBC driver, antarmuka pengguna konfigurasi (UI) memiliki tab lanjutan untuk flag. Centang “Hasil jangan di-cache “.

Alat hebat lainnya adalah, MySQL Tuner – skrip berguna yang akan terhubung ke server MySQL yang sedang berjalan dan memberikan saran tentang cara mengkonfigurasinya 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 kinerja MySQL, baca artikel kami:15 Tip Penyesuaian dan Pengoptimalan Kinerja MySQL/MariaDB yang Berguna.

7. MySQL Terus Rusak

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

Anda dapat memeriksa status server untuk mengetahui berapa lama server tersebut 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 namun tidak terbatas pada menghentikan MySQL server dan mengaktifkan debugging, lalu mulai layanan lagi. Anda bisa mencoba membuat test case yang bisa digunakan untuk mengulang soal tersebut. 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 kami telah melihat beberapa MySQL yang umum masalah dan kesalahan dan juga menyediakan cara untuk memecahkan masalah dan menyelesaikannya, hal terpenting dalam mendiagnosis kesalahan adalah memahami apa artinya (dalam kaitannya dengan apa yang menyebabkannya).

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 journetctl (dengan -xe flag) perintah di bawah systemd untuk memeriksa masalahnya.
  3. Anda juga dapat memeriksa file log sistem seperti /var/log/messages atau serupa untuk alasan masalah Anda.
  4. Coba gunakan alat seperti Mytop, pandangan sekilas, atas, 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 beberapa sumber daya penting lainnya.
  5. Dengan asumsi bahwa masalah tersebut adalah proses yang tidak terkendali, Anda selalu dapat mencoba untuk mematikannya (menggunakan utilitas pkill atau kill) agar MySQL bekerja secara normal.
  6. Misalkan mysqld server menyebabkan masalah, Anda dapat menjalankan perintah:mysqladmin -u root ping atau mysqladmin -u root processlist untuk mendapatkan tanggapan apa pun 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 output 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 Memindahkan 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Membuat CRUD Sederhana Menggunakan PHP dan MySQL Dengan Mudah

  2. Bagaimana cara menghindari tanda kutip tunggal di MySQL

  3. MySQL vs MongoDB 1000 dibaca

  4. Menggunakan JDeveloper dengan Database MySQL dan Database Oracle di AWS RDS, Bagian 2

  5. MySQL INSERT IF (pernyataan if khusus)