|
vBulletinde Database Hataları Düzeltmek
vBulletin Forumlarımızda zaman zaman Database hataları alırız bunları nasıl gideririz diye forum forum dolaşırız çözümü içinde çok zor yardım bulabiliriz.
Database hatalarını gidermek için çok iyi database uzmanı olmak gerekiyor ancak ben database uzmanı değilim kendim de bir forum yöneticisi olarak zaman zaman aldığım database hatalarını giderirken veya yardım forumlarında gördüğüm ve hataların nasıl giderilir hakkında zaman içinde tecrübe edindiğim kadarıyla bazı database hatalarını nasıl giderileceği hakkında bilgi vermeye çalışacağım.
Burada anlatmaya çalışırken şu sorunu şöyle çöz bu sorunu şöyle çöz yerine hataları düzeltmek nelere dikkat etmeliyiz bunu anlatmaya çalışacağım.
Önce şunu bilelim vBulletin install klasörün içinde mysql-schema.php diye bir dosya vardır Türkçe mysql şeması içinde vBulletine ait tüm tablolar var forumlarımızda alacağımız Database hatalarında eğer bir tablo yok diyorsa bu dosya içinden o tabloyu alıp yükleyeceğiz veya sütün yoksa o sütünü alıp yükleyeceğiz onun için bu dosya bize hep lazım olacak.
Şimdi mysql-schema.php dosya içindeki bir tabloyu nasıl alıp kullanabiliriz bir ona bakalım
Örnek:
$schema['CREATE']['query']['access'] = " CREATE TABLE " . TABLE_PREFIX . "access ( userid INT UNSIGNED NOT NULL DEFAULT '0', forumid SMALLINT UNSIGNED NOT NULL DEFAULT '0', accessmask SMALLINT UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY userid (userid, forumid) ) "; $schema['CREATE']['explain']['access'] = sprintf($vbphrase['create_table'], TABLE_PREFIX . "access"); |
Tablolar bölüm bölüm bu şekilde mevcutlar ama biz bunu böyle kullanamayız mesela böyle bir alandan sadece aşağıdaki alanı alacağız
CREATE TABLE " . TABLE_PREFIX . "access ( userid INT UNSIGNED NOT NULL DEFAULT '0', forumid SMALLINT UNSIGNED NOT NULL DEFAULT '0', accessmask SMALLINT UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY userid (userid, forumid) ) |
Burada da yine bir yeri düzelteceğiz bu CREATE TABLE " . TABLE_PREFIX . "access ( Satırdaki " . TABLE_PREFIX . " bu alanı çıkaracağız bunun anlamı eğer siz tablolarınızda önek kullanıyorsanız tablo adına önek eklemesi içindir yanı config.php dosya içindeki bu $config['Database']['tableprefix'] = ''; satırdaki boş iki kesme arasına bir şey girdiniz ise bu tablo önekidir veya boş ise tablo öneki kullanmıyorsunuz demektir
Örnek: $config['Database']['tableprefix'] = ''; kullanmıyorsunuz Örnek: $config['Database']['tableprefix'] = 'vB_'; kullanıyorsunuz
Eğer tablo öneki kullanıyorsak tablodaki bu CREATE TABLE " . TABLE_PREFIX . "access ( bu satırı CREATE TABLE vB_access ( diye böyle düzenleyeceğiz yada kullanmıyorsak CREATE TABLE access ( diye böyle düzenleyeceğiz yanı çift tırnaktan çift tırnağa kadar sileceğiz
Böyle olması gerekir:
CREATE TABLE access ( userid INT UNSIGNED NOT NULL DEFAULT '0', forumid SMALLINT UNSIGNED NOT NULL DEFAULT '0', accessmask SMALLINT UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY userid (userid, forumid) ) |
Bunu böyle sql sorguda gönderirsek Access diye bir tablo oluşturacaktır
vBulletin Forumlarda en fazla alınan Database hataları ya tablo yok diyor yada sütün yok diyor
Şimdi örnek hataları verelim ve nasıl giderilir ona bakalım Database hata mesajlarında dikkat edeceğimiz satır şu:
| MySQL Error : Table 'xxxxxx. announcement' doesn't exist |
Şimdi burada İngilizce okumak gerekir İngilizce bu "doesn't exist" kilime mevcut olmadığını söylüyor Bizde ne olmadığını anlamak için şuraya bakıyoruz:
'xxxxxx. announcement' bu iki kesme arasındaki metne bakıyoruz buradaki xxxxxx alanda sizin Veritabanınızın adını gösterir noktadan sonraki announcement bu ise tablonun adını bize söylüyor bizde artık anlıyoruz ki veritabanımızda announcement diye tablonun eksik olduğunu anlıyoruz ve hemen install klasörün içindeki mysql-schema.php dosyayı açıyoruz ve içinden announcement tablonun yapısını alıyoruz:
CREATE TABLE " . TABLE_PREFIX . "announcement ( announcementid SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, title VARCHAR(250) NOT NULL DEFAULT '', userid INT UNSIGNED NOT NULL DEFAULT '0', startdate INT UNSIGNED NOT NULL DEFAULT '0', enddate INT UNSIGNED NOT NULL DEFAULT '0', pagetext MEDIUMTEXT, forumid SMALLINT NOT NULL DEFAULT '0', views INT UNSIGNED NOT NULL DEFAULT '0', announcementoptions INT UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (announcementid), KEY forumid (forumid), KEY startdate (enddate, forumid, startdate) ) |
Hemen bunu ilk satırını düzenliyoruz aşağıdaki gibi ben burada tablo öneki kullanmıyorum
CREATE TABLE announcement ( announcementid SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, title VARCHAR(250) NOT NULL DEFAULT '', userid INT UNSIGNED NOT NULL DEFAULT '0', startdate INT UNSIGNED NOT NULL DEFAULT '0', enddate INT UNSIGNED NOT NULL DEFAULT '0', pagetext MEDIUMTEXT, forumid SMALLINT NOT NULL DEFAULT '0', views INT UNSIGNED NOT NULL DEFAULT '0', announcementoptions INT UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (announcementid), KEY forumid (forumid), KEY startdate (enddate, forumid, startdate) ) |
Ve bunu SQL sorguda çalıştırıyoruz artık eksik olan tablomuz artık eklenmiştir Demek ki doesn't exist metni bize tablonun olmadığı söylediğinde bunları yapmamız gerekiyor.
Şimdi sütün olmadığında neler yapacağız? Önce sütün nedir onu öğrenelim örnek yukarıdaki tablonun sütunlarının ne olduğunu anlatalım
Tablo Adı: announcement Sütunları: announcementid title userid startdate enddate pagetext forumid views announcementoptions
Evet, bularda sütunları bir tablonun sütunlarından biri eksik olduğunda nasıl bir hata alırız önü görelim:
| MySQL Error : Unknown column 'profilevisits' in 'field list' |
Böyle bir hata nedir? Burada bize diyor ki Alan listesi içinde 'profilevisits' sütunu bilinmiyor diyor Demek ki anlıyoruz ki bir tablomuzda bir sütun eksik onu oluşturmamız gerekiyor Peki hangi tabloda sütun eksik yine Database hata mesajına bakıyoruz
Invalid SQL:
UPDATE user SET profilevisits = profilevisits + 1 WHERE userid = 1;
MySQL Error : Unknown column 'profilevisits' in 'field list' |
Demek ki user tabloda eksikmiş ve hemen yine mysql-schema.php dosyaya giderek user tablodaki profilevisits satırı alıyoruz:
| profilevisits INT UNSIGNED NOT NULL DEFAULT '0', |
Şimdi bunu eklemek için sorgulama kodu yazalım
Bu koda user alana tablonun adını yazıyoruz ADD den sonra bir boşluk bırakarak mysql-schema.php dosyadan aldığımız sütun satırı ekliyoruz en sondaki virgülü almıyoruz dikkat!!!
| ALTER TABLE user ADD profilevisits INT UNSIGNED NOT NULL DEFAULT '0' |
Yine bu kodu SQL sorguda çalıştırdığımızda user tabloya profilevisits sütunu ekleyecektir ve sorunumuzu giderecektir.
Unutmamak gerekir bu eklediğimiz tablolar ve sütunlar içi boş b yüzden bunları eklemekle tüm sorunlar çözülmeyebilir çünkü siz forumu kurduğunuz günden beri forum faaliyetinde tabloların ve sütunların içlerine veriler yazılmıştır eğer bu tablolar ve sütunlar sizde silindiği için zaten verileri kaybetmişsinizdir demektir onun için tablo veya sütun silinse de önemli değil eklerim dememeniz gerekir.
Birde şunu kesinlikle unutmayalım veritabanı ile uğraşırken istemeden bir hata yüzünden bir bölümü veya tüm veriler kaybedebilirsiniz böyle bir sorun yaşamamak için önce yedek almanız önemle önerilir sonra böyle yap dediniz veritabanım silindi demek verilerinizi geri getirmez ben burada verdiğim örneklerde hiçbir hata yoktur ve kendim denediğim kullandığım bir yöntemdir eğer bir şeyin yanlış olması benim verdiğim değil anlatılanları dikkate almadığınız hata yaptığınız için olacağını unutmamanız gerekir
Ben burada şu sorunu şöyle yerine hata mesajları nasıl okumak gerekir ve nasıl giderilir onu anlatmaya çalıştım eğer bunu öğrenirseniz birçok veritabanı hatalarınızı yardım almadan anında giderebileceksiniz
Birçok forumlarda balık tutmayı değil balık vermeyi seçiyorlar çünkü üye sayıları çoğalacak çevrimiçi üyeleri çoğalacak çok konular açılacak böyle oldu mu siz her zaman her hata için forumları dolaşmak ve birilerinin cevap vermesini bekleyeceksiniz tabi doğru cevap verirseniz bunun şunun için söylüyorum veritabanı hatası örnek tablo yok diyor biri mesaj yazıyor tabloları optimize et diğeri bir cevap yazıyor sunucuda sorun olabilir buda sizin hata düzeltmenizi uzun süre almasına neden olur tabi ben o cevapları verenleri küçümsemiyorum kesinlikle ben dahil kimse mükemmel değildir onlar ellerinden geldiği kadar yardım etmeye çalışıyor bizim yaptığımız için benim burada dikkat çekmeye çalıştığım istemeden verilen yanlış çözümler sizin hatanızın düzelmesi uzun zaman alacağıdır yoksa kimseyi küçümsediğim yok yanlış anlaşılmasın.
Ben bu sitede forumlardan farklı bir açıdan anlatmaya çalışıyorum herkes kopyala yapıştır yerine kendisi bir şeyler yazsa daha çok çeşit kaynağa sahip olurduk.
BU WEB SİTEDEKİ TÜM İÇERİKLER BU SİTEYE AİTTİR VE KOPYALANMASINA KESİNLİKLE İZİN VERİLMEZ, BU SİTEYİ KAYNAK GÖSTEREREK SİZE ÇALMA HAKKINI VERMEZ, ŞEREFLİ İNSANLAR OKURLAR VE YARARLANIRLAR, ŞEREFSİZ İNSANLAR İSE ÇALARLAR VE KENDİ VEYA DİĞER WEB SİTELERDE YAYINLAYARAK KENDİNE MAL EDERLER. NOT: ÇALAN SİTELER BURADA AFİŞE EDİLECEKTİR.
Son Güncelleme ( Cuma, 27 Kasım 2009 19:13 )
|