14 Adımda MySQL Veri Tabanı Hakkında Her Şey

14 Adımda MySQL Veri Tabanı Hakkında Her Şey

14 Adımda MySQL Veri Tabanı Hakkında Her Şey

MySQL, çok kullanıcılı, çok iplikli, hızlı ve güvenilir bir SQL veri tabanı sunucusudur. MySQL hakkındaki tüm dokümanlar, http://www.mysql.com/ adresinden temin edilebilir.

MySQL, ücretsiz bir yazılımdır. GNU kamu lisansı altında kullanıma sunulmuştur. Bu konuda gerekli bilgi ise, http://www.gnu.org adresinden alınabilir. Şirketler için enterprise sürümü makul bir ücretle temin edilebilmektedir. MySQL’in kullanımı ile ilişkili bir hata yakalamışsanız ya da MySQL hakkında bir eleştiride bulunacak ya da soru soracaksanız, mysql@lists.mysql.com adresine bir e-mail gönderebilirsiniz. Mysqlbug adlı script ise şu ana kadar rapor edilen bugları içermektedir ve scripts dizini içinde bulunmaktadır. MySQL’in kullanımı ile ilişkili bir güvenlik bug’ı ile karşılaşırsanız bunu security@mysql.com adresinden bildirmelisiniz.

MySQL Nedir?

MySQL, bir veri tabanı yönetim sistemidir. Bunun yanında MySQL aynı zamanda bir ilişkisel veri tabanı yönetim sistemidir. Çünkü veri tabanının temsilinde temel veri modeli olarak ilişkisel model benimsenmiştir. Bu modelde, bilindiği gibi, veri tabanının veri bileşeni, bir tablolar kümesi içine yerleştirilmektedir. Veriyi farklı tablolar içine yerleştirmek bir esneklik saplar. Gerektiği zaman farklı tablolar arasında, içerdikleri aynı veri türündeki alanlar yardımı ile ilişki kurulabilir. MySQL içinde, veri tabanı yönetim sisteminin, veri tabanına erişim ve sorgulama işlemleri için kullandığı bileşen ise, standart SQL’dir.

MySQL, aynı zamanda bir açık kaynak yazılımıdır. Açık kaynağın anlamı, MySQL’li herhangi bir kişinin serbestçe kullanabilmesi yanında, MySQL’nin yapısında değişiklikler de yapabilmesidir. Herhangi bir kişi, MySQL’i, internet üzerinden, www.mysql.com adresinden indirerek kullanabilir ve bu iş için hiç bir ücret ödenmesi söz konusu değildir. MySQL kullanıcısı, isterse kaynak koda da erişebilir ve isterse üzerinde değişiklikler yapabilir. Bu konudaki kullanım kuralları GNU kamu lisansı çerçevesinde belirlenmiştir. Ancak herhangi bir kişi ya da kuruluş, ticari ürün desteği almak kaygısı ile, MySQL’ı bir ticari ürün statüsünde kullanmak istiyorsa bu durumda www.mysql.com adresinden bu işlemi de gerçekleştirebilir.

MySQL Özellikleri

MySQL’nın ilk planda öne çıkan özellikleri,

  • Çok hızlı işlem yapabilmesi.
  • Güvenilir ve kararlı olması.
  • Kullanımının kolay olması.

Ayrıca, MySQL’nin çok önemli bir avantajı da bizzat kullanıcıları tarafından geliştirilmiş olan, çok pratik bazı kullanım özelliklerine sahip olmasıdır. MySQL, çok büyük boyutlu veri tabanları yönetimi için ve bu amaçla kullanılan yazılım ürünlerinden daha iyi performanslı bir ürün olması iddiası ile geliştirildi. Geçen yıllar içinde bu amaca erişildiği söylenebilir. MySQL, çok zengin ve faydalı bir fonksiyonlar kümesine sahiptir. Bağlantı kalitesi, hız ve güvenlik faktörleri düşünüldüğünde, MySQL, Internet üzerindeki veri tabanlarına erişim bakımından çok uygun bir ürün olarak görünmektedir.

MySQL Teknik Özellikleri

MySQL, istemci-sunucu mimarisinde tasarlanmış bir veri tabanı yönetim sistemidir. Çok sayıda, farklı backend çeşitli istemci programlarını ve kütüphanelerini, yönetim araçlarını ve programlama arayüzünü destekleyen çok iplikli bir SQL sunucusundan oluşmuştur. MySQL ortamında kullanılabilecek çok sayıda destek yazılımı mevcuttur. Ayrıca popular tüm programlama dillerini de desteklemektedir.

MySQL’nin Temel Özellikler

MySQL’nin önemli karakteristikleri aşağıda sıralanmıştır:

  1. Çekirdek ipliklerini kullanarak tam çoklu iplik desteği sağlaması. İşletim sistemleri bilimindeki bu teorik kavramın pratikteki karşılığı şudur: donanım çok işlemili ise, bunu kolaylıkla destekler.
  2. C, C++, Eiffel, Java, Perl, PHP, Python ve Tcl API’lerini destekler. http://www.fichtner.net/delphi/mysql.delphi.phtml adresinden mysql.pas dosyası indirilerek Pascal ile iletişim sağlanabilir.
  3. Çok çeşitli platformlar üzerinde çalışabilir.
  4. Çok çeşitli ve zengin veri tiplerine sahiptir. İşaretli ve işaretsiz tam sayılar, FLOAT, DOUBLE, CHAR, VARCHAR, TEXT, BLOB, DATE, TIME, DATETIME, TIMESTAMP, YEAR, SET ve ENUM tipleri mevcuttur.
  5. Optimize edilmiş birleştirme modülü sayesinde çoklu birleştirme işlemlerini çok hızlı bir biçimde gerçekleştirir.
  6. SELECT-WHERE yapıları içinde kullanılabilecek çok zengin bir fonksiyon kütüphanesine sahiptir.
  7. Standart SQL’nin GROUP By ve ORDER BY kalıplarına tam bir destek sağlanmıştır. Ayrıca standart SQL’nin daha önce verdiğimiz, grup fonksiyonları için de eksiksiz destek sağlar.
  8. ANSI SQL ve ODBC yazılımında mevcut olan LEFT OUTER JOIN ve RIGHT OUTER JOIN kalıpları için de team bir destek sağlamıştır.
  9. Aynı sorgu içinde, farklı veri tabanlarından alınmış tabloları kullanma imkanı sağlar. Bu özellik, 3.22 sürümünden itibaren eklenmiştir.
  10. Sunucuya bağlandığınızda, tüm şifre trafiği, kripto edilmiş biçimde yönetilir. O nedenle son derece güvenlidir.
  11. Win31 için, ODBC desteği sağlar. Örneğin, MySQL sunucunuza bağlanmak için, Microsoft Access yazılımını kullanabilirsiniz.
  12. İndeks sıkıştırma işlemleri için, çok hızlı ağacı tabloları kullanır. Tablo başına 32 indekse kadar kullanım imkanı mevcuttur. her indeks, 1-16 kolon arasında ya da kolonların bazı kısımlarından itibaren olabilir. Maksimum indeks uzunluğu 500 byte’tır. Bir indeks, CHAR ya da VARCHAR öneki kullanabilir.
  13. Sabit uzunlukta ya da değişken uzunlukta kayıtlar kullanılabilir.
  14. MySQL çok büyük boyutlu veri tabanlarını yönetebilir. Örneğin, 50 milyon kayıt içeren veri tabanlarını yönettiği uygulamalar mevcuttur. Ayrıca bazı uygulamalardaki bazı kullanıcıların MySQL ile 60000 tablo içeren veri tabanları üzerinde işlemler yaptığı rapor edilmiştir.
  15. tüm veriler seçilen bir karakter kümesi ile saklanır. Sıralam işlemi, seçilen karakter kümesine göre gerçekleştirilir.
  16. DELETE, INSERT, REPLACE ve UPDATE işlemlerinde kaç satırın işlemden etkilendiği rapor edilir.
  17. Sunucu, hata mesajlarını istemcilere çeşitli dillerde gönderebilir.
  18. İstemciler, MySQLs sunucusuna, TCP/IP soketlerini, Unix soketlerini ya da isimlendirilmiş boruları kullanarak bağlanabilirler.
  19. MySQL’e özgü SHOW komutunu kullanarak, veri tabanları, tablolar ve indeksler hakkındaki bilgilere erişmek mümkündür.
  20. EXPLAIN komutunu kullanarak, eniyileyici tarafından, bir SQL sorgusunun nasıl çözümlendiği konusunda bilgi almak mümkündür.

MySQL Kararlılığı

MySQL kararlı bir sistem midir? Başka bir deyişle, büyük botlu ve güvenliğin de önemli olduğu projelerde MySQL’e ne kadar güvenilebilir? Bilgisayarcıların argosu ile system sık sık çöker mi?

Bu yazımızda bu konulara, literatürde mevcut verilere dayanarak değineceğiz. Literatürde, MySQL’ı uzun yıllardır çeşitli projelerinde sorunsuz olarak kullandığını belirten bir çok firma mevcuttur. ABD’deki TcX bunlardan biridir. Ayrıca, belirtildiğine göre, MySQL’ın her yeni sürümü, bir öncekine göre çok daha fazla özellik içermesine rağmen, taşınabilirlik açısından ise, bir önceki sürüme göre daha az problem oluşturmaktadır. MySQL, çok sayıda katmandan ve birbirinden bağımsız farklı modüllerden oluşmuştur.

Diğer Veritabanı Yönetim Sistemlerinin Pek Çoğunda Mevcut Olup MySQL’de Olmayan Özellikler

  1. MySQL’de alt sorgu olanağı yoktur.
  2. MySQL’de ”depolanmış yordam” adı verilen ve SQL deyimlerinden oluşan modüller mevcut değildir.
  3. MySQL’de, trigger veya yabancı anahtar kısıtları mevcut değildir.
  4. MySQL’de sadece tablo düzeyinde kilitleme özelliği mevcuttur.

MySQL-Copyright ve Lisans Özellikleri

MySQL için, GPL lisansını, uygulamanız açısından yeterli görmeyip ticari bir lisans edinmek isterseniz bu durumda, https://order.mysql.com/license.htmy adresinden bunu sağlayabilirsiniz. Normal firma içi dahili kullanımlarda MySQL ücretsizdir, herhangi bir yere herhangi bir ödeme yapılması gerekmez. MySQL istemci olarak kullanılıyorsa ticari lisans almak gerekmez.

Ancak ağ üzerindeki ticari uygulamalarda, bir sunucu üzerinde kullanılıyorsa bu durumda ticari lisans almak gerekebilir. Bu konuda, yukardaki adrese danışabilirsiniz.

MySQL Hangi İşletim Sistemleri Altında Çalışır?

MySQL, Posix iplikleri ile ve bir C++ derleyicisi ile çalışabilen tüm modern işletim sistemleri üzerinde çalışabilir. Sadece istemci kodunun derlenmesi amacı ile C++ derleyicisi gerekir. MySQL’nin aşağıda listesi verilen işletim sistemleri/pilik paketleri ile başarı ile çalıştığı bildirilmiştir:

  1. IBM AIX 4.x ve orijinal iplikleri.
  2. BSDI 2.x ve MIT-pthreads paketi.
  3. BSDI 3.0, 3.1, 4.x ve orijinal iplikleri.
  4. DEC Unix 4.x ve orijinal iplikleri.
  5. FreeBSD 2.x ve MIT-pthreads paketi.
  6. FreeBSD 3.x ve 4.x orijinal iplikleri (threads) ile.
  7. Hp-UX 10.20 ve MIT-pthreads paketi.
  8. HP-UX 11.x orijinal iplikleri ile.
  9. Linux 2.0+ ve LinuxThreads 0.7.1+ veya glibc 2.0.7+
  10. Mac OS X Server.
  11. OpenBSD >2.5 orijinal iplikleri ile. OpenBSD <2.5 MIT-pthreads paketi ile.
  12. OS/2 Warp 3, FixPack 29 ve OS/2 Warp 4, FixPack 4.
  13. SGI Irix 6.x orijinal iplikleri ile.
  14. Solaris 2.5 ve orjinal iplikleri. SPARC ve x86 üzerinde.
  15. SunOS 4.x MIT-pthreads paketi ile.
  16. SCO OpenServer ve FSU Pthreads paketi ile.
  17. SCO UnixWare 7.0.1.
  18. Tru64 Unix
  19. Win95, Win98 NT, and Win2000.

MySQL Sürümlerini İsimlendirme Biçimi

MySQL isimlendirme şeması, 3 adet sayı ile bir son ekten oluşur.

Örneğin,

Mysql-3.21.17-beta

isimlendirme için bir örnektir. Burada ilk sayı olan 3 dosya formatını göstermektedir. 3 ile başlayan tüm sürümler aynı dosya formatına sahiptir. 4 ile başlayan bir sürüm ortaya çıkınca dosya formatı değişmiş demektir bu durumda tüm tablolar yeni dosya formatına dönüştürülmelidir. İkinci sayı 21, sürüm düzeyini göstermektedir. Genel olarak belirli bir anda bir kararlı sürüm bir de yeni geliştirilmekte olan sürüm mevcuttur. Şu an için kararlı sürüm 22, yeni geliştirilmekte olan ise 23’tür. Normal olarak her ikisi de kararlıdır ancak yeni geliştirilmekte olan sürüm için belgelendirme eksikliği olabilir yani yeni eklenen bazı özellikler belgelendirilmemiş olabilir. Üçüncü sayı ise, aynı sürüm düzeyi içindeki sürüm numarasıdır. Bu sayı her yeni dağıtımda arttırılır. Genellikle seçilen sürüm düzeyi için en son sürüm numarası tercih edilir.

Kurulum Esasları

Bu yazımızda, MySQL’nin kurulumu hakkında bazı tamamlayıcı bilgiler bulunuyor. Binary ve kaynak dağıtımların kurulumunda bazı default dizinler mevcuttur. MySQL’nin binanry dağıtımı, kurulum yerinde bazı paketlerin açılması ve aşağıdaki dizinlerin oluşturulması ile kurulur. Kurulum yeri tipik olarak,

/usr/local/mysql

Şeklinde belirlenir.

MySQL Binary Dağıtımının Kurulumu

MySQL’nin binary dağıtımının kurulumu için aşağıdaki araçlara ihtiyacınız olacaktır:

  1. Dağıtımın açılması için GNU gunzip yazılımı.
  2. Dağıtıma ait paketlerin çözülmesi için uygun bir tar yazılımı. GNU, tar bu konuda problemsiz çalışmaktadır. Sun tar’da ise problemler çıktığı bildirilmiştir.

Linux altında alternatif bir kurulum metodu da, RPM dağıtımlarını kullanmaktır. Oluşan problemleri mysql@lists.mysql.com adresine gönderirken, mysqlburg’ı kullanınız. mysqlburg programı, bin dizinin içindedir. MySQl’nın ikili dağıtımının kurulumu ve kullanımı için icra etmeniz gereken temel komutlar aşağıda verilmiştir:

shell>groupadd mysql

shell> useradd -g mysql mysql

shell> cd/usr/local

shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf –

shell> In -s mysql-VERSION-OS mysql

shell> cd mysql

shell> scripts/mysql_install_db

shell> chown -R mysql /usr/local/mysql

shell> chgrp -R mysql/ usr/local/mysql

shell> bin/safe_mysqld –user=mysql &

Linux RPM Notları

MySQL’nin Linux altında kurulumu için tavsiye edilen yol, bir RPM dosyasının kullanılmasıdır. MySQL RPM’leri normal olarak, RedHat Version 6.2’de bulunmaktadır.

Kullanmak isteyeceğiniz RPM dosyaları;

  1. MySQL-VERSION.i386.rpm MySQL sunucu (server).
  2. MySQL-client-VERSION.i386.rpm .MySQL istemci (client programlar).
  3. MySQL-bench-VERSION.i386.rpm Test ve benchmark programları. Perl ve msql-mysql-modul RPm’lerini gerektirir.
  4. MySQL-devel-VERSION.i386.rpm
  5. Perl modülleri gibi diğer MySQL istemcilerini derlemek isterseniz gerekli olan kitaplık fonksiyonları ve include dosyaları.
  6. MySQL-VERSION.src.rpm

Bu, yukardaki paketlerin tümünün kaynak kodlarını içerir. Ayrıca, diğer mimariler için de RPM’ler oluşturmak amacı ile de kullanılabilir. Bir RPM paketinizdeki tüm dosyaları görmek için, aşağıdaki komutu çalıştırınız:

shell> rpm-qpl MySQL-VERSION.i386.rpm

Standart minimum bir kurulum sağlamak için aşağıdaki komutu giriniz:

shell> rpm -i MySQL-VERSION.i386.rpm MySQL-client-VERSION.i386.rpm

Sadece istemci paketinin kurulumu içinse, aşağıdaki komutu giriniz:

shell> rpm -i MySQL-client-VERSION.i386.rpm

RPM, veriyi, /var/lib/mysql dizini içine yerleştirir. RPM ayrıca, ön yükleme zamanında sunucuyu otomatik olarak başlatabilmek için, uygun girişleri de /etc/rc.d/ dizini içinde oluşturur. RPM dosyalarının kurulumundan sonra, mysqld daemon’u çalıştırılmalıdır. Artık MySQL’ı kullanmaya başlayabilirsiniz.

İstemci Programları Oluşturma

Yazdığınız MySQL istemci programlarını ya da elde ettiğiniz üçüncü parti ürünleri derlerseniz, bunlar, link komutundaki -Imsqylclient seçeneği kullanılarak link edilmelidir. Ayrıca linker’a kütüphaneyi nerede bulabileceğini bildirmek üzere -L opsiyonunu kullanmalısınız.

Örneğin kütüphane

‘/usr/local/mysql/lib’, dizininde ise, link komutunda,

-L/usr/local/mysql/lib -Imysqlclient

ifadesini kullanmalısınız. MySQL başlık dosyalarını kullanan istemci programlar içinse, derleme esnasında -I opsiyonunu kullanmalısınız.

Örneğin,

-I/usr/local/mysql/include

ifadesindeki gibi. Böylece derleyici başlık dosyalarından haberdar olacaktır.

MySQL Kaynak Dağıtımlarının Kurulumu

MySQL’nın bir kaynak dağıtımını kurmak ve çalıştırmak için aşağıdaki araçlara ihtiyacınız olacaktır:

  1. Dağıtımın açılması için GNU gunzip yazılımı.
  2. Dağıtıma ait paketlerin çözülmesi için uygun bir tarz yazılımı. GNU tar, bu konuda problemsiz çalışmaktadır. Sun’tar da ise problemler çıktığı bildirilmiştir.
  3. Çalışan bir ANSI C++ derleyicisi.gcc>=2.8.1, egcs>=1.0.2, SGI C++ ve SunPro C++ bu amaçla sorunsuz olarak kullanılabilecek derleyicilerden bazılarıdır.

Gcc kullanıyorsanız, libg++’ya ihtiyaç yoktur.

MySQL’in kaynak dağıtımını kurmak için icra edilmesi gerekli temel komutlar aşağıda listelenmiştir:

shell> groupadd mysql

shell> useradd -g mysql mysql

shell> gunzip < mysql-VERSION.tar.gz | tar -xvf –

shell> cd mysql-VERSION

shell> ./configure –prexif=/usr/local/mysql

shell> make

shell> make install

shell> scripts/mysql_install_db

shell> chown -R mysql /usr/local/mysql

shell> chgrp -R mysql /usr/local/mysql

shell> /usr/local/mysql/bin/safe_mysqld –user=mysql &

Bir kaynak RPM’den başlıyorsanız, aşağıdaki işlemi gerçekleştiriniz:

shell> rpm –rebuild MySQL-VERSION.src.rpm

Bu işlem sayesinde kurabileceğiniz bir binary RPM oluşturabilirsiniz.

Tipik Konfigürasyonlar

Konfigürasyon scripti sayesinde, MySQL dağıtımın nasıl konfigüre edeceğiniz konusunda önemli bir kontrol imkanına kavuşursunuz. Bunu gerçekleştirmek iççinse, işletim sisteminin komut satırında configure komutunu kullanmalısınız. Ayrıca ortam değişkenlerini kullanarakta konfigürasyonu değiştirebilirsiniz. Configure komutu ile yapabileceklerinizin bir listesini görmek için aşağıdaki komutu kullanınız:

shell> ./configure -help

Aşağıda, daha yaygın olarak kullanılan konfigürasyon seçenekleri konusunda bazı örnekler verilmektedir:

Sunucuyu dışarda bırakarak sadece istemci programlarını ve kitaplık fonksiyonlarını derlemek için without-server seçeneğini kullanınız:

shell> ./configure –without-server

Bir C++ derleyiciniz yoksa, mysql, derlemeyi yapmayacaktır. Bu durumda C++’a gereksinim duyan kodu configure işlemini katmayınız. Bu durumda yukardaki komut ile mysql genle oluşturulacaktır ancak mysql.cc ile ilişkili gelecek olan uyarıları dikkate almayınız. Log dosyalarınızın ve veri tabanlarının /usr/local/var dizininde bulunmasını istemiyorsanız, aşağıdaki gibi configure komutlarını deneyiniz:

shell> ./configure prefix=/usr/local/mysql

shell>./configure –prefix=/usr/local

–localstatedir=/usr/local/mysql/data

İlk komut, kurulum ön ekini değiştiriyor yani buna göre, default olarak /usr/local da kurulacak olan her şey, şimdi /usr/local/mysql de kurulacaktır.

İkinci komut ise, normal olarak default durum olan veri tabanlarının /usr/local/var dizinine yerleşmesi durumunu değiştirmekte ve veri tabanlarının bundan sonra /usr/local/mysql/data dizinine yerleşmesini sağlamaktadır. Unix kullanıyorsanız ve MySQL soketinin default konumu olan //tmp dizini ya da /var/run dizininden başka bir yere yerleşmesini sitiyorsunuz aşağıdaki configure satırını kullanınız:

shell> ./configure –with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock

Burada verilen dosya ifadesi, mutlak bir yol adını göstermelidir! Statik olarak link edilmiş olan programları derlemek istiyorsanız, configure komutunu aşağıdaki gibi kullanınız:

shell> ./configure –with-client-Idflags=-all-static –with-mysqld-Idflags=-all-static

gcc derleyicisini kullanıyorsanız libg++ veya libstdc++ kurulu değilse, gcc’yi C++ derleyiciniz olarak kullanacağınızı aşağıdaki configure komutu ile anlatabilirsiniz:

shell> CC=gcc CXX=gcc ş/configure

Bu durumda gcc’yi C++ derleyiciniz olarak kullanacaksınız ve gbb, libg++ ya da libstdc++ ile bağlantı kurmaya teşebbüs etmeyecektir. MySQL’nin, NULL olmayan sütunlar için DEFAULT değerler kullanmasını engelleyebilirsiniz. (NULL olmayan sütunlar, mutlaka bir değer atanması gerekli olan sütunlardır ve normal olarak MySQL bunlar için önceden tanımlanmış (default) değerler atayacaktır).

Bunun sonucunda, INSERT deyimini kullanırken, NULL olmayan tüm sütunlar için geçerli atamayı yapmazsanız hata oluşacaktır. Default değerlerin kullanımını engellemek için, configure deyimini aşağıdaki gibi kullanınız:

shell> CXXFLAGS=-DDONT_USE_DEFAULT_FIELDS ./configure

Default olarak, MySQL, ISO-8859-1 karakter setini kullanmaktadır. Default karakter setini değiştirmek için, –with-charset opsiyonunu kullanınız:

shell> ./configure –with-charset=CHARSET

CHARSET, aşağıdakilerden biri olabilir:

big5, cp1251, cp1257, czech, danish, dec8, dos, euc_kr, gb2312, gbk, german1, hebrew, hp8, hungarian, koi8_ru, koi8_ukr, latin1, latin2, sjis, se7, tis620, ujis, usa7, win1251ukr.

Herhangi bir tablo oluşturduktan sonra karakter setini değiştirirseniz

Mysiamchk-r -g

komutunu her tablo için kullanınız. Aksi takdirde indeksleriniz hatalı biçimde sıralanabilir. MySQL’ı, hata ayıklama kodu ile konfigüre etmek için ,,–with-debug opsiyonunu kullanınız.

shell> ./configure –with-debug

Bu gönderiyi paylaş

Bir cevap yazın