Tip Migunani kanggo Ngatasi Masalah Umum ing MySQL


MySQL minangka sistem manajemen basis data relasional sumber terbuka (RDMS) sing akeh digunakake dening Oracle. Wis pirang-pirang taun dadi pilihan standar kanggo aplikasi basis web lan isih tetep populer dibandhingake karo mesin database liyane.

MySQL dirancang lan dioptimalake kanggo aplikasi web - dadi bagean integral saka aplikasi basis web utama kayata Facebook, Twitter, Wikipedia, YouTube, lan liya-liyane.

Apa situs utawa aplikasi web sampeyan didhukung dening MySQL? Ing artikel rinci iki, kita bakal nerangake carane ngatasi masalah lan kesalahan umum ing server database MySQL. Kita bakal njlèntrèhaké cara kanggo nemtokake sabab saka masalah lan apa sing kudu dilakoni kanggo ngatasi.

1. Ora Bisa Nyambung menyang Server MySQL Lokal

Salah sawijining kesalahan sambungan klien menyang server ing MySQL yaiku \ERROR 2002 (HY000): Ora bisa nyambung menyang server MySQL lokal liwat soket '/var/run/mysqld/mysqld.sock' (2).

Kesalahan iki nuduhake yen ora ana server MySQL (mysqld) sing mlaku ing sistem host utawa sampeyan wis nemtokake jeneng berkas soket Unix utawa port TCP/IP sing salah nalika nyoba nyambung menyang server.

Priksa manawa server mlaku kanthi mriksa proses sing jenenge mysqld ing host server database sampeyan nggunakake printah grep bebarengan kaya sing dituduhake.

$ ps xa | grep mysqld | grep -v mysqld

Yen printah ing ndhuwur ora nuduhake output, mula server database ora mlaku. Mulane klien ora bisa nyambung menyang. Kanggo miwiti server, jalanake perintah systemctl ing ngisor iki.

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

Kanggo verifikasi status layanan MySQL, gunakake printah ing ngisor iki.

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

Saka output printah ing ndhuwur, layanan MySQL wis gagal. Ing kasus kaya mengkono, sampeyan bisa nyoba kanggo miwiti maneh lan mriksa status sapisan maneh.

$ sudo systemctl restart mysql
$ sudo systemctl status mysql

Kajaba iku, yen server mlaku kaya sing dituduhake ing printah ing ngisor iki, nanging sampeyan isih bisa ndeleng kesalahan ing ndhuwur, sampeyan uga kudu verifikasi manawa port TCP/IP diblokir dening firewall utawa layanan pamblokiran port.

$ ps xa | grep mysqld | grep -v mysqld

Kanggo printah netstat minangka ditampilake.

$ sudo netstat -tlpn | grep "mysql"

2. Ora Bisa Nyambung menyang Server MySQL

Kesalahan sambungan liyane sing umum ditemoni yaiku \(2003) Ora bisa nyambung menyang server MySQL ing 'server' (10061), tegese sambungan jaringan wis ditolak.

Ing kene, miwiti kanthi mriksa manawa ana server MySQL sing mlaku ing sistem kaya sing ditampilake ing ndhuwur. Uga priksa manawa server wis ngaktifake sambungan jaringan lan port jaringan sing sampeyan gunakake kanggo nyambungake yaiku sing dikonfigurasi ing server.

Kesalahan umum liyane sing bakal sampeyan nemoni nalika nyoba nyambung menyang server MySQL yaiku:

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 kasebut nuduhake yen server bisa mlaku, nanging sampeyan nyoba nyambungake nggunakake port TCP/IP, pipa sing dijenengi, utawa file soket Unix sing beda karo sing dirungokake server.

3. Akses Ditolak Kasalahan ing MySQL

Ing MySQL, akun panganggo ditetepake kanthi jeneng panganggo lan host klien utawa host sing pangguna bisa nyambung menyang server. Kajaba iku, akun bisa uga duwe kredensial otentikasi kayata sandhi.

Sanajan ana macem-macem panyebab kesalahan \Akses ditolak, salah sawijining panyebab umum yaiku ana hubungane karo akun MySQL sing diidinake server kanggo digunakake dening program klien nalika nyambungake. Iki nuduhake jeneng pangguna sing ditemtokake ing sambungan kasebut ora duwe hak istimewa kanggo ngakses. database kasebut.

MySQL ngidini nggawe akun sing ngidini pangguna klien nyambung menyang server lan ngakses data sing dikelola dening server. Ing babagan iki, yen sampeyan nemoni kesalahan sing ditolak akses, priksa manawa akun pangguna diijini nyambung menyang server liwat program klien sing sampeyan gunakake, lan bisa uga host sing asale saka sambungan kasebut.

Sampeyan bisa ndeleng hak istimewa apa sing diduweni akun kanthi mbukak printah SHOW GRANTS kaya sing dituduhake.

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

Sampeyan bisa menehi hak istimewa kanggo pangguna tartamtu ing basis data tartamtu menyang alamat ip remot nggunakake printah ing ngisor iki ing cangkang MySQL.

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

Salajengipun, akses rek kesalahan uga bisa kasil saka masalah karo nyambungake menyang MySQL, deleng kesalahan sadurunge diterangake.

4. Ilang Sambungan kanggo MySQL Server

Sampeyan bisa uga nemoni kesalahan iki amarga salah sawijining alasan ing ngisor iki: konektivitas jaringan sing ora apik, wektu entek sambungan utawa masalah karo nilai BLOB sing luwih gedhe tinimbang max_allowed_packet. Yen ana masalah sambungan jaringan, priksa manawa sampeyan duwe sambungan jaringan sing apik utamane yen sampeyan ngakses server database remot.

Yen masalah wektu entek sambungan, utamane nalika MySQL nyoba nggunakake sambungan awal menyang server, tambahake nilai parameter connect_timeout. Nanging yen ana nilai BLOB sing luwih gedhe tinimbang max_allowed_packet, sampeyan kudu nyetel nilai sing luwih dhuwur kanggo max_allowed_packet ing file konfigurasi /etc/my.cnf ing [mysqld] utawa [client] bagean kaya sing dituduhake.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Yen file konfigurasi MySQL ora bisa diakses kanggo sampeyan, sampeyan bisa nyetel nilai iki nggunakake printah ing ngisor iki ing cangkang MySQL.

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

5. Kakehan Sambungan MySQL

Yen klien MySQL nemoni kesalahan \kakehan sambungan, tegese kabeh sambungan sing kasedhiya digunakake dening klien liyane. Jumlah sambungan (standar yaiku 151) dikontrol dening sistem max_connections variabel; sampeyan bisa ngatasi masalah kanthi nambah regane kanggo ngidini luwih akeh sambungan ing file konfigurasi /etc/my.cnf.

[mysqld]
max_connections=1000

6. Memori MySQL metu saka

Yen sampeyan mbukak pitakon nggunakake program klien MySQL lan nemoni kesalahan sing dimaksud, tegese MySQL ora duwe memori sing cukup kanggo nyimpen kabeh asil pitakon.

Langkah pisanan yaiku kanggo mesthekake yen pitakon kasebut bener, yen bener, banjur tindakake ing ngisor iki:

  • Yen sampeyan nggunakake klien MySQL langsung, miwiti nganggo --switch cepet, kanggo mateni asil cache utawa
  • yen sampeyan nggunakake driver MyODBC, antarmuka panganggo konfigurasi (UI) duwe tab maju kanggo panji. Priksa Aja asil cache.

Alat liyane sing apik yaiku, MySQL Tuner - skrip migunani sing bakal nyambung menyang server MySQL sing mlaku lan menehi saran babagan carane bisa dikonfigurasi kanggo kinerja sing luwih dhuwur.

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

Kanggo tips optimasi MySQL lan tuning kinerja, waca artikel kita: 15 Migunani MySQL/MariaDB Performance Tuning lan Tips Optimization.

7. MySQL Terus Nabrak

Yen sampeyan nemoni masalah iki, sampeyan kudu nyoba ngerteni apa masalahe yaiku server MySQL mati utawa apa klien duwe masalah. Elinga yen akeh kacilakan server disebabake file data utawa file indeks sing rusak.

Sampeyan bisa mriksa status server kanggo netepake suwene iku wis munggah lan mlaku.

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

Utawa, jalanake perintah mysqladmin ing ngisor iki kanggo nemokake wektu aktif server MySQL.

$ sudo mysqladmin version -p 

Solusi liyane kalebu nanging ora winates kanggo mungkasi server MySQL lan ngaktifake debugging, banjur miwiti layanan maneh. Sampeyan bisa nyoba nggawe test case sing bisa digunakake kanggo mbaleni masalah. Kajaba iku, bukak jendhela terminal tambahan lan jalanake printah ing ngisor iki kanggo nampilake statistik proses MySQL nalika sampeyan mbukak pitakon liyane:

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

Sanajan kita wis ndeleng sawetara masalah lan kesalahan MySQL sing umum lan uga nyedhiyakake cara kanggo ngatasi masalah lan ngatasi masalah kasebut, sing paling penting kanggo diagnosa kesalahan yaiku ngerteni apa tegese (ing babagan apa sing nyebabake).

Dadi carane sampeyan bisa nemtokake iki? Poin-poin ing ngisor iki bakal nuntun sampeyan carane nemtokake apa sing nyebabake masalah:

  1. Langkah pisanan lan paling penting yaiku mriksa log MySQL sing disimpen ing direktori /var/log/mysql/. Sampeyan bisa nggunakake utilitas baris perintah kayata buntut kanggo maca file log.
  2. Yen layanan MySQL gagal diwiwiti, priksa statuse nggunakake systemctl utawa gunakake journetctl (kanthi prentah -xe) ing systemd kanggo mriksa masalah kasebut.
  3. Sampeyan uga bisa mriksa file log sistem kayata /var/log/messages utawa sing padha kanggo alasan masalah sampeyan.
  4. Coba gunakake alat kayata htop kanggo mriksa program endi sing njupuk kabeh CPU utawa ngunci mesin utawa mriksa apa sampeyan kehabisan memori, ruang disk, deskriptor file, utawa sumber daya penting liyane.
  5. Nganggep masalah iki minangka proses sing kabur, sampeyan bisa nyoba mateni (nganggo sarana pkill utawa kill) supaya MySQL bisa mlaku kanthi normal.
  6. Yen server mysqld nyebabake masalah, sampeyan bisa mbukak printah: mysqladmin -u root ping utawa mysqladmin -u root processlist kanggo entuk respon apa wae.
  7. Yen masalahe ana ing program klien sampeyan nalika nyoba nyambung menyang server MySQL, priksa manawa ora bisa digunakake kanthi becik, coba goleki output apa wae kanggo ngatasi masalah.

Sampeyan bisa uga seneng maca artikel sing gegandhengan karo MySQL ing ngisor iki:

  1. Sinau MySQL/MariaDB kanggo Pamula – Bagean 1
  2. Carane Ngawasi Database MySQL/MariaDB nggunakake Netdata ing CentOS 7
  3. Carane Transfer Kabeh Database MySQL Saka Server Lawas menyang Server Anyar
  4. Mytop – Alat Migunani kanggo Ngawasi Kinerja MySQL/MariaDB ing Linux
  5. 12 Praktik Paling Apik Keamanan MySQL/MariaDB kanggo Linux

Kanggo informasi luwih lengkap, bukak manual Referensi MySQL babagan Masalah lan Kesalahan Umum, kanthi lengkap nampilake masalah umum lan pesen kesalahan sing bisa sampeyan temoni nalika nggunakake MySQL, kalebu sing wis dibahas ing ndhuwur lan liya-liyane.