|
Platform Bağımsız Mono için Platform Bağımsız Veritabanı : MySQL 5.0 Beta |
|
Gönderiliyor lütfen bekleyin... |
|
|
Merhaba,
bu makalede MySQL AB grubunun ürünü olan MySQL 5.0 ve maxDB ’nin neler içerdiğine
göz attıktan sonra Linux Fedora Core 2 üzerinde MySQL 5.0 Beta kurulumunu göreceğiz.
Amacımız platform bağımsız .NET için platform bağımsız veritabanını olan MySQL’i
incelemek.
Linux
platformunda olsun, windows platformunda olsun MySQL bize hiç yabancı olmayan
bir veritabanı. Bugün IBM en çok satan kurumsal uygulaması olan WebSphere’in
üzerinde çalıştığı 64bit’lik AIX’den, Linux’ın bir çok dağıtımına ve windows’da
dahil olmak üzere belkide MySQL’i gerçek anlamda platform bağımsız tek veritabanı
olarak nitelendirebiliriz. Yazılım firmaları bu bağımsızlığın ne kadar değerli
olduğunu bilirler çünki ihale açan karşı firma eğer AIX üzerinde çalışıyorsa
sizinde AIX üzerinde çalışmanızı şart koşar, bu yüzden belli bir platforma bağlı
kalırsanız büyük paralar kaybetme riskiniz vardır. Biz geliştiriciler için gerçek
anlamda işi kolaylaştırmaktadır. İşi kolaylaştırmak derken bileşenleri sürükleyip
bırakmaktan ziyade aynı impelementasyonları farklı platformlar üzerinde can
sıkıcı bir şekilde tekrar tekrar yapmamızı engeller. Örneğin .net aracılığı
ile geliştirdiğimiz bir web uygulamasını MSSQL’e bağımlı kılarsak uygulamamızı
Unix üstüne taşımak istediğimizde, mono bize IL kodlarını Unix üzerine taşımamıza
yardımcı olacaktır fakat ya veritabanı ? Evet veritabanını başka bir sunucuya
alarak bundan yırtabileceğimizi düşünüyorsunuz ama karşı firma buna asla izin
vermeyececektir çünki elindeki sistem uzmanları Unix sunucularının güvenliğini
ve bakımını sağlamaktan sorumludur ve buna göre seçilmiştir. Biliyoruz ki MSSQL
Unix üzerinde çalışmayacak veya wineHQ kütüphaneleri ile gerçekleştirilebiliyor
olsada bu çözümün hem çok uğraştırıcı hemde performansız olacaktır. Bu durumda
elimiz mahkum veritabanını değiştirmek zorunda kalacağız. En iyi senaryo olarak
uygulamanızın çok katmanlı olduğunu düşünebiliriz, bu şekilde harcamanız gereken
süre önemli ölçüde düşebilir çünki değiştirilmesi gereken sadece veritabanına
erişen katman olacaktır. Fakat ya MySQL kullanmış olsaydık ? Bu durumda hiçbir
çaba sarf etmeden nerdeyse tüm sunucu ve client platformlarını desteklemiş olucaktık.
Bir
çok kişi bugün MySQL’in Enterprise olarak nitelendirilen projelerde tercih edilmemesinin
sebebini "MySQL’in enterprise bir veritabanı yapısı taşımadığı" olarak
belirtiyordu. Peki nedir bir enterprise veri tabanından beklenen ? Öncelikli
tabiki güvenirlik (kararlılık) , performans ve ardından StoredProcedures
(Saklı Yordamlar) , Transactions (İşlem Bütünleri) .. gibi Sybase’in öne sürdüğü
arından MSSQL ’de gördüğümüz özellikler. Açıkcası bu geçmişte doğru idi
MySQL’in başlangıçtaki amacı ufak fakat hızlı bir veritabanı geliştirmekti.
Bugün bu misyonunu SQLite’a bıraktı ve kendisi enterprise bir veritabanı olma
yolunda adımlarını atmakta.
MySQL’in
güvenirliği ve performansı esasında referanslarından NASA ve YAHOO gibi veritabanı
yükü ağır olan kurumlar tarafından kanıtlanmıştır. Aşağıdaki performans ölçümleride
bu konuda sanırım biraz daha aydınlatıcı olacaktır. İlk göreceğiniz figür Kullanıcı
sayısı arttıkça sunucunun cevap sürelerini göstermekte, ikinci figür de kullanıcı
sayısı arttıkça erişebilinen web sayfası sayısını göstermekte. Performans ölçümleri
ile ayrıntılı kaynak kodunu ilgili referans’dan temin edebilirsiniz.
Referans:
http://www.eweek.com/article2/0,3959,293,00.asp
Peki
ya Enterprise bir veritabanından beklenen özellikler bugün MySQL 5.0 veya maxDB
ile sağlanabiliyormu?
PS: maxDB MySQL AB gurubu tarafından SAP
ERP (Enterprise Resource Planning) çözümleri uygulaması için geliştirilmiştir.
-
Stored
Procedures (Saklı Yordamlar)
-
Crusors
(İşaretçiler)
-
Views
(Görünümler)
-
Functions
(Fonksiyonlar)
-
Triggers
(Tetikçiler)
-
Transactions
(İşlem Bütünü)
-
Table
& Row Locking (Tablola ve Satırların Kitlenmesi)
-
Clustring
(Sunucuları Gruplandırma)
-
Sunucu
Yönetim Paneli
Stored
Procedures (SP): Sunucu tarafında derlenmiş olarak tutulan SQL kümesi olarak
tanımlayabiliriz. Bu küme içerisinde gönderilen parametreler ile birden fazla
SQL sorgusu gerçekleştirilebilir ve SQL sorgularının sonuçları belli bir program
mantığı ile işlenip ve gene parametre olarak çıktı döndürülebilir. Bildiğimiz
SQL sorguları çalışma zamanında sunucu tarafından derlenir, buna kıyasla SP’ler
yaratıldıktan sonra sadece ilk çalıştırıldıklarında bir kez derlenir ve derlenmiş
hali hafızada tutulur. Bu şekilde uygulamlar içerisinden direkt SQL sorgusu
yollamak yerine sunucu tarafında daha evvel tanımladığımız SP’leri çağırarak
performansı artırmak mümkündür. Keza MySQL çok sık kullandığımız SQL sorgularını
zaten kolay erişim için kendi hafızasında derleyip saklamakta fakat SP’ler Enterprise
uygulamaların vaz geçilmez öğeleridir çünki veritabanı yapısında yapılan değişiklikler
uygulamaya yansıtılmadan gene veritabanı içerisinde SP’leri düzenlemek koşuluyla
gerçekleştirilebilir.
Cursors:
Yarattığımız SQL sorguları sonucunda dönen satırları işaret ederler. Bu
şekilde saklı yordamlar içerisinde SQL ile çektiğimiz verileri adım adım işleme
şansımız bulunur.
Views:
Views ilişkilendirilmiş veri tablolarını, veritabanın uygulaması olarak birleştirip
tek bir tabloymuş gibi hareket etmenizi sağlayan ve SP ile aynı syntax’a sahip
bir yapıdır. Örneğin A tablosu ile B tablosu birbiri ile ilişkilendirilmiş olsun
fakat siz uygulamanızda tek bir görünüm ile bu tabloları gösteriyorsunuz. Bu
durumda bir views açarak A ve B arasındaki ilişkiye göre SQL sorgusunu oluşturduktan
sonra aynı SP’ler gibi bu views’u kayıt edebilirsiniz ve bundan sonra her view’u
çağırdığınızda size sonuç olarak birleştirilmiş bir tablo gelecektir.Aynı zaman
da Views’larda SP’ler gibi derlendiklerinden daha performanslıdırlar.
Functions:
Fonksiyonlar SP’ler içerisinde tekrarlama yapmanızı engellemek için çok önemlidir.
Örneğin id’si 1,2,3,4 olan kullanıcıları göstermek için bir SP yazdınız, burda
id’leri virgüllere göre ayırmanız gerekmekte bunun için ilgili bir fonksiyon
yazıp çıktınısını SP’ye gönderebilirsiniz bu şekilde hem SP’niz ufalır hemde
bu fonksiyonu ilerde başka SP’ler içerisinde kullanabilirsiniz. Başka bir avantajıda
DBA (DataBase Admin) ’ler tarafından uygulamaya hiç müdahale edilmeden optimizasyon
veya debug yapılması çok daha kolay olacaktır. Ek olarak fonksiyonlarda performansı
artıran önemli elemanlardan biridir ve gene derlenmiş olarak sunucu hafızasında
saklanır.
Triggers:
Bir tablo üzerinde değişiklik gerçekleştiğinde (UPDATE, INSERT, DELETE) tetikçileri
daha evvelden tanımlamış olduğunuz eylemi gerçekleştirirler. Örneğin silme işlemi
gerçekleştirildiğinde aynı kayıt uzantılarının diğer tablolardan silinmesini
sağlamak olabilir veya yeni bir kayıt girildiğinde ilgili kişiye mail atılmasını
sağlamak gibi. Aynı zamanda tetikçiler aynı veritabanını kullanan 3. parti bir
uygulamanın veri yapasına zarar vermesini engellemek için veritabanına direkt
erişimini engelleyip 3. parti uygulamayı ana veritabanında olan değişikler hakkında
haberdar etmek için çok kullanışlı çözümlerdir.
Transactions:
İşlem bütünleri bir dizi SQL sorgusunun veya SP’lerin çalıştırıması sonucu bir
simülasyon gerçekleştirir ve eğer bu sanal işlem sonrasında istisnai durum (hata)
gerçekleşirse veri bütünlüğünün bozulmaması için tüm yapılan işlemler iptal
edilebilir. Örneğin kullanıcı tablosuna yeni bir kullanıcı ekledikten sonra
başka bir tablodaki kullanıcı sayısını artırmak istiyorsunuz. Kullanıcı eklemekte
sorun çektiğimizi düşünelim burda uygulama tarafına dönüp SQL işaretçisinin
drumunun true veya false olduğunu kontrol ettirmektense bu iki işlemi bir Transaction
altında gerçekleştirir başarılıysa (COMMIT) ile gerçekleştiririz, başarısız
ise (ROLLBACK) ile sorgular yapılmamış gibi sayarız. İşlem bütünleri genelde
uygulama sunucusuile veritabanı sunucusu ayrı olarak tutuluyorsa kullanılmalıdır
çünki sizin sorgunuzu gerçekleştirdiğiniz süre içerisinde sunucu ile bağlantının
kopma ihtimali bulunmakta veya başka bir uygulama tarafından erişmek istediğiniz
tablo kitlenmiş olabilir bu ihtimallere karşı işlem bütünleri kullanılmalıdır.
İşlem bütününü kullanmak için yarattığınız tablo tiplerinin InnoDB olması
gerekmektedir.
Table
& Row Locking: Bu özellik birden fazla uygulamanın veya modülün eriştiği
tablolarda kullanılmak üzere tasarlanmıştır. Örneğin ürün fiyat listesinin tabloda
tutulduğu bir uygulamada müşteri ürünü alma butonuna tıkladığından başlayan
süreçten kredi kartından para çekilene kadar fiyatların değişmemesi gerekmektedir.
Bu durumda fiyat listesi tablosu kitlenir ve herhangibi operatörün ürün fiyatını
müşteri satın alma işlemini tamamlamadan, değiştirmesini engeller. Bazen tüm
tabloyu kitlemektense sadece spesifik satırı kitlemek daha sağlıklı bir yaklaşım
olabilir. MySQL içerisinde bulunan InnoDB tablo yapısı ile hem satır bazında
hemde tablo bazında kitlemeler yapabilirsiniz fakat MyISAM tablo yapısı ile
sadece tablo bazında kitleme yapabilirsiniz.
Tablo
Yapıları: MySQL ’de BerkleyDB , InnoDB ve MyISAM gibi tablo yapıları bulunmaktadır.
BerkleyDB daha çok hafıza düzeyinde optimizasyon için gereklidir fakat performans
ölçümlerinin pek parlak olduğu söylenemez. InnoDB yapısı MySQL’de ilk önce Max
eklentisi ile gelmiş ardınan 4.1 ’in ileris sürümlerinde standart özellik olarak
görülmüştür.İşlem bütünlerine, FY key(harici anahtar), satır bazında kitlemelere
ve en önemlisi veritabanı çakışmalarında geri alma (restore) gibi özellikleri
ile en güvenilir tablo yapısıdır aynı zamanda büyüklük sınırlaması dosya sisteminin
alabileceği en büyük dosya ile sınırlıdır. MyISAM MySQL tarafından en baştan
standart tablo yapısı olarak sunulmuştur, özelliği hızlı cevap verme yeteneğidir
fakat büyük verileri taşıması söz konusu olduğunda kararsızlık gözlenir bu durumda
büyük veri yapıları için InnoDB kullanılmalıdır.
Peki
tablo seçimi nasıl yapılmalıdır ? Bu konuda veri tabloları yapıları daha iyi
incelenmeli fakat kabaca yer sorunu yaşanıyorsa BerkleyDB, performans sorunu
yaşanıyorsa MyISAM, karalılık (stabilite) sorunu yaşanıyorsa InnoDB kullanılmalıdır.
Clustring:
Bir fiziksel veritabanı sunucusunun yetersiz kaldığı durumlarda aynı veritabanını
tutan farklı fiziksel sunucular gerekebilir. Bu durumda veritabanın gruplama
özelliğini desteklemesi gerekir. MySQL’de bunun için ayrı bir clustring eklentisi
ön görülmüş çünki çoğu zaman tek veritabanı yeterlidir.
Sunucu
Yönetim Paneli: Esasında bu DBA (veritabanı yöneticileri) veya uygulama
geliştiricileri için bir kolaylık sağlamakta. Uzun süre MySQL’in bu konuda bir
girişimi bulunmadı 3. parti yazılımlar ile bu sağlanılmaya çalışıldı fakat bugün
MySQL Sorgu Görüntüleyicisi (Query Browser) ve Yönetim Paneli (Administrator
Panel) olarak 2 kullanışlı uygulamayı bize sunuyor. Makalenin ileriki bölümlerinde
bu uygulamaların kurulmasına ve kullanışına gene deyinecez.
Peki
nedir bu MySQL Standart, MySQL Max ve maxDB ?
MaxDB: MySQL AB tarafından SAP.com için özel olarak üretilen MySQL ’den
bağımsız bir veritabanıdır. Amacı SAP uygulamasının tüm ihtiyaçlarını karşılamaktır
aynı zamanda SAP uygulaması için optimize edilmiştir. MySQL’e bağlantığınız
fonksiyonlar, kütüphaneler veya API ’ler ile maxDB’ye bağlanmanız ancak araya
bir proxy suncusu koyarak mümkün olabilmektedir.
MySQL
Start ve Max: MySQL’in max eklentisi daha çok tabloların kriptolanması veya
uygulama ile yapılan bağlantının kriptolanması için kullanılır. Aynı zamanda
bir sonraki MySQL sürümünün yeni özelliklerinin de eklendiği bir yapıdır. Örneğin
InnoDB tablo yapısı ilk önce max sürümünde tanıtılmış sonra standart sürüme
dahil edilmiştir. Eğer Max sürümündeki özelliklere elzem olarak ihtiyacınız
yoksa Standart sürüm kullanmanız tavsiye ediliyor çünki yeni özelliklerin karasız
olma ihtimali çok yüksek.
PS:
Belirttiğim temel özellikler MySQL ve maxDB sürümlerine göre farklılık göstermekte
fakat MySQL 5.0 sürümünde tabiki tümünü bulmanız mümkün, sadece tetikliyiciler
maxDB’de bulunmakta.
MySQL 5.0 ile gelen yenilikler esasında bu kadar değil bunlara ek olarak performans
iyileştirmeleri, detaylı fonksiyonellikler gibi bir çok yenilik söz konusu fakat
bu yazıda amacımız genel olarak MySQL’de neler bulabileceğimize göz atmak. Artık
bu özellikleri kullanabileceğimiz örnekler için gerekli MySQL 5.0 kurulumu
gerçekleştirmeye geldi.
Fedora
Core 2.0 üzerinde MySQL 5.0 Kurulumu
Bir
önceki makalede VMWare üzerine Fedora Core 2 kurlumunu görmüştük bu seriyi bozmayıp
tekrar Fedora Core 2 üzerinde kurmuş olduğumuz sisteme nasıl MySQL 5.0 kurulumı
yapabiliriz ona bakacaz. Gerekli rpm kurulum dosyalarını
dev.mysql.com ’dan temin etmek mümkün. Burda çekmeniz gereken Linux x86
RPM downloads altında Server ve Client dosyaları. İlgili dosyaları /root
klasörü altına indirdikten sonra kuruluma başlayabiliriz. Eğer kurulum esnasında
tanımlı gelen mysql sürümünden kaynaklanan bazı uyarılar ile karşılaşırsak ilk
önce vericeği hataların kaynaklandığı paketleri tespit etmeliyiz. Bunun için
root klasörünün altında indirdiğimiz MySQL-server-5.0.0-0.i386.rpm dosyasını
yüklemeyi denemeliyiz. Hata vermez ise client kurulumunuda gerçekleştirebilirsiniz
ama aşağıdaki gri renkli hatalar ile karşılaşırsanız belirtilen adımları izleyiniz.
İhtiyacımız
olan kurulum dosyaları:
MySQL-server-5.0.0-0.i386.rpm
MySQL-client-5.0.0-0.i386.rpm
rpm
-ivh MySQL-server-5.0.0-0.i386.rpm
libmysqlclient.so.10 is needed by (installed) perl-DBD-MySQL-2.9003-4
libmysqlclient.so.10 is needed by (installed) mod_auth_mysql-20030510-4.1
libmysqlclient.so.10 is needed by (installed) php-mysql-4.3.4-11
burda
eski mysql versiyonun bağlı olduğu dosyaları görmekteyiz. -Uvh (güncelleme)
veya --force (zorlama) parametreleri ne yazık ki işinizi görmeyecektir. Bu durumda
bu paketleri kaldırmamız gerekiyor.
rpm
-e php-mysql-4.3.4-11
rpm -e mod_auth_mysql-20030510-4.1
rpm -e perl-DBD-MySQL-2.9003-4
perl-DBD-MySQL-2.9003-4 is needed by (installed) mysql-3.23.58.9
gördüğünüz
gibi eski mysql sürümüne bir bağlantı daha çıktı bu durumda eski mysql’i de
kaldırmamız gerekiyor. (ps: kurulum esnasında mysql’i seçmemiş olmama rağmen
bazı modüllerin bağlantısı yüzünden mysql client yüklenmiş durumda.)
rpm -e mysql-3.23.58.9 perl-DBD-MySQL-2.9003-4
(ps: -e = erease "silme") Artık kurulumumuzu gerçekleştirebiliriz.
rpm
-ivh MySQL-server-5.0.0-0.i386.rpm MySQL-client-5.0.0-0.i386.rpm
Eğer
MySQL’in servis olarak her sistem açılışında çalışmasını istiyorsak System
Settings -> Server Settings -> Services altında
mysql servisinin yanına tik attıkdan sonra servis konfigrasyonunu kayıt etmelisiniz.
service
mysql start
Query
Browser (Sorgu Görüntüleyicisi) ve Administrator Panel (Yönetim Paneli) Kurulumu
Gerekli
kurulum dosyaları: dev.mysql.com
mysql-administrator-1.0.13-linux.tar.gz
mysql-query-browser-1.0.7a-beta-linux.tar.gz
(gzip
-d "decompress" komutu .gz .tgz veya .Z uzantıların açılması için
kullanılır) /root altına indirdiğimiz dosyaları aşağıdaki komutlarla açabiliriz.
gzip
-d mysql-administrator-1.0.13-linux.tar.gz
gzip -d mysql-query-browser-1.0.7a-beta-linux.tar.gz
tar
-xvf mysql-administrator-1.0.13-linux.tar
tar -xvf mysql-query-browser-1.0.7a-beta-linux.tar
Konsola
mysql-administrator ve mysql-query-browser yazdığımızda karşımıza uygulamaların
gelmesini sağlamak için iki tane kısa yol belirtmemiz gerekmekte bunları /usr/bin/
klasörünün altına giderek...
cd
/usr/root
joe mysql-administrator
alttaki satırları text editörüne girdikten sonra CTRL+K sonra X ile kayıt ediniz.
#!/bin/sh/
/root/mysql-administrator/bin/mysql-administrator
şimdi
de query browser için kısa yol oluşturalım...
joe mysql-query-browser
#!/bin/sh/
/root/mysql-query-browser/bin/mysql-query-browser
kısa
yollara çalıştırma izni verilmesi
chmod
755 mysql-administrator
chmod 755 mysql-query-browser
Artık
terminal (konsol) ekranına hangi klasörde olursak olalım mysql-administrator
yazarak yönetim paneline giriş yapabiliriz. Eğer sonuna & işareti eklerseniz
konsoldaki işretcinizi geri alırsınız bu şekilde konsolu kullanmaya devam edersiniz
ama konsolu kapatırsanız yönetim panelide kapanır.
mysql-administrator
&
Connection
bölümünde listeden Open Connection Editor ile kendinize yeni bir bağlantı yaratabilirsiniz
ve sonraki kullanımlarınızda bunu listeden seçebilirsiniz. MySQL’i ilk yüklediğinizde
root şifresi boştur hiçbirşey girmenize gerek yok. Şifrenin nasıl değiştirilebileceğini
ilerde görücez. Burda gördüğünüz ve anlam veremediğiniz bir "Compress connection
data" özelliği uzaktaki sunucua bağlanıyorsanız bağlantı esnasında gidip
gelen text’lerin opsiyonel olarak sıkıştırılmasını bu şekilde band genişliğinin
azalmasını sağlar; evet msSQL’de böyle bir özellik yok. Aynı zamanda bu özelliği
Mono sürücülerinde de kullanabiliyoruz.
Yönetim
Paneli Ekran Görüntüleri
Server
Information ( Sunucu
Bilgisi )
Service Control ( Servis
Yönetimi )
Startup Parameters ( Başlangıç
Parametreleri ): MySQL kullanılacağı proje veya yapıya göre düzenlemek
mümkün. bu ayarlar daha çok kararlılık ve performans’ın artırılması için kullanılmaktadır.
Örneğin genel parametreler sekmesi içerisinde tanımlı tablo yapısı (default
storage engine) tanımsız gözükmektedir. Burda bu özelliği açıp InnoDB’ye alabilirsiniz
ardından InnoDB parametreleri sekmesinden Kurtarma (force recory) özelliğini
açabilirsiniz. Açıkcası MySQL ile kararlı uygulamalar geliştirmek istiyorsanız
iyi bir MySQL kitabı edinmenizi öneririm. ps: Bu bölüme
girerken my.cnf bulunamadı gibi bir hata ile karşılaşırsanız /etc/my.cnf ’yi
göstermeyi deneyiniz eğer /etc altında my.cnf yoksa panelin bir tane yaratmasına
izin verip ardından tekrar /etc/my.cnf’yi gösteriniz. Bu bölümde yaptığınız
değişikler parametre olarak my.cnf altına yazılacaktır.
User Administration ( Kullanıcı
ve Yetki Yönetimi ): root ’da dahil olmak üzere tüm kullanıcıları şifre
ve yetkilerini bu bölümden değiştirebilirsiniz. Hangi ip veya bilgisayardan
bağlanıp hangi veritabanına erişeceği ve hangi komutları çalıştırabileceğine
kadar bir çok yetki ayarı burdan gerçekleştirilebilir.
Server Connection ( Sunucu
Bağlantıları ): Anlık sunucu bağlantılarını gösterir. Örneğin uygulamanız
çalışırken kaç bağlantı açtığını burdan takip edebilir gerekli görürseniz pooling
kullanmaya burda karar verebilirsiniz.
Health ( Sağlık
)
Server Logs ( Sunucu
Kayıtları )
Backup ( Yedekleme
): Veri tabanlarının bir profil oluşturulduktan sonra yedeğinin alınmasını sağlar.
Bu profilleme sayesinde sunucu tarafından düzenli yedekler alınabilir. Aynı
zamanda yedekleme alınırken ne tur SQL sorguları gerçekleştirileceği burdan
ayarlanabilir örneğin tabloların kitlenmesi gerekip gerekmediği veya transaction
kullanıp kullanılmamasının kararı.
Restore Backup ( Yedeğin
Geri Alınması )
Replication Status ( Replikasyon
Durumu ): Bu bölüm Clustring özelliği eklemiş sunucular için replikasyon
ayarlarını içermektedir.
Catalogs ( Veritabanları
): Veritabanlarının ve veri tablolarının hafıza profillerini ve anahtarlama
yapılarını burdan takip edebilirsiniz.
sıra
sorgu görüntüleyicisinde...
mysql-query-browser
&
Sorgu
Görüntüleyicisi Ekran Görüntüleri
İleriki Makalelerimizde
Sorgu görüntüleyicisinin geliştirme esnasında nasıl kullanılacağını göreceğiz
ve MySQL’in geliştirdiği .NET sürücüleri ile MySQL uygulamaları geliştireceğiz.
Makale:
Platform Bağımsız Mono için Platform Bağımsız Veritabanı : MySQL 5.0 Beta Mono - Linux'ta .NET Ahmet İpek
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|