Bir web sitesinin görünen yüzü şablonlar ve resimlerdir, ama asıl değerli varlık neredeyse her zaman veritabanındadır. Ürünleriniz, siparişleriniz, kullanıcı hesaplarınız, yazılarınız ve ayarlarınız o .sql tablolarının içinde durur. İşte bu yüzden bir veritabanını doğru biçimde dışa aktarmayı (yedeklemeyi) ve tekrar içe aktarmayı (geri yüklemeyi ya da taşımayı) bilmek, bir hosting kullanıcısının öğrenmesi gereken en temel becerilerden biridir. phpMyAdmin, bu iki işlemi komut satırına dokunmadan, tarayıcı üzerinden yapmanızı sağlayan en yaygın araçtır ve neredeyse her cPanel veya DirectAdmin panelinde hazır gelir.
Bu rehberde phpMyAdmin'in Dışa Aktar (Export) ve İçe Aktar (Import) ekranlarını adım adım gezeceğiz; hızlı mod ile özel mod arasındaki farkı, sıkıştırma seçeneklerini, tek tablo mu yoksa tüm veritabanı mı almanız gerektiğini örneklerle göreceğiz. Ardından herkesin er ya da geç karşılaştığı "dosya çok büyük, yükleme limitine takıldım" sorununu; gzip sıkıştırma, dosyayı bölme ve komut satırından mysql ile içe aktarma gibi üç ayrı yöntemle çözeceğiz. Son olarak da bir siteyi başka sunucuya taşırken tablo öneki değişimi gibi kolayca gözden kaçan ama sizi saatlerce uğraştırabilecek noktaları ele alacağız.
phpMyAdmin'e Nasıl Erişilir ve Doğru Veritabanını Seçmek#
Paylaşımlı hosting kullanıyorsanız phpMyAdmin'e giden en kısa yol cPanel içindeki Veritabanları bölümüdür. cPanel ana ekranında arama kutusuna "phpMyAdmin" yazıp simgeye tıkladığınızda araç, panelinizle aynı oturum üzerinden otomatik açılır; ayrıca kullanıcı adı ve parola girmeniz gerekmez. Kendi sunucunuzu yönetiyorsanız phpMyAdmin genellikle https://sunucu-adresiniz/phpmyadmin altında durur ve MySQL kullanıcı bilgilerinizle giriş yaparsınız.
Ekranın sol tarafındaki dikey listede, hesabınıza tanımlı tüm veritabanları alt alta sıralanır. Burada dikkat edilmesi gereken ilk şey, hangi veritabanı üzerinde çalıştığınızı her adımda kontrol etmektir. Özellikle paylaşımlı hosting'te veritabanı adları kullanici_wp123 gibi bir önekle başlar; yanlış veritabanını seçip üzerine içe aktarma yaparsanız başka bir sitenin verisini ezme riskiniz vardır. Soldaki listeden doğru veritabanına tıkladığınızda sağ tarafta o veritabanına ait tablolar (wp_posts, wp_options, orders vb.) listelenir. Tüm işlemler bundan sonra o seçili veritabanı bağlamında gerçekleşir.
Eğer henüz phpMyAdmin arayüzüne, sekmelere ve temel tablo işlemlerine yabancıysanız, işe başlamadan önce phpMyAdmin kullanımı rehberimizi okumanızı öneririm; bu yazı, orada anlatılan temelin üzerine kurulmuştur.
Dışa Aktarma (Export): Hızlı Mod ile Özel Mod Farkı#
Veritabanınızı yedeklemek için önce sol listeden ilgili veritabanına tıklayın, ardından üst menüden Dışa Aktar (Export) sekmesine geçin. Karşınıza iki temel yöntem çıkar.
Hızlı (Quick) mod, hiçbir ayrıntıya girmeden tek tıkla tam bir yedek üretir. Format olarak SQL seçilidir ve "Git" dediğiniz anda tarayıcınız veritabaniadi.sql dosyasını indirmeye başlar. Küçük ve orta boyutlu bir siteyi hızlıca yedeklemek istediğinizde bu mod fazlasıyla yeterlidir; günlük pratikte en çok kullanılan seçenek budur.
Özel (Custom) mod ise perdeyi aralar ve size tüm kontrolü verir. Bu modu seçtiğinizde şunları ayarlayabilirsiniz:
- Tablo seçimi — Tüm tabloları değil, yalnızca birkaç tabloyu (örneğin sadece
wp_options) dışa aktarabilirsiniz. - Çıktı sıkıştırma — Dosyayı sunucu tarafında gzip ya da zip olarak sıkıştırıp öyle indirebilirsiniz. Büyük veritabanlarında bu, indirme boyutunu çoğu zaman beşte birine düşürür.
- Yapı (structure) ve veri (data) — Sadece tablo şemasını mı, sadece satırları mı, yoksa ikisini birden mi istediğinizi seçersiniz.
DROP TABLE/CREATE TABLE IF NOT EXISTS— İçe aktarma sırasında var olan tabloların üzerine yazılıp yazılmayacağını belirleyen bu ifadeler, taşıma senaryolarında hayat kurtarır.
Aşağıdaki tablo, hangi durumda hangi modu tercih etmeniz gerektiğini özetliyor:
| Senaryo | Önerilen mod | Neden |
|---|---|---|
| Küçük siteyi hızlıca yedekle | Hızlı | Tek tık, ayar gerektirmez |
| Büyük veritabanını indir | Özel + gzip | Boyut ve zaman aşımı kontrolü |
| Başka sunucuya taşı | Özel + DROP TABLE ekle | Hedefteki eski tabloları temizler |
| Sadece bir tabloyu al | Özel + tablo seçimi | Gereksiz veriyi taşımaz |
| Yalnızca şemayı paylaş | Özel + sadece structure | Veriyi gizli tutar |
Ürettiğiniz .sql dosyası düz metindir; dilerseniz bir metin düzenleyiciyle açıp içeriğini görebilirsiniz. Dosyanın başında karakter setiyle ilgili satırlar, ardından her tablo için CREATE TABLE bloğu ve INSERT INTO satırları yer alır. Bu yapıyı tanımak, ilerideki bölümlerde dosyayı elle bölerken işinize yarayacak.
İçe Aktarma (Import): SQL Dosyası Yükleme ve Karakter Seti#
Elinizdeki bir .sql yedeğini geri yüklemek ya da yeni bir sunucuya kurmak için İçe Aktar (Import) sekmesini kullanırsınız. İşlem sırası şöyledir: önce sol listeden hedef veritabanını seçin (yoksa cPanel'in MySQL Databases aracıyla boş bir veritabanı oluşturun), sonra Import sekmesine geçin ve Dosya Seç ile bilgisayarınızdaki .sql, .sql.gz ya da .zip dosyasını gösterin.
Import ekranında gözden kaçırılmaması gereken iki ayar vardır. Birincisi Karakter kümesi (character set); buradaki değer neredeyse her zaman utf-8 olmalıdır. Türkçe içerikli sitelerde bu ayar yanlış seçilirse "İçerik" yerine "İçerik" gibi bozuk karakterler ortaya çıkar. Yedeğinizi zaten UTF-8 üreten modern bir phpMyAdmin ile aldıysanız varsayılan değer doğrudur, ellemeyin. İkincisi Biçim (format) alanıdır; SQL yedeği yüklüyorsanız bu "SQL" olmalıdır. CSV gibi başka formatlar da desteklenir ama bir veritabanı yedeği için standart daima SQL'dir.
Aşağıdaki gibi basit bir içe aktarma öncesi kontrol listesi, sık yapılan hataların önüne geçer:
-- Yüklemeden önce hedef veritabanının boş/temiz olduğundan emin olun.
-- Yedek dosyanızın ilk satırlarında karakter seti tanımını doğrulayın:
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- Dosyanın sonunda genellikle şu bulunur:
SET FOREIGN_KEY_CHECKS = 1;
SET FOREIGN_KEY_CHECKS = 0; satırı, tablolar arasında yabancı anahtar bağı olan veritabanlarında (örneğin bir e-ticaret şeması) içe aktarma sırasını dert etmenizi engeller; phpMyAdmin'in ürettiği yedekler bunu genellikle otomatik ekler. "Git" dedikten sonra dosya boyutuna göre birkaç saniyeden birkaç dakikaya kadar sürebilir; işlem bittiğinde yeşil bir başarı mesajı ve etkilenen sorgu sayısı görünür.
Büyük Dosyalarda Yükleme Limiti Sorununu Aşmak#
phpMyAdmin ile içe aktarmada en sık karşılaşılan engel şu hatadır: dosyanız upload_max_filesize veya post_max_size gibi PHP sınırlarını aştığı için yükleme reddedilir. Import ekranında "(Max: 50MiB)" gibi bir uyarı görürsünüz ve 200 MB'lık yedeğiniz asla yüklenmez. Bunun üç sağlam çözümü vardır.
1. Yedeği gzip ile sıkıştırın. SQL düz metin olduğu için harika sıkışır. Dışa aktarırken Özel mod içinden "gzip" seçerseniz, 200 MB'lık bir dosya çoğu zaman 20-30 MB'a iner ve limitin altına düşer. phpMyAdmin, .sql.gz dosyalarını içe aktarırken otomatik olarak açar; sizin ayrıca bir şey yapmanız gerekmez. Bu, en pratik ilk hamledir.
2. PHP limitlerini geçici olarak yükseltin. Kendi sunucunuzda ya da limitleri değiştirebildiğiniz bir planda, ilgili PHP değerlerini artırabilirsiniz. cPanel'de bu genellikle MultiPHP INI Editor üzerinden yapılır; kendi sunucunuzda ise php.ini dosyasında şu satırları düzenlersiniz:
; php.ini — büyük içe aktarmalar için geçici artırım
upload_max_filesize = 256M
post_max_size = 256M
max_execution_time = 600
max_input_time = 600
memory_limit = 512M
Değişiklikten sonra PHP-FPM veya web sunucusunu yeniden başlatın. Bu ayarları iş bittikten sonra makul değerlere geri çekmenizi öneririm; kalıcı olarak yüksek tutmak sunucuyu gereksiz yüke açar.
3. Dosyayı bölün ya da komut satırını kullanın. Yedek gerçekten büyükse (yüzlerce megabayt ya da gigabayt), tarayıcı tabanlı yükleme yine de zaman aşımına uğrayabilir. Bu noktada en güvenilir yol, SSH erişiminiz varsa doğrudan mysql komut satırı istemcisidir. Yedeği FTP/SFTP ile sunucuya yükleyip şu komutla içe aktarabilirsiniz:
# Sıkıştırılmamış yedeği doğrudan içe aktarma
mysql -u kullanici_adi -p hedef_veritabani < yedek.sql
# gzip'li yedeği açarak boru (pipe) ile aktarma — diske açmadan
gunzip < yedek.sql.gz | mysql -u kullanici_adi -p hedef_veritabani
Komut satırı yönteminin hiçbir yükleme limiti veya tarayıcı zaman aşımı yoktur; devasa yedekler için tek doğru araçtır. SSH erişiminiz yoksa alternatif olarak yedeği .sql metin dosyası içinde tablo tablo bölüp (örneğin çok satır tutan bir tabloyu ayrı dosyaya alıp) parçaları sırayla içe aktarabilirsiniz. Komut satırıyla veritabanı yönetimini daha derinlemesine görmek isterseniz MySQL veritabanı yönetimi rehberimiz tam bu konuya eğiliyor.
Aşağıdaki tablo, dosya boyutuna göre hangi yöntemi seçmeniz gerektiğini özetler:
| Yedek boyutu | Önerilen yöntem | Not |
|---|---|---|
| 50 MB altı | Doğrudan phpMyAdmin | Ek ayar gerekmez |
| 50 - 250 MB | gzip + phpMyAdmin | En hızlı çözüm |
| 250 MB - 1 GB | php.ini artırımı veya SSH | Zaman aşımına dikkat |
| 1 GB üstü | Komut satırı mysql | Tek güvenilir yol |
Bir Siteyi Başka Sunucuya Taşıma Senaryosu#
Veritabanı içe/dışa aktarmanın en yaygın kullanım amacı, bir siteyi bir sunucudan diğerine taşımaktır. Diyelim ki bir WordPress sitesini eski bir hosting'den yeni bir Clou.TR paketine taşıyorsunuz. Adımlar mantıksal olarak şöyle ilerler.
Önce eski sunucuda phpMyAdmin'e girip veritabanını Özel modda, "DROP TABLE" ekli olarak dışa aktarın ve .sql.gz dosyasını indirin. Aynı anda dosyaları da FTP ile indirmeyi unutmayın; veritabanı tek başına siteyi ayağa kaldırmaz. Yeni sunucuda cPanel'in MySQL Databases aracıyla boş bir veritabanı ve bir MySQL kullanıcısı oluşturun, kullanıcıyı veritabanına ALL PRIVILEGES ile bağlayın. Ardından phpMyAdmin Import ekranından yedeği bu yeni ve boş veritabanına yükleyin.
Buradaki kritik nokta, sitenin yapılandırma dosyasındaki bağlantı bilgileridir. WordPress'te bu wp-config.php, çoğu PHP uygulamasında benzer bir config dosyasıdır. Yeni sunucudaki veritabanı adı, kullanıcı adı ve parola eskisinden farklı olacağı için bu değerleri güncellemeniz gerekir:
# wp-config.php içinde güncellenecek satırlar
define( 'DB_NAME', 'yeni_veritabani_adi' );
define( 'DB_USER', 'yeni_kullanici' );
define( 'DB_PASSWORD', 'yeni_parola' );
define( 'DB_HOST', 'localhost' );
Taşıma işleminin gerçekten sancısız geçmesi için, taşımadan önce eski ve yeni sunucudaki MySQL sürümlerinin ve karakter setlerinin uyumlu olmasına dikkat edin. Çok eski bir MySQL 5.5 yedeğini yeni bir MySQL 8 sunucusuna yüklerken bazı COLLATE utf8mb4_0900_ai_ci uyumsuzlukları çıkabilir; bu durumda yedek dosyasındaki collation adını bir metin düzenleyiciyle utf8mb4_general_ci gibi daha geniş uyumlu bir değerle değiştirmek sorunu çözer. Taşıma işleminin tamamını sizin yerinize yapmamızı isterseniz ücretsiz site taşıma hizmetimiz tam olarak bunun için vardır.
Tablo Öneki (Prefix) Değişimi ve Sık Yapılan Hatalar#
Taşıma sırasında en çok gözden kaçan ve en çok baş ağrıtan konu tablo önekidir. WordPress kurulumları varsayılan olarak wp_ önekiyle gelir ama güvenlik için sık sık wp_a1b2_ gibi özel öneklerle kurulur. Yedeği bir sitenin verisi başka bir önek bekleyen bir kuruluma yüklerseniz, uygulama tablolarını bulamaz ve "veritabanı bağlantısı kuruldu ama tablo yok" tarzı hatalar alırsınız.
Öneki değiştirmenin en temiz yolu, uygulama yapılandırmasındaki öneki yedeğin gerçek önekine eşitlemektir. WordPress'te bu satır wp-config.php içindedir:
# wp-config.php — tablo önekini yedekteki önekle aynı yapın
$table_prefix = 'wp_a1b2_';
Bunun tersini yapmanız, yani yedekteki öneki değiştirmeniz gerekiyorsa, SQL dosyasını doğrudan phpMyAdmin'in SQL sekmesinden çalıştıracağınız komutlarla ya da bir metin düzenleyicinin "bul ve değiştir" özelliğiyle güncelleyebilirsiniz. İçe aktarma tamamlandıktan sonra, WordPress gibi uygulamalarda birkaç ayar tablosunda da önek geçtiği için (wp_user_roles, wp_usermeta içindeki bazı anahtarlar) ek düzeltme gerekebilir. Sadece önekli tabloları yeniden adlandırmak için şablon olarak şunu kullanabilirsiniz:
-- Tek bir tabloyu yeniden adlandırma (önek değişimi için)
RENAME TABLE wp_posts TO wp_a1b2_posts;
RENAME TABLE wp_options TO wp_a1b2_options;
-- ... her tablo için tekrarlayın
Sık yapılan diğer hatalara gelince: içe aktarmadan önce hedef veritabanının boş olmadığından emin olmadan yükleme yapmak, "Duplicate entry" hatalarına yol açar; çözümü ya boş bir veritabanına yüklemek ya da yedeği "DROP TABLE" ekli üretmektir. Bir diğer klasik hata, çok büyük bir dosyayı tarayıcıdan yüklemeye çalışıp sayfa donduğunda işlemi yarıda kesmektir; yarım kalan bir içe aktarma veritabanını tutarsız bırakır, bu yüzden büyük dosyalarda daima gzip ya da komut satırını tercih edin. Kritik verilerinizi düzenli ve otomatik yedeklemek için ayrıca yedekleme çözümlerimize göz atmanızı öneririm; elle alınan yedekler unutulmaya çok müsaittir.
Düzenli Yedekleme Alışkanlığı ve Otomasyon#
phpMyAdmin ile elle yedek almak, "şimdi bir işlem yapacağım, önce bir yedek alayım" refleksi için mükemmeldir. Ancak insan hafızasına dayalı bir yedekleme stratejisi er ya da geç aksar. Bir eklenti güncellemesinden hemen önce elle yedek almak akıllıcadır, ama tek koruma katmanınız bu olmamalı.
Sağlıklı bir yaklaşım şudur: kritik değişikliklerden önce phpMyAdmin ile hızlı bir manuel yedek alın, buna ek olarak sunucu tarafında zamanlanmış bir görevle otomatik yedeği devrede tutun. SSH erişiminiz varsa mysqldump komutunu bir cron görevine bağlayarak her gece otomatik yedek üretebilirsiniz:
# Her gece 03:00'te veritabanını sıkıştırılmış olarak yedekleyen cron görevi
0 3 * * * mysqldump -u kullanici -pPAROLA veritabani | gzip > /home/kullanici/yedek/db-$(date +\%Y\%m\%d).sql.gz
Bu satır, mysqldump çıktısını doğrudan gzip'e boruyla aktarıp tarih damgalı bir dosya olarak saklar; phpMyAdmin'in Özel modda yaptığının komut satırı karşılığıdır. Yedekleri sunucunun kendi diskinde tutmak yeterli değildir — sunucu çökerse yedek de gider. Bu yüzden ürettiğiniz yedekleri düzenli olarak başka bir konuma (uzak bir depolama, kendi bilgisayarınız ya da harici bir yedekleme servisi) kopyalayın. Yedeklemenin altın kuralı olan "3 kopya, 2 farklı ortam, 1 farklı lokasyon" prensibini veritabanınız için de uygulamak, bir gün mutlaka işinize yarayacaktır.
Sıkça Sorulan Sorular#
phpMyAdmin'de dışa aktardığım dosya bilgisayarıma inmiyor, ne yapmalıyım?#
Genellikle sorun, tarayıcının indirme işlemini engellemesi ya da çok büyük bir dosyada sunucunun zaman aşımına uğramasıdır. Önce tarayıcınızın açılır pencere ve indirme izinlerini kontrol edin; hâlâ inmiyorsa Dışa Aktar ekranında Özel modu seçip "gzip" sıkıştırmayı işaretleyerek dosya boyutunu küçültün. Çok büyük veritabanlarında ise phpMyAdmin yerine SSH üzerinden mysqldump komutunu kullanmak en güvenilir yoldur, çünkü tarayıcı zaman aşımından etkilenmez.
İçe aktardıktan sonra Türkçe karakterler bozuk görünüyor, nasıl düzeltirim?#
Bu sorunun kaynağı neredeyse her zaman karakter seti uyumsuzluğudur. İçe aktarma sırasında karakter kümesini utf-8 olarak seçtiğinizden ve yedek dosyanızın da UTF-8 kodlamayla üretildiğinden emin olun. Eğer veri zaten bozuk biçimde içe aktarıldıysa, en temiz çözüm bozuk veritabanını silip yedeği doğru karakter setiyle baştan yüklemektir. Yedek dosyanızın başındaki SET NAMES satırının utf8mb4 içerdiğini bir metin düzenleyiciyle doğrulamak da işe yarar.
Yükleme limiti hatası alıyorum ama php.ini dosyasına erişimim yok, ne yapabilirim?#
Paylaşımlı hosting'te çoğu zaman php.ini'yi doğrudan düzenleyemezsiniz, ama cPanel'in MultiPHP INI Editor aracıyla upload_max_filesize ve post_max_size değerlerini artırabilirsiniz. Bu araç da kısıtlıysa en pratik çözüm, yedeği gzip ile sıkıştırıp .sql.gz olarak yüklemektir; sıkıştırılmış dosya limitin altına düşer ve phpMyAdmin onu otomatik açar. Bunlar da yetmezse hosting sağlayıcınızın destek ekibinden geçici bir limit artırımı ya da SSH ile içe aktarma yardımı isteyebilirsiniz.
Tüm veritabanını değil sadece bir tabloyu yedekleyebilir miyim?#
Evet, bunun için Dışa Aktar ekranında Özel modu seçmeniz yeterlidir. Özel modda tablo listesinden yalnızca ihtiyacınız olan tabloları (örneğin sadece wp_options ya da orders) işaretleyip diğerlerinin işaretini kaldırırsınız. Alternatif olarak, sol listeden önce ilgili tabloya tıklayıp sonra Dışa Aktar sekmesine geçerseniz phpMyAdmin sadece o tabloyu dışa aktarır. Bu yöntem, tek bir tabloda bozulan veriyi geri yüklemek istediğinizde tüm veritabanını taşımaktan çok daha hızlıdır.
İçe aktarma sırasında Duplicate entry hatası alıyorum, sebebi nedir?#
Bu hata, yüklediğiniz yedeğin içindeki bir kaydın hedef veritabanında zaten var olduğunu gösterir; yani boş olmayan bir veritabanına içe aktarma yapıyorsunuz. Çözümü ya tamamen boş bir veritabanı oluşturup yedeği ona yüklemek, ya da yedeği Özel modda "DROP TABLE" ifadesi ekli olarak yeniden dışa aktarmaktır; böylece içe aktarma önce eski tabloları temizler. Var olan bir veritabanının üzerine körlemesine yükleme yapmak, hem bu hataya hem de veri karışmasına yol açtığı için önerilmez.
phpMyAdmin ile mysqldump arasındaki fark nedir, hangisini kullanmalıyım?#
İkisi de aynı işi yapar; SQL biçiminde bir veritabanı dökümü üretirler. phpMyAdmin tarayıcı üzerinden çalışan görsel bir araçtır ve küçük-orta boyutlu veritabanları için pratiktir, ama tarayıcı zaman aşımı ve yükleme limitleri gibi kısıtlara tabidir. mysqldump ise komut satırından çalışan bir araçtır; hiçbir boyut sınırı yoktur, gigabaytlarca veriyi sorunsuz işler ve cron ile otomatikleştirilebilir. Küçük yedekler ve hızlı işler için phpMyAdmin, büyük veritabanları ve otomasyon için mysqldump doğru tercihtir.
Kapanış#
phpMyAdmin ile dışa ve içe aktarma, ilk bakışta iki basit butona tıklamak gibi görünse de, arka planında karakter setleri, dosya limitleri ve tablo önekleri gibi kolayca gözden kaçan detaylar barındırır. Özel modu kullanarak sıkıştırılmış, DROP TABLE ekli yedekler almayı; büyük dosyalarda gzip ve komut satırına başvurmayı; taşıma sırasında yapılandırma ve önek uyumunu kontrol etmeyi alışkanlık hâline getirdiğinizde, bir veritabanını taşımak ya da geri yüklemek dakikalar sürecek rutin bir işe dönüşür.
Sağlam ve hızlı bir MySQL altyapısı, iyi bir yedekleme rutininin de yarısıdır. Türkiye lokasyonlu, SSD tabanlı ve düşük gecikmeli bir zemin arıyorsanız web hosting paketlerimizi inceleyebilir, WordPress projeleriniz için özel olarak ayarlanmış WordPress hosting çözümümüze göz atabilir ya da tam kontrol isteyen büyüyen projeler için sanal ve VDS sunucularımızı değerlendirebilirsiniz. Sitenizi bize taşımayı düşünüyorsanız uzman ekibimiz veritabanı aktarımını da içeren ücretsiz site taşıma hizmetiyle tüm süreci sizin yerinize yürütür.