MySQL'de Yaygın Hataları Gidermek İçin Yararlı İpuçları


MySQL, Oracle'a ait, yaygın olarak kullanılan, açık kaynaklı bir ilişkisel veritabanı yönetim sistemidir (RDMS). Yıllar boyunca web tabanlı uygulamalar için varsayılan seçim olmuştur ve diğer veritabanı motorlarıyla karşılaştırıldığında hala popülerliğini korumaktadır.

Ayrıca Okuyun: En Son MySQL'i RHEL/CentOS ve Fedora'ya Yükleme

MySQL web uygulamaları için tasarlanmış ve optimize edilmiştir; Facebook, Twitter, gibi başlıca web tabanlı uygulamaların ayrılmaz bir parçasını oluşturur. Wikipedia, YouTube ve diğerleri.

Siteniz veya web uygulamanız MySQL tarafından destekleniyor mu? Bu ayrıntılı makalede, MySQL veritabanı sunucusundaki sorunların ve yaygın hataların nasıl giderileceğini açıklayacağız. Sorunların nedenlerinin nasıl tespit edileceğini ve bunların çözümü için neler yapılması gerektiğini anlatacağız.

1. Yerel MySQL Sunucusuna Bağlanılamıyor

MySQL'de istemciden sunucuya bağlantı hatalarından biri "HATA 2002 (HY000): '/var/run/mysqld/mysqld.sock' (2) soketi aracılığıyla yerel MySQL sunucusuna bağlanılamıyor" ”.

Bu hata, ana sistemde çalışan bir MySQL sunucusu (mysqld) olmadığını veya yanlış bir Unix soket dosyası adı veya TCP/IP< belirttiğinizi gösterir. Sunucuya bağlanmaya çalışırken bağlantı noktası.

Gösterildiği gibi ps komutunu ve grep komutunu birlikte kullanarak veritabanı sunucusu ana makinenizde mysqld adlı işlemi kontrol ederek sunucunun çalıştığından emin olun.

ps xa | grep mysqld | grep -v mysqld

Yukarıdaki komutlar çıktı göstermiyorsa veritabanı sunucusu çalışmıyor demektir. Bu nedenle istemci ona bağlanamıyor. Sunucuyu başlatmak için aşağıdaki systemctl komutunu çalıştırın.

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

MySQL hizmet durumunu doğrulamak için aşağıdaki komutu kullanın.

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

Yukarıdaki komutun çıktısına göre MySQL hizmeti başarısız oldu. Böyle bir durumda yeniden başlatmayı deneyebilir ve durumunu bir kez daha kontrol edebilirsiniz.

sudo systemctl restart mysql
sudo systemctl status mysql

Ayrıca, sunucu aşağıdaki komutta gösterildiği gibi çalışıyorsa ancak yine de yukarıdaki hatayı görüyorsanız, TCP/IP bağlantı noktasının bir güvenlik duvarı veya herhangi bir bağlantı noktası engelleme hizmeti tarafından engellendiğini de doğrulamanız gerekir. .

ps xa | grep mysqld | grep -v mysqld

Sunucunun dinlediği bağlantı noktasını bulmak için gösterildiği gibi netstat komutunu kullanın.

sudo netstat -tlpn | grep "mysql"

2. MySQL Sunucusuna Bağlanılamıyor

Yaygın olarak karşılaşılan bir diğer bağlantı hatası ise "(2003) 'sunucu'daki MySQL sunucusuna bağlanılamıyor (10061)", bu da ağ bağlantısının reddedildiği anlamına gelir.

Burada, yukarıda gösterildiği gibi sistemde çalışan bir MySQL sunucusunun olup olmadığını kontrol ederek başlayın. Ayrıca sunucuda ağ bağlantılarının etkinleştirildiğinden ve bağlanmak için kullandığınız ağ bağlantı noktasının sunucuda yapılandırılan bağlantı noktası olduğundan emin olun.

MySQL sunucusuna bağlanmaya çalıştığınızda karşılaşabileceğiniz diğer yaygın hatalar şunlardır:

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)

Bu hatalar sunucunun çalışıyor olabileceğini ancak sunucunun dinlediğinden farklı bir TCP/IP bağlantı noktası, adı verilen kanal veya Unix soket dosyası kullanarak bağlanmaya çalıştığınızı gösterir.

3. MySQL'de Erişim Reddedildi Hataları

MySQL'de kullanıcı hesabı, kullanıcı adı ve kullanıcının sunucuya bağlanabileceği istemci ana bilgisayarı veya ana bilgisayarları cinsinden tanımlanır. Ayrıca bir hesapta parola gibi kimlik doğrulama bilgileri de bulunabilir.

"Erişim reddedildi" hatalarının pek çok farklı nedeni olsa da, yaygın nedenlerden biri, sunucunun istemci programlarının bağlanırken kullanmasına izin verdiği MySQL hesaplarıyla ilgilidir. Bağlantıda belirtilen kullanıcı adının veritabanına erişim ayrıcalıklarına sahip olmadığını belirtir.

MySQL, istemci kullanıcılarının sunucuya bağlanmasını ve sunucu tarafından yönetilen verilere erişmesini sağlayan hesapların oluşturulmasına olanak tanır. Bu bağlamda, erişim reddedildi hatasıyla karşılaşırsanız, kullanıcı hesabının, kullandığınız istemci programı ve muhtemelen bağlantının geldiği ana bilgisayar aracılığıyla sunucuya bağlanmasına izin verilip verilmediğini kontrol edin. .

Gösterildiği gibi SHOW GRANTS komutunu çalıştırarak belirli bir hesabın hangi ayrıcalıklara sahip olduğunu görebilirsiniz.

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

MySQL kabuğundaki aşağıdaki komutları kullanarak belirli bir kullanıcıya, uzak ip adresine belirli bir veritabanında ayrıcalıklar verebilirsiniz.

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

Ayrıca, erişim reddedildi hataları MySQL'e bağlanma sorunlarından da kaynaklanabilir; daha önce açıklanan hatalara bakın.

4. MySQL Sunucusuna Bağlantı Kesildi

Bu hatayla şu nedenlerden birinden dolayı karşılaşabilirsiniz: zayıf ağ bağlantısı, bağlantı zaman aşımı veya BLOB değerlerinde şundan büyük bir sorun: max_allowed_packet. Ağ bağlantısı sorunu olması durumunda, özellikle uzak bir veritabanı sunucusuna erişiyorsanız, iyi bir ağ bağlantınızın olduğundan emin olun.

Bu bir bağlantı zaman aşımı sorunuysa, özellikle MySQL sunucuyla ilk bağlantıyı kullanmaya çalışırken connect_timeout parametresinin değerini artırın . Ancak max_allowed_packet'ten büyük BLOB değerleri olması durumunda, /etc dosyanızda max_allowed_packet için daha yüksek bir değer ayarlamanız gerekir. /my.cnf yapılandırma dosyasını gösterildiği gibi [mysqld] veya [client] bölümünün altına yerleştirin.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

MySQL yapılandırma dosyasına erişemiyorsanız, MySQL kabuğundaki aşağıdaki komutu kullanarak bu değeri ayarlayabilirsiniz.

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

5. Çok Fazla MySQL Bağlantısı

Bir MySQL istemcisinin "çok fazla bağlantı" hatasıyla karşılaşması, mevcut tüm bağlantıların diğer istemciler tarafından kullanıldığı anlamına gelir. Bağlantı sayısı (varsayılan 151'dir) max_connections sistem değişkeni tarafından kontrol edilir; /etc/my.cnf yapılandırma dosyanızda daha fazla bağlantıya izin vermek için değerini artırarak sorunu çözebilirsiniz.

[mysqld]
max_connections=1000

6. Bellek Yetersiz MySQL

MySQL istemci programını kullanarak bir sorgu çalıştırdığınızda söz konusu hatayla karşılaşmanız, MySQL'in sorgu sonucunun tamamını saklayacak yeterli belleğe sahip olmadığı anlamına gelir.

İlk adım, sorgunun doğru olduğundan emin olmaktır; eğer öyleyse, ardından aşağıdakileri yapın:

  • MySQL istemcisini doğrudan kullanıyorsanız, önbelleğe alınmış sonuçları devre dışı bırakmak için --quick switch ile başlatın veya
  • MyODBC sürücüsünü kullanıyorsanız, yapılandırma kullanıcı arayüzünde (UI) işaretler için gelişmiş bir sekme bulunur. "Sonucu önbelleğe alma" seçeneğini işaretleyin.

Bir başka harika araç da, çalışan bir MySQL sunucusuna bağlanacak ve daha yüksek performans için nasıl yapılandırılabileceğine dair öneriler veren kullanışlı bir komut dosyası olan MySQL Tuner'dır.

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

MySQL optimizasyonu ve performans ayarlama ipuçları için şu makalemizi okuyun: 15 Faydalı MySQL/MariaDB Performans Ayarlama ve Optimizasyon İpuçları.

7. MySQL Sürekli Çöküyor

Bu sorunla karşılaşırsanız, sorunun MySQL sunucusunun ölmesinden mi yoksa sorun yaşayan istemciden mi kaynaklandığını bulmaya çalışmalısınız. Birçok sunucu çökmesinin bozuk veri dosyalarından veya dizin dosyalarından kaynaklandığını unutmayın.

Ne kadar süredir çalışır durumda olduğunu belirlemek için sunucu durumunu kontrol edebilirsiniz.

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

Alternatif olarak, MySQL sunucusunun çalışma süresini bulmak için aşağıdaki mysqladmin komutunu çalıştırın.

sudo mysqladmin version -p 

Diğer çözümler arasında, bunlarla sınırlı olmamak üzere, MySQL sunucusunun durdurulması ve hata ayıklamanın etkinleştirilmesi ve ardından hizmetin yeniden başlatılması yer alır. Sorunu tekrarlamak için kullanılabilecek bir test senaryosu oluşturmayı deneyebilirsiniz. Ek olarak, ek bir terminal penceresi açın ve diğer sorgularınızı çalıştırırken MySQL işlem istatistiklerini görüntülemek için aşağıdaki komutu çalıştırın:

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

Özet: Soruna veya Hataya Neyin Sebep Olduğunu Belirlemek

Bazı yaygın MySQL sorunlarına ve hatalarına bakmış ve bunları gidermenin ve çözmenin yollarını sunmuş olsak da, bir hatayı teşhis etmedeki en önemli şey, bunun ne anlama geldiğini (buna neden olan şey açısından) anlamaktır. .

Peki bunu nasıl belirleyebilirsiniz? Aşağıdaki noktalar, soruna tam olarak neyin sebep olduğunu nasıl belirleyeceğiniz konusunda size yol gösterecektir:

  1. İlk ve en önemli adım /var/log/mysql/ dizininde saklanan MySQL günlüklerine bakmaktır. Günlük dosyalarını okumak için tail gibi komut satırı yardımcı programlarını kullanabilirsiniz.
  2. MySQL hizmeti başlatılamazsa, systemctl kullanarak durumunu kontrol edin veya sorunu incelemek için systemd altındaki journetctl komutunu (-xe bayrağıyla birlikte) kullanın.
  3. Sorununuzun nedenlerine ilişkin olarak /var/log/messages veya benzeri sistem log dosyasını da inceleyebilirsiniz.
  4. Hangi programın tüm CPU'yu aldığını veya makineyi kilitlediğini kontrol etmek veya belleğinizin, disk alanınızın, dosya tanımlayıcılarınızın veya başka bir önemli kaynağınızın tükenip bitmediğini kontrol etmek için Mytop, bakışlar, top, ps veya htop gibi araçları kullanmayı deneyin. .
  5. Sorunun kontrolden çıkmış bir süreç olduğunu varsayarsak, MySQL'in normal şekilde çalışması için her zaman onu öldürmeyi deneyebilirsiniz (pkill veya kill yardımcı programını kullanarak).
  6. mysqld sunucusunun sorunlara neden olduğunu varsayarsak, şu komutu çalıştırabilirsiniz: mysqladmin -u root ping veya mysqladmin -u rootprocesslist herhangi bir soruna neden olur ondan gelen yanıt.
  7. MySQL sunucusuna bağlanmaya çalışırken sorun istemci programınızdaysa, neden düzgün çalışmadığını kontrol edin ve sorun giderme amacıyla ondan herhangi bir çıktı almayı deneyin.

Ayrıca aşağıdaki MySQL ile ilgili makaleleri de okumak isteyebilirsiniz:

  1. Yeni Başlayanlar İçin MySQL/MariaDB'yi Öğrenin – Bölüm 1
  2. CentOS 7'de Netdata Kullanılarak MySQL/MariaDB Veritabanları Nasıl İzlenir
  3. Tüm MySQL Veritabanlarını Eski Sunucudan Yeni Sunucuya Nasıl Aktarırım?
  4. Mytop – Linux'ta MySQL/MariaDB Performansını İzlemek için Yararlı Bir Araç
  5. Linux için 12 MySQL/MariaDB Güvenliği En İyi Uygulamaları

Daha fazla bilgi için Sorunlar ve Yaygın Hatalar ile ilgili MySQL Referans kılavuzuna bakın. Bu kılavuz, MySQL'i kullanırken karşılaşabileceğiniz genel sorunları ve hata mesajlarını, yukarıda tartıştıklarımız ve daha fazlasını da içerecek şekilde kapsamlı bir şekilde listeler.