Tekil Mesaj gösterimi
Alt 22-03-08, 23:53   #1
Administrator
 
kaptanblack - Avatar
 
Üyelik tarihi: Jan 2007
Nerden: Sakarya
Mesajlar: 25,291
Standart vBulletin Database Birleştirme


Veritabanı (dB) birleştirme


Bu konuda vbulletine ait iki ayrı dB(veritabanı) birleştirme anlatılacaktırBu işlem için taşınacak olan db kaynak , diğeri hedef db dirve işlemlerin kolaylığı açısından kaynak db daha az kapasiteli olan db olursa hem hata yapma olasılığı azalır hemde karmaşadan uzak durmuş oluruz (hemde zamandan tasarruf etmiş oluruz)

icraata geçmeden önce konuyu baştan sona okuyun

Kaynak db forumx ve hedef db forum olduğunu varsayın (karmaşayı önelemek için aşağıdaki resime bakabilirsiniz) iki db arasında en kolay user tablosu taşınır çünkü bu tablonun bağımlı olduğu hiç bir tablo yoktur




Uyarılar :

  1. localhost kullanıcı adı root şifresi 123 olduğunu varsayıyorum (siz kendi şifrenizi gireceksiniz)
  2. Bu işlemi kendi bilgisayarım üzerinde yaptım (Sunucuda tavsiye etmem)
  3. İşlem görecek veritabanlarının hangi vbulletin sürümlerine ait olduğu önemli değildir
  4. Konuda geçen SQL sorguları konsol üzerinden çalıştırılmıştır(PMA danda çalıştırılabilir)
  5. Her iki db nin de aynı sunucuda yüklü olduğunu var sayıyorum( db yükleme konusu için Linkleri Görebilmek İçin Üye Olmalısınız. Üye Olmak için Tıklayınız.
    Eğer üyeyseniz en az 1 tane mesajınızın bulunması gerekmektedir. (Bu konuya yorum yaparak başlayabilirsiniz. - Yorum yaptıktan sonra sayfayı yenilemeyi unutmayın.)
  6. İlk örnek olarak user tablsounun taşınması anlatılacaktır
1- ilk adım olarak hedef db içindeki en büyük userid numarasını bulmalıyız bunun için aşağıdaki sorguyu çalıştırın


PHP- Kodu:
SELECT MAXuserid FROM user


userid numarasını belirleyici unsur olarak alma sebebimiz user tablosunda PRİMARY KEY olmasıdır

Bulunan bu sonuç kaynak db deki artma miktarını gösterir
(Bendeki değer 21833)

Linkleri Görebilmek İçin Üye Olmalısınız. Üye Olmak için Tıklayınız.
Eğer üyeyseniz en az 1 tane mesajınızın bulunması gerekmektedir. (Bu konuya yorum yaparak başlayabilirsiniz. - Yorum yaptıktan sonra sayfayı yenilemeyi unutmayın.)

2- ikinci adım olarak kaynak db içindeki tüm userid numaralarını artma miktarı kadar artırmak, bunun için aşağıdaki sorguyu çalıştırın

PHP- Kodu:
UPDATE user SET userid=userid+21833 WHERE userid 

bunun sonucu olarak userid çakışmasını engellemiş olduk(Artık her iki db de aynı userid numarasına sahip olan kullanıcılar olamaz)

3- üçüncü adım olarak ilgil tabloyu (user) yedeklemekBU yedekleme işlemine bazı mySQL komutlar dahil edilmeyecektir bunun için mutlaka aşağıdkai komutu kullanın

PHP- Kodu:
mysqldump -u root -p123 --skip-opt -------t forumx user c:user.sql 

4- Dördüncü adım olarak usersql yedeğini hedef db içine aktaracağız (Aynı sunucu içinde yedekleme ve geri yükleme işilemi yapılacağı için karkater seti tanımlaması yapmadım)

Aşağıdaki komutu kullanarak yedeği yükleyin

PHP- Kodu:
  mysql -u root -p123 -f  forum c:user.sql 

5- userid çakışmasını artma miktarı ile önledik peki username çakışmasını nasıl önlayeceğiz? Bunun için aşağıdaki sorguyu çalıştırarak çift kayıtları (duplicate entry ) ekrana yazdıracağız


PHP- Kodu:
  SELECT username userid 
FROM user 
WHERE username IN
(
    
SELECT username 
    FROM user 
    GROUP BY username 
    HAVING COUNT
(*) > 1
    

ORDER BY username 

ve userid numarası artma miktarından (21833) büyük olan kayıtları sileceğiz (veya tam tersi ) Bu sorgudan sonra aşağıdaki gbi bir çıktı ile karşılaşacaksınız Buradan istediğiniz çift kayıttan birini silin




Kod:
+-----------+--------+ | username | userid | +-----------+--------+ | abuzer | 22209 | | abuzer | 6381 | | alex | 6210 | | alex | 21975 | | ali | 3757 | | ali | 22262 | | asdasd | 22494 | | asdasd | 5827 | | asdfgh | 7517 | | asdfgh | 22398 | | Black | 21863 | | black | 6105 | | bulut | 22412 | | bulut | 3472 | | canavar | 4990 | | canavar | 22265 | | conqueror | 22111 | | conqueror | 3601 | | emre | 21875 | | emre | 3731 | | erdem | 22394 | | erdem | 5103 | | erkan | 6452 | | ERKAN | 22520 | | fatih | 3853 | | fatih | 22204 | | FEARLESS | 22480 | | FeArLesS | 21594 | | gencfb | 6638 | | gencfb | 22202 | | hakan | 4000 | | hakan | 22029 | | HSYN | 22374 | | hsyn | 4907 | | kamer | 22250 | | kamer | 21500 | | kanka | 3969 | | kanka | 22094 | | kaya | 22271 | | kaya | 5413 | | leon | 5548 | | leon | 22173 | | mert | 22092 | | MERT | 3436 | | Pisiko | 5529 | | pisiko | 22252 | | s2000 | 3999 | | s2000 | 22019 | | sercan | 21985 | | sercan | 3417 | | serdar | 22 | | serdar | 22288 | | supra | 3584 | | supra | 21871 | | tespara | 21712 | | tespara | 22538 | | veron | 21504 | | veron | 22008 | +-----------+--------+


mesela userid numarası 22538 olan tespara adlı üyeyi kayıttan çıkarmak için aşağıdaki gibi bir sorgu çalıştırabiliriz

PHP- Kodu:
DELETE FROM user WHERE userid 22538 


Tespara

Konu kaptanblack tarafından (22-03-08 Saat 23:57 ) değiştirilmiştir..