Petua berguna untuk menyelesaikan masalah kesilapan biasa di mysql

Petua berguna untuk menyelesaikan masalah kesilapan biasa di mysql

Mysql adalah sistem pengurusan pangkalan data relasi sumber terbuka yang digunakan secara meluas (Rdms) dimiliki oleh Oracle. Ia telah bertahun-tahun menjadi pilihan lalai untuk aplikasi berasaskan web dan masih tetap popular berbanding dengan enjin pangkalan data lain.

Baca juga: Cara Memasang MySQL Terkini di Rhel/Centos dan Fedora

Mysql direka dan dioptimumkan untuk aplikasi web - ia membentuk sebahagian daripada aplikasi berasaskan web utama seperti Facebook, Twitter, Wikipedia, Youtube, dan banyak lagi.

Adakah laman web atau aplikasi web anda dikuasakan oleh Mysql? Dalam artikel terperinci ini, kami akan menerangkan cara menyelesaikan masalah dan kesilapan biasa Mysql pelayan pangkalan data. Kami akan menerangkan bagaimana untuk menentukan punca masalah dan apa yang perlu dilakukan untuk menyelesaikannya.

1. Tidak dapat menyambung ke pelayan mysql tempatan

Salah satu kesilapan sambungan pelanggan kepada pelayan di MySQL ialah "Ralat 2002 (HY000): Tidak dapat menyambung ke pelayan MySQL tempatan melalui soket '/var/run/mysqld/mysqld.kaus kaki '(2)".

Tidak dapat menyambung ke pelayan mysql tempatan

Ralat ini menunjukkan bahawa tidak ada Mysql pelayan (mysqld) berjalan di sistem tuan rumah atau anda telah menetapkan nama fail soket unix yang salah atau TCP/IP pelabuhan semasa cuba menyambung ke pelayan.

Pastikan pelayan berjalan dengan memeriksa proses yang dinamakan mysqld Pada hos pelayan pangkalan data anda menggunakan perintah ps dan perintah grep bersama -sama seperti yang ditunjukkan.

$ ps xa | Grep Mysqld | grep -v mysqld 

Sekiranya arahan di atas tidak menunjukkan output, maka pelayan pangkalan data tidak berjalan. Oleh itu pelanggan tidak dapat menyambungnya. Untuk memulakan pelayan, jalankan arahan SystemCtl berikut.

$ sudo Systemctl Mula Mysql #Debian/Ubuntu $ Sudo Systemctl Mula Mysqld #Rhel/Centos/Fedora 

Untuk mengesahkan Mysql status perkhidmatan, gunakan arahan berikut.

$ sudo systemctl status mysql #debian/ubuntu $ sudo status status mysqld #rhel/centos/fedora 
Semak status MySQL

Dari output arahan di atas, Mysql Perkhidmatan telah gagal. Dalam kes sedemikian, anda boleh cuba memulakannya semula dan periksa statusnya sekali lagi.

$ sudo Systemctl Restart Mysql $ Sudo Systemctl Status MySQL 
Mulakan semula mysql dan sahkan status

Di samping itu, jika pelayan berjalan seperti yang ditunjukkan oleh arahan berikut, tetapi anda masih melihat ralat di atas, anda juga harus mengesahkan bahawa TCP/IP pelabuhan disekat oleh firewall atau mana -mana perkhidmatan menyekat pelabuhan.

$ ps xa | Grep Mysqld | grep -v mysqld 

Untuk mencari port pelayan sedang mendengar, gunakan perintah Netstat seperti yang ditunjukkan.

$ sudo netstat -tlpn | grep "mysql" 

2. Tidak dapat menyambung ke pelayan mysql

Satu lagi ralat sambungan yang biasa ditemui ialah "(2003) tidak dapat menyambung ke pelayan MySQL pada 'pelayan' (10061)", Yang bermaksud bahawa sambungan rangkaian telah ditolak.

Di sini, mulakan dengan memeriksa bahawa ada Mysql pelayan berjalan pada sistem seperti yang ditunjukkan di atas. Pastikan pelayan mempunyai sambungan rangkaian yang diaktifkan dan port rangkaian yang anda gunakan untuk menyambung adalah yang dikonfigurasikan pada pelayan.

Kesalahan biasa lain yang mungkin anda hadapi apabila anda cuba menyambung ke pelayan MySQL adalah:

Ralat 2003: Tidak dapat menyambung ke Server MySQL pada 'Host_name' (111) Ralat 2002: Tidak dapat menyambung ke pelayan MySQL tempatan melalui soket '/tmp/mysql.Sock '(111) 

Kesalahan ini menunjukkan bahawa pelayan mungkin berjalan, namun, anda cuba menyambung dengan menggunakan TCP/IP port, bernama paip, atau fail soket unix berbeza dari yang mana pelayan sedang mendengar.

3. Akses Kesalahan Ditolak di MySQL

Dalam Mysql, akaun pengguna ditakrifkan dari segi a nama pengguna dan tuan rumah pelanggan atau tuan rumah dari mana pengguna boleh menyambung ke pelayan. Di samping itu, akaun juga mungkin mempunyai kelayakan pengesahan seperti kata laluan.

Walaupun terdapat banyak sebab yang berbeza "Akses dinafikan"Kesalahan, salah satu sebab umum berkaitan dengan akaun MySQL yang pelayan membenarkan program klien digunakan semasa menyambung. Ia menunjukkan bahawa nama pengguna yang ditentukan dalam sambungan tidak mempunyai keistimewaan untuk mengakses pangkalan data.

MySQL membolehkan penciptaan akaun yang membolehkan pengguna klien menyambung ke pelayan dan data akses yang diuruskan oleh pelayan. Dalam hal ini, jika anda menghadapi Akses ralat yang ditolak, periksa sama ada akaun pengguna dibenarkan menyambung ke pelayan melalui program klien yang anda gunakan, dan mungkin tuan rumah dari mana sambungannya datang dari.

Anda dapat melihat keistimewaan apa yang dimiliki oleh akaun yang diberikan dengan menjalankan Tunjukkan geran arahan seperti yang ditunjukkan.

> Tunjukkan geran untuk 'tecmint'@'localhost'; 

Anda boleh memberikan keistimewaan kepada pengguna tertentu pada pangkalan data tertentu ke alamat IP jauh menggunakan arahan berikut dalam shell mysql.

> Beri semua keistimewaan di *.test_db ke 'tecmint'@'192.168.0.100 '; > Keistimewaan siram; 

Tambahan pula, Akses kesilapan yang ditolak juga boleh mengakibatkan masalah dengan menyambung ke mysql, merujuk kepada kesilapan yang dijelaskan sebelumnya.

4. Hilang sambungan ke pelayan mysql

Anda mungkin menghadapi ralat ini kerana salah satu sebab berikut: sambungan rangkaian yang lemah, masa sambungan telah tamat atau masalah dengan gumpalan nilai yang lebih besar daripada max_allowed_packet. Sekiranya masalah sambungan rangkaian, pastikan anda mempunyai sambungan rangkaian yang baik terutamanya jika anda mengakses pelayan pangkalan data jauh.

Sekiranya ia adalah masa sambungan telah tamat masalah, terutamanya ketika Mysql cuba menggunakan sambungan awal ke pelayan, meningkatkan nilai connect_timeout parameter. Tetapi sekiranya berlaku Nilai gumpalan yang lebih besar daripada max_allowed_packet, anda perlu menetapkan nilai yang lebih tinggi untuk max_allowed_packet di dalam anda /etc/my.cnf fail konfigurasi di bawah [mysqld] atau [Pelanggan] seksyen seperti yang ditunjukkan.

[mysqld] connect_timeout = 100 max_allowed_packet = 500m 

Jika Mysql Fail konfigurasi tidak dapat diakses untuk anda, maka anda boleh menetapkan nilai ini menggunakan arahan berikut dalam shell mysql.

> Tetapkan Global Connect_Timeout = 100; > Tetapkan global max_allowed_packet = 524288000; 

5. Terlalu banyak sambungan mysql

Dalam kes a Mysql Pelanggan menemui "Terlalu banyak sambungan"Ralat, ini bermaksud bahawa semua sambungan yang ada digunakan oleh pelanggan lain. Bilangan sambungan (lalai adalah 151) dikawal oleh max_connections pembolehubah sistem; Anda boleh memperbaiki masalah dengan meningkatkan nilainya untuk membenarkan lebih banyak sambungan di anda /etc/my.cnf fail konfigurasi.

[mysqld] max_connections = 1000 

6. Keluar dari ingatan mysql

Sekiranya anda menjalankan pertanyaan menggunakan Mysql program pelanggan dan menghadapi ralat yang dipersoalkan, ini bermakna MySQL tidak mempunyai memori yang cukup untuk menyimpan keseluruhan hasil pertanyaan.

Langkah pertama adalah untuk memastikan bahawa pertanyaan adalah betul, jika ia, maka lakukan yang berikut:

  • Sekiranya anda menggunakan klien mysql secara langsung, mulakannya dengan --suis cepat, untuk melumpuhkan hasil cache atau
  • Sekiranya anda menggunakan MyoDBC Pemandu, Antara Muka Pengguna Konfigurasi (UI) mempunyai tab lanjutan untuk bendera. Periksa "Jangan hasil cache".

Satu lagi alat hebat adalah, Penala mysql - Skrip berguna yang akan menyambung ke pelayan MySQL yang menjalankan dan memberi cadangan bagaimana ia dapat dikonfigurasikan untuk prestasi yang lebih tinggi.

$ sudo apt-get Install mysqltuner #debian/ubuntu $ sudo yum install mysqltuner #rhel/centos/fedora $ mysqltuner 

Untuk pengoptimuman MySQL dan petua penalaan prestasi, baca artikel kami: 15 berguna MySQL/MariaDB Penalaan Prestasi dan Pengoptimuman.

7. MySQL terus terhempas

Sekiranya anda menghadapi masalah ini, anda harus cuba mengetahui sama ada masalahnya adalah Mysql pelayan mati atau sama ada pelanggan dengan masalah. Perhatikan bahawa banyak kemalangan pelayan disebabkan oleh fail data yang rosak atau fail indeks.

Anda boleh menyemak status pelayan untuk menentukan berapa lama ia telah berjalan dan berjalan.

$ sudo systemctl status mysql #debian/ubuntu $ sudo status status mysqld #rhel/centos/fedora 

Sebagai alternatif, jalankan arahan MySQLadmin berikut untuk mencari uptime of MySQL Server.

$ sudo versi mysqladmin -p 
Cari uptime pelayan mysql

Penyelesaian lain termasuk tetapi tidak terhad untuk menghentikan Mysql pelayan dan membolehkan debugging, kemudian mulakan perkhidmatan lagi. Anda boleh cuba membuat kes ujian yang boleh digunakan untuk mengulangi masalahnya. Di samping itu, buka tetingkap terminal tambahan dan jalankan arahan berikut untuk memaparkan statistik proses MySQL semasa anda menjalankan pertanyaan anda yang lain:

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

Intinya: menentukan apa yang menyebabkan masalah atau kesilapan

Walaupun kita telah melihat beberapa perkara biasa Mysql Masalah dan kesilapan dan juga menyediakan cara untuk menyelesaikan masalah dan menyelesaikannya, perkara yang paling penting dengan mendiagnosis kesilapan adalah memahami apa maksudnya (dari segi apa yang menyebabkannya).

Jadi bagaimana anda boleh menentukan ini? Mata berikut akan membimbing anda bagaimana untuk menentukan apa yang menyebabkan masalah:

  1. Langkah pertama dan paling penting ialah melihat log mysql yang disimpan dalam direktori /var/log/mysql/. Anda boleh menggunakan utiliti baris arahan seperti ekor untuk membaca fail log.
  2. Sekiranya perkhidmatan MySQL gagal bermula, periksa statusnya menggunakan SystemCTL atau gunakan Journetctl (dengan -xe bendera) perintah di bawah sistem untuk memeriksa masalah.
  3. Anda juga boleh memeriksa fail log sistem seperti /var/log/mesej atau serupa dengan alasan masalah anda.
  4. Cuba gunakan alat seperti mytop, glance, atas, ps, atau htop untuk memeriksa program mana yang mengambil semua CPU atau mengunci mesin atau untuk memeriksa sama ada anda kehabisan memori, ruang cakera, deskriptor fail, atau sumber penting lain.
  5. Dengan mengandaikan bahawa masalah itu adalah proses pelarian, anda sentiasa boleh cuba membunuhnya (menggunakan pkill atau membunuh utiliti) sehingga mysql berfungsi normal.
  6. Menganggap bahawa mysqld Pelayan menimbulkan masalah, anda boleh menjalankan arahan: mysqladmin -u ping root atau mysqladmin -u Root ProcessList untuk mendapatkan jawapan daripadanya.
  7. Sekiranya masalahnya adalah dengan program klien anda semasa cuba menyambung ke pelayan MySQL, periksa mengapa ia tidak berfungsi dengan baik, cuba dapatkan output daripadanya untuk tujuan penyelesaian masalah.

Anda juga mungkin ingin membaca artikel berkaitan MySQL berikut:

  1. Ketahui Mysql / MariaDB untuk Pemula - Bahagian 1
  2. Cara Memantau Pangkalan Data MySQL/MariaDB Menggunakan NetData pada CentOS 7
  3. Cara memindahkan semua pangkalan data MySQL dari lama ke pelayan baru
  4. MYTOP - Alat yang berguna untuk memantau prestasi MySQL/MariaDB di Linux
  5. 12 MySQL/MariaDB Amalan Terbaik untuk Linux

Untuk maklumat lanjut, rujuk manual rujukan MySQL mengenai masalah dan kesilapan umum, ia secara komprehensif menyenaraikan masalah umum dan mesej ralat yang mungkin anda hadapi semasa menggunakan MySQL, termasuk yang telah kami bincangkan di atas.