Son gözden geçirme: Eylül 2026 · mysqlclient (PyMySQL/mysqlclient) ve Django resmi dokümanına göre
Hızlı çözüm
importerror this is mysqldb version hatası, kurulu mysqlclient paketinin Python tarafındaki sürüm bilgisiyle (MySQLdb/release.py) derlenmiş C uzantısının (_mysql) bildirdiği sürümün birbiriyle uyuşmamasından gelir; en sık neden sanal ortamda paketin yarım ya da karışık şekilde yükseltilmiş olmasıdır.
pip show mysqlclient ile doğrulayın._mysql: satırındaki dosya yolunu okuyup çakışan uzantıyı bulun.mysqlclient‘i sanal ortamda temiz olarak kaldırıp yeniden kurun.python3 -c "import MySQLdb; print(MySQLdb.version_info)" ile doğrulayın.| Panel | Yok (SSH / konsol) |
|---|---|
| Sistem | VPS/VDS üzerinde Python + Django |
| Yetki | Proje kullanıcısı (sanal ortam) · sistem paketleri için sudo |
| Narhost ürünü | VPS Sunucu |
Başlamadan önce
venv, virtualenv) kullandığınızı bilin.requirements.txt çıktısını ve sanal ortamı yedekleyin.mysqlclient paketinin kaynak kodunda (MySQLdb/__init__.py) bir kendi kendine tutarlılık denetimi vardır: paket, Python tarafındaki sürüm bilgisini (release.py içindeki version_info) derlenmiş _mysql uzantısının bildirdiği sürümle karşılaştırır; ikisi eşleşmezse ImportError: this is MySQLdb version (…), but _mysql is version (…) fırlatır ve hangi _mysql dosyasının çakıştığını da yazar. Bu, “sürümünüz eski” demek değildir; “kurulumunuz tutarsız” demektir.
En sık üç neden: sanal ortamda pip install --upgrade mysqlclient yarım kalmış ya da önbellekten eski bir derlenmiş uzantı kullanılmıştır; sistem genelinde (apt/sistem pip’i ile) kurulu bir mysqlclient/eski MySQL-python ile sanal ortamdaki farklı sürüm çakışmaktadır; ya da uygulama birden fazla Python sürümü (örnek python3.10 ve python3.12) arasında yanlış olanı çalıştırmaktadır. Bununla karışan ayrı bir hata da vardır: Django’nun kendi asgari sürüm denetimi, mysqlclient 2.2.1’den eskiyse farklı bir istisna (django.core.exceptions.ImproperlyConfigured) ve farklı bir metinle (“mysqlclient 2.2.1 or newer is required”) durur; bu, yukarıdaki ImportError ile aynı köke değil, Django’nun sürüm şartına bağlıdır.
source venv/bin/activate
python3 -c "import MySQLdb; print(MySQLdb.version_info)"
pip show mysqlclient
Beklenen sonuç: pip show çıktısındaki Location satırı, aktif sanal ortamın site-packages yolunu göstermelidir; farklı bir yol görünüyorsa yanlış ortamdasınız demektir.
_mysql: satırını okuyun; orada gösterilen dosya yolu çakışan derlenmiş uzantının tam olarak nerede olduğunu gösterir.
Beklenen sonuç: yol sanal ortamınızın dışındaysa (örnek sistem geneli site-packages) sanal ortamınız izole değildir; --system-site-packages bayrağı olmadan yeniden oluşturun.
mysqlclient‘i sanal ortamda temiz olarak yeniden kurun.
# Ubuntu / Debian
sudo apt-get install python3-dev default-libmysqlclient-dev build-essential pkg-config
pip install --force-reinstall --no-cache-dir mysqlclient
# AlmaLinux / RHEL tabanlı
sudo dnf install python3-devel mysql-devel pkgconfig
pip install --force-reinstall --no-cache-dir mysqlclient
Beklenen sonuç: kurulum hatasız biterse pip show mysqlclient güncel sürümü gösterir; hâlâ eski görünüyorsa önce pip uninstall mysqlclient ile paketi tamamen kaldırıp adımı tekrarlayın.
python3 -c "import MySQLdb; print(MySQLdb.__version__)"
Beklenen sonuç: sürüm 2.2.1 ya da üzeri olmalıdır; düşükse pip install -U mysqlclient ile yükseltin.
mysqlclient‘i derleyemiyorsanız (eksik derleyici, kısıtlı ortam) geçici çözüm PyMySQL‘dür.
pip install PyMySQL
Projenizin ana __init__.py dosyasına ekleyin:
import pymysql
pymysql.install_as_MySQLdb()
Beklenen sonuç: ImportError kalkar ve proje ayağa kalkar; ancak PyMySQL saf Python’dır, mysqlclient‘in C uzantısı kadar hızlı değildir ve tüm MySQLdb davranışını birebir taklit etmez. Bu bir köprüdür, kalıcı çözüm değildir; derleme sorununu çözüp mysqlclient‘e geçmek önerilir.

Sonuç
Django projesinde python manage.py check çalıştırdığınızda ImportError çıkmıyor ve python3 -c "import MySQLdb" hatasız tamamlanıyorsa sorun çözülmüştür.
pip yanlış Python’a bağlı olabilir; pip install yerine python3 -m pip install biçimini kullanın ve doğru python3 ikilisini çağırdığınızı which python3 ile doğrulayın.Narhost desteği
VPS/VDS’te işletim sistemi, panel ve uygulama katmanı (Python, Django, sanal ortam dahil) sizin sorumluluğunuzdadır; Narhost sunucunuzda sizin adınıza komut çalıştırmaz. Talebe şunları ekleyin: işletim sistemi (Ubuntu/AlmaLinux), Python ve mysqlclient sürümü, sanal ortam aracı, tam hata çıktısı.
Sonraki adımlar
Hayır. Paylaşımlı hostingde SSH erişimi ve kendi Python/Django ortamınız yoktur; bu hata yalnızca kendi Python uygulamanızı çalıştırdığınız VPS/VDS’te görülür.
Genellikle sistemde python3-dev/python3-devel, MySQL geliştirme başlıkları ve derleyici eksiktir; 3. adımdaki sistem paketlerini kurup tekrar deneyin.
Teknik olarak çalışır ama önerilmez; performans farkı ve MySQLdb API’sini birebir taklit etmemesi nedeniyle yalnızca mysqlclient‘i doğru kurana kadar geçici bir köprü olarak kullanın.
Bu makale sorununuzu çözdü mü?
Geri bildiriminiz için teşekkürler.
Çözemediniz mi?
Teknik ekibimiz sunucu tarafındaki ayarları sizin için kontrol edebilir. Destek talebinizde alan adınızı ve aldığınız hata metnini paylaşmanız süreci hızlandırır.