15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın
09.10.2024

MySQL Veritabanı Nasıl Silinir: CLI, phpMyAdmin ve cPanel Yöntemleri

Bir MySQL veritabanını silmek, içindeki tüm tabloları, saklı prosedürleri, görünümleri, tetikleyicileri ve verileri kalıcı olarak kaldırır. İşlem, SQL DROP DATABASE ifadesiyle gerçekleştirilir ve motor düzeyinde geri alınamaz — komut tamamlandıktan sonra yerleşik bir geri alma mekanizması mevcut değildir.

Aşağıdaki yöntemlerden herhangi birine geçmeden önce, hedef veritabanında DROP ayrıcalığına veya global olarak SUPER ayrıcalığına sahip olmanız gerekir. Bu olmadan MySQL, ERROR 1044 (42000): Access denied döndürür. Ortamınızı bir VPS Hosting planında yönetiyorsanız, genellikle tam root düzeyinde MySQL erişiminiz olur ve ayrıcalıkları serbestçe verebilir veya iptal edebilirsiniz.

Ön Koşullar: Bir Veritabanını Silmeden Önce Yapmanız Gerekenler

Hazırlığı atlamak, felaket niteliğinde ve kurtarılamaz veri kaybının en yaygın tek nedenidir. Bu adımları isteğe bağlı değil, zorunlu olarak değerlendirin.

1. Doğrulanmış bir yedek oluşturun

Tüm veritabanını sıkıştırılmış bir SQL dosyasına aktarmak için mysqldump kullanın:

mysqldump -u username -p --single-transaction --routines --triggers database_name | gzip > /backups/database_name_$(date +%F).sql.gz

Temel bayrakların açıklaması:

  • --single-transaction — InnoDB tablolarını kilitlemeden tutarlı bir anlık görüntü alır
  • --routines — saklı prosedürleri ve fonksiyonları dışa aktarır
  • --triggers — tetikleyici tanımlarını dışa aktarır
  • $(date +%F) — dosya adına otomatik olarak geçerli tarihi ekler

Dökümden sonra, arşivin sıfır bayt olmadığını ve sıkıştırmasının açılabildiğini doğrulayın:

gzip -t /backups/database_name_$(date +%F).sql.gz && echo "Archive OK"

2. Aktif uygulama bağımlılıklarını kontrol edin

Hedef veritabanını aktif olarak kullanan bağlantıların olup olmadığını görmek için MySQL işlem listesini sorgulayın:

mysql -u root -p -e "SELECT user, host, db, command, time FROM information_schema.processlist WHERE db = 'database_name';"

Satırlar döndürülürse, aktif oturumlar mevcuttur. Bir uygulama bağlıyken veritabanını silmek DROP komutunu engellemez — MySQL başarılı olur — ancak uygulama hemen bağlantı hataları vermeye başlar. Önce bir bakım penceresi koordine edin veya uygulama yapılandırmasını güncelleyin.

3. Tam veritabanı adını doğrulayın

MySQL veritabanı adları, Linux dosya sistemlerinde (ext4, XFS) büyük/küçük harfe duyarlıdır, ancak Windows ve macOS’ta duyarlı değildir. Bir Linux sunucusunda addaki yazım hatası, yanlış veritabanını sessizce silecek ya da “veritabanı mevcut değil” hatası döndürecektir. Tam dizeyi doğrulamak için her zaman önce SHOW DATABASES; çalıştırın.

Yöntem 1: Komut Satırı Aracılığıyla MySQL Veritabanını Silme

CLI, en güvenilir ve betik yazılabilir yöntemdir. Bir kontrol paneli veya web arayüzünün kurulu olup olmadığından bağımsız olarak herhangi bir sunucuda çalışır.

Adım 1 — MySQL sunucusuna bağlanın

mysql -u root -p

MySQL varsayılan olmayan bir port veya uzak bir ana bilgisayarda dinliyorsa:

mysql -u root -p -h 127.0.0.1 -P 3306

Adım 2 — Hedefi doğrulamak için tüm veritabanlarını listeleyin

SHOW DATABASES;

Adım 3 — Veritabanını silin

DROP DATABASE database_name;

Bunu bir kabuk betiğinde veya CI/CD ardışık düzeninde otomatikleştirirken betiği bozan hatayı önlemek için IF EXISTS koruyucusunu kullanın:

DROP DATABASE IF EXISTS database_name;

IF EXISTS olmadan, ad yanlışsa MySQL ERROR 1008 (HY000): Can't drop database; database doesn't exist döndürür. Koruyucuyla birlikte, sabit bir hata yerine uyarı döndürür — otomasyonda kullanışlıdır, ancak betiğin bir yazım hatasında yüksek sesle başarısız olmasını istiyorsanız tehlikeli olabilir.

Adım 4 — Silmeyi doğrulayın

SHOW DATABASES;

Veritabanı artık görünmemelidir. İşletim sistemi düzeyinde de doğrulayabilirsiniz — MySQL her veritabanını veri dizini altında bir dizin olarak saklar (genellikle /var/lib/mysql/):

ls /var/lib/mysql/ | grep database_name

Çıktı olmaması dizinin silindiğini doğrular.

Adım 5 — Oturumu sonlandırın

EXIT;

Tek Etkileşimsiz Komutla Veritabanı Silme

Otomasyon, betik yazma veya cron işleri için, etkileşimli bir oturum açmadan silme işlemini gerçekleştirebilirsiniz:

mysql -u root -p"your_password" -e "DROP DATABASE IF EXISTS database_name;"

İşlem listesinde parolayı açığa çıkarmaktan kaçınan daha güvenli bir yaklaşım, bir MySQL seçenekler dosyası kullanır:

mysql --defaults-extra-file=/root/.mysql_secure.cnf -e "DROP DATABASE IF EXISTS database_name;"

/root/.mysql_secure.cnf şunları içerir:

[client]
user=root
password=your_password

Yalnızca root’un okuyabilmesi için izinleri 600 olarak ayarlayın:

chmod 600 /root/.mysql_secure.cnf

Yöntem 2: phpMyAdmin Aracılığıyla MySQL Veritabanını Silme

phpMyAdmin, yıkıcı işlemleri gerçekleştirmeden önce görsel onayı tercih eden geliştiriciler için özellikle kullanışlı olan tarayıcı tabanlı bir arayüz sağlar.

Adım 1 — phpMyAdmin’e giriş yapın

Genellikle https://yourdomain.com/phpmyadmin olan phpMyAdmin URL’nize gidin. MySQL kimlik bilgilerinizi kullanın.

Adım 2 — Hedef veritabanını seçin

Sol kenar çubuğunda, kaldırmak istediğiniz veritabanı adına tıklayın. Bu, ana panelde veritabanının tablo listesini yükler.

Adım 3 — İşlemler sekmesine gidin

Ana panelin üst gezinme çubuğundaki İşlemler sekmesine tıklayın. Tek tek tablolar yanında görünen Sil bağlantısını kullanmayın — bu yalnızca tek bir tabloyu siler, tüm veritabanını değil.

Adım 4 — Veritabanını silin

İşlemler sayfasının altındaki Veritabanını kaldır bölümüne gidin. Veritabanını sil (DROP) seçeneğine tıklayın. phpMyAdmin bir onay iletişim kutusu görüntüler.

Adım 5 — Onaylayın

Tamam‘a tıklayın. phpMyAdmin sunucuya karşı DROP DATABASE database_name; çalıştırır. Sunucunun veritabanı listesine yönlendirileceksiniz ve silinen veritabanı artık görünmeyecektir.

Önemli phpMyAdmin kenar durumu: phpMyAdmin kısıtlı ayrıcalıklara sahip bir controluser ile yapılandırılmışsa, arayüz önbelleğe alınmış bir meta veri sorgusu nedeniyle silme işleminden sonra bile veritabanını kenar çubuğunda görüntüleyebilir. Yeniden sorgulamayı zorlamak için sayfayı yenileyin veya phpMyAdmin yapılandırma depolamasını temizleyin.

Yöntem 3: cPanel Aracılığıyla MySQL Veritabanını Silme

cPanel, MySQL yönetimini bir GUI’nin arkasına soyutlar ve tüm veritabanlarının cPanel kullanıcı adınızla öneklendiği bir adlandırma kuralını uygular (örn. cpanelusername_dbname). Bu önek zorunludur ve kaldırılamaz.

Adım 1 — cPanel’e giriş yapın

https://yourdomain.com:2083 adresindeki cPanel panonuza erişin ve kimlik doğrulaması yapın.

Adım 2 — MySQL Veritabanlarını açın

Veritabanları bölümünde MySQL Veritabanları‘na tıklayın.

Adım 3 — Veritabanını bulun

Mevcut Veritabanları tablosuna gidin. Kaldırmak istediğiniz veritabanını belirleyin.

Adım 4 — Silin

Hedef veritabanının yanındaki Sil bağlantısına tıklayın. cPanel, veritabanı adını listeleyen bir onay sayfası gösterir.

Adım 5 — Onaylayın

Veritabanını Sil‘e tıklayın. cPanel sizin adınıza DROP DATABASE ifadesini çalıştırır ve mysql.db tablosundan ilişkili kullanıcı-veritabanı ayrıcalık eşlemelerini kaldırır.

cPanel’e özgü not: cPanel’de bir veritabanını silmek, ona atanmış MySQL kullanıcılarını otomatik olarak kaldırmaz. Bu kullanıcılar sistemde kalmaya devam eder ve hosting planınızın kullanıcı limitine sayılmaya devam eder. Veritabanını sildikten sonra MySQL Veritabanları > Mevcut Kullanıcılar bölümüne gidin ve sahipsiz kullanıcıları manuel olarak silin.

cPanel ile birden fazla siteyi yönetiyorsanız ve daha ayrıntılı veritabanı kontrolüne ihtiyaç duyuyorsanız, cPanel arayüzünün yanı sıra root MySQL erişimine sahip olduğunuz bir cPanel’li VPS‘e yükseltmeyi düşünün.

Yöntem Karşılaştırması

ÖzellikCLI (`mysql`)phpMyAdmincPanel
GUI gerektirirHayırEvet (tarayıcı)Evet (tarayıcı)
Betik yazılabilir / otomatikleştirilebilirEvetHayırYalnızca cPanel API aracılığıyla
Root veya SSH erişimi gerektirirEvet (genellikle)HayırHayır
`IF EXISTS` koruyucusunu desteklerEvetHayırHayır
Silmeden önce aktif bağlantıları gösterirManuel sorguylaHayırHayır
Silmeden önce yedek dışa aktarırManuel adım gerekliYerleşik dışa aktarma sekmesiYedekleme Sihirbazı aracılığıyla
Uzak MySQL ana bilgisayarlarında çalışırEvet (`-h` bayrağı)Evet (yapılandırılmışsa)Yalnızca yerel sunucu
Adlandırma öneki zorunlu kılınırHayırHayırEvet (`user_dbname`)
Yanlışlıkla silme riskiDüşük (açık komut)Orta (tek tıklama)Orta (tek tıklama)

Silinen Veritabanını Kurtarma: Seçenekleriniz Nelerdir?

DROP DATABASE çalıştırıldığında, MySQL veritabanı dizinini ve tüm .ibd dosyalarını (InnoDB tablo alanı dosyaları) veya .MYD/.MYI dosyalarını (MyISAM) kaldırır. MySQL’de DDL ifadeleri için yerel bir ROLLBACK veya UNDO mevcut değildir.

Kurtarma seçenekleriniz tamamen silme işleminden önce neye sahip olduğunuza bağlıdır:

  • mysqldump yedeğimysql -u root -p new_database_name < backup.sql ile geri yükleyin
  • İkili günlükler (binlog) — ikili günlük kaydı etkinleştirilmişse (log_bin = ON), mysqlbinlog kullanarak DROP DATABASE ifadesinden hemen önceki noktaya kadar olayları yeniden oynatabilirsiniz
  • Fiziksel yedek (Percona XtraBackup, MySQL Enterprise Backup) — tüm veri dizinini veya bireysel tablo alanlarını geri yükleyin
  • Dosya sistemi anlık görüntüsü — sunucunuz LVM veya silme işleminden önce alınmış bir bulut blok depolama anlık görüntüsü kullanıyorsa, anlık görüntüyü bağlayın ve veritabanı dizinini /var/lib/mysql/ konumuna geri kopyalayın
  • Üçüncü taraf InnoDB kurtarma araçlarıPercona Data Recovery Tool for InnoDB gibi araçlar, tablo alanı üzerine yazılmamışsa ham .ibd dosyalarından bazen verileri yeniden oluşturabilir, ancak başarı garanti edilmez ve süreç karmaşıktır

Bir Dedicated Server üzerinde üretim veritabanı çalıştırıyorsanız, otomatik ikili günlük kaydı ve günlük fiziksel yedeklemeleri yapılandırmak tartışmasız bir zorunluluktur. Marjinal depolama maliyeti, veri kaybının maliyetiyle karşılaştırıldığında önemsizdir.

Ayrıcalık Yönetimi: DROP Erişimi Verme ve İptal Etme

Başka bir MySQL kullanıcısına global root erişimi vermeden belirli bir veritabanını silme yeteneği tanımanız gerekiyorsa:

GRANT DROP ON database_name.* TO 'username'@'localhost';
FLUSH PRIVILEGES;

İptal etmek için:

REVOKE DROP ON database_name.* TO 'username'@'localhost';
FLUSH PRIVILEGES;

Bir kullanıcının şu anda hangi ayrıcalıklara sahip olduğunu kontrol etmek için:

SHOW GRANTS FOR 'username'@'localhost';

*.* (tüm veritabanları) üzerinde DROP vermek önemli bir güvenlik riskidir. Mümkün olduğunda belirli veritabanıyla sınırlı tutun.

Çok Kiracılı Ortamlarda Veritabanı Temizliğini Otomatikleştirme

Test veya hazırlık veritabanlarının programatik olarak oluşturulduğu ortamlarda — CI/CD ardışık düzenleri, geliştirme iş akışları veya SaaS platformları gibi — otomatik temizlik veritabanı yayılmasını önler. Bir adlandırma düzeniyle eşleşen tüm veritabanlarını silmek için basit bir kabuk betiği:

#!/bin/bash
MYSQL_USER="root"
MYSQL_OPTS="--defaults-extra-file=/root/.mysql_secure.cnf"
PREFIX="test_"

mysql $MYSQL_OPTS -N -e "SHOW DATABASES LIKE '${PREFIX}%';" | while read db; do
    echo "Dropping database: $db"
    mysql $MYSQL_OPTS -e "DROP DATABASE IF EXISTS `$db`;"
done

`###PPT_NOTR_62_CODE###$db###PPT_NOTR_63_CODE######PPT_NOTR_64_CODE###DROP DATABASE` ifadesinin etrafındaki ters tırnak kaçışı kritiktir — tire veya ayrılmış kelimeler içeren veritabanı adları, onsuz sözdizimi hatasına neden olur.

Yaygın Hataları Giderme

ERROR 1044 (42000): Access denied for user

Bağlı kullanıcı DROP ayrıcalığından yoksundur. Root olarak bağlanın veya yukarıdaki bölümde gösterildiği gibi ayrıcalığı verin.

ERROR 1008 (HY000): Can't drop database; database doesn't exist

Veritabanı adı yanlış veya mevcut değil. Tam adı doğrulamak için SHOW DATABASES; çalıştırın. Adların Linux’ta büyük/küçük harfe duyarlı olduğunu unutmayın.

ERROR 1010 (HY000): Error dropping database (can't rmdir)

MySQL, veritabanı dizininde kendi oluşturmadığı dosyalar buldu (örn. manuel olarak yerleştirilen dosyalar veya çökmüş bir içe aktarmadan kalan dosyalar). Dizini /var/lib/mysql/database_name/ altında bulun, yabancı dosyaları manuel olarak kaldırın, ardından DROP DATABASE komutunu yeniden çalıştırın.

phpMyAdmin silme işleminden sonra veritabanını gösteriyor

Bu bir görüntü önbelleği sorunudur. phpMyAdmin sayfasını yenileyin. Veritabanı yeniden görünürse, phpMyAdmin’in bağlandığı farklı bir soket veya portta ikinci bir MySQL örneğinin çalışıp çalışmadığını kontrol edin.

cPanel silme girişiminden sonra “Veritabanı mevcut değil”

cPanel’in dahili veritabanı kayıt defterinde eski bir giriş olabilir. MySQL Veritabanları altındaki cPanel Onar işlevini kullanın veya veritabanı listesini yeniden senkronize etmek için hosting desteğinizle iletişime geçin.

Kendi yığınınızı yönettiğiniz hosting ortamları için, VPS Kontrol Panelleri yanlış yapılandırma riskini azaltan entegre veritabanı yönetim araçları sağlar.

Teknik Temel Çıkarımlar Kontrol Listesi

DROP DATABASE çalıştırmadan önce bu kontrol listesini gözden geçirin:

  • [ ] Doğrulanmış, test edilmiş bir yedek mevcut (arşivde gzip -t geçti)
  • [ ] Sunucuda ikili günlük kaydı etkin (SHOW VARIABLES LIKE 'log_bin'; ON döndürüyor)
  • [ ] Hedef veritabanında aktif uygulama bağlantısı yok (information_schema.processlist sorgusu sıfır satır döndürdü)
  • [ ] Tam veritabanı adı SHOW DATABASES; ile doğrulandı
  • [ ] Doğru MySQL kullanıcısı ve ana bilgisayarı bağlı (birden fazla veritabanına erişimi olan paylaşımlı bir kullanıcı değil)
  • [ ] cPanel ortamları için: sahipsiz MySQL kullanıcıları silme işleminden sonra temizlenecek
  • [ ] Otomatik betikler için: eksik veritabanlarında sabit hataları önlemek amacıyla IF EXISTS kullanılıyor
  • [ ] InnoDB tabloları için: tutarlı bir anlık görüntü sağlamak amacıyla mysqldump içinde --single-transaction kullanıldı
  • [ ] Silme sonrası: SHOW DATABASES; ve işletim sistemi düzeyinde dizin kontrolü veritabanının tamamen kaldırıldığını doğruluyor

SSS

Silinen bir MySQL veritabanı yedek olmadan kurtarılabilir mi?

Yalnızca belirli koşullar altında. Silme işleminden önce ikili günlük kaydı (log_bin) etkinleştirilmişse, DROP DATABASE olayından hemen önceki noktaya kadar işlem günlüğünü yeniden oynatmak için mysqlbinlog kullanabilirsiniz. İkili günlükler veya fiziksel yedek olmadan kurtarma güvenilir bir şekilde mümkün değildir. Bazı düşük seviyeli InnoDB kurtarma araçları ham tablo alanı dosyalarından veri çıkarabilir, ancak sonuçlar tutarsızdır ve disk sektörlerinin üzerine yazılıp yazılmadığına bağlıdır.

MySQL’de DROP DATABASE ile DROP SCHEMA arasındaki fark nedir?

MySQL’de sözdizimsel eş anlamlılardır. DROP SCHEMA database_name;, DROP DATABASE database_name; ile aynı şekilde çalışır. SCHEMA anahtar kelimesi SQL standart uyumluluğu için mevcuttur ve tüm MySQL sürümlerinde birbirinin yerine kullanılabilir.

Bir MySQL veritabanını silmek ilişkili MySQL kullanıcılarını da kaldırır mı?

Hayır. DROP DATABASE yalnızca veritabanı nesnesini ve içeriğini kaldırır. mysql.user tablosunda tanımlanan MySQL kullanıcı hesapları veritabanlarından bağımsızdır. Artık ihtiyaç duyulmuyorsa, kullanıcıları DROP USER 'username'@'host'; ile manuel olarak silmeniz ve ayrıcalık girişlerini kaldırmanız gerekir.

Adında tire veya özel karakter bulunan bir veritabanını nasıl silerim?

SQL ifadesinde veritabanı adını ters tırnak içine alın:

DROP DATABASE IF EXISTS `my-database`;

Ters tırnak olmadan, MySQL tireyi bir çıkarma operatörü olarak ayrıştırır ve sözdizimi hatası döndürür.

Diğer kullanıcılar bağlıyken bir veritabanını silmek güvenli midir?

MySQL, aktif bağlantılar nedeniyle DROP DATABASE komutunu engellemez. Komut hemen çalışır ve veritabanını kullanan oturumlar bir sonraki sorgularında hata alır. information_schema.processlist kullanarak aktif bağlantı olmadığını her zaman doğrulayın ve canlı trafik sunan bir veritabanını silmeden önce bir bakım penceresi koordine edin.

15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın