MySQL/Startup Guide/tr

Bu belgede MySQL kurulumu ve kullanımı hakkında bilgi verilmektedir.

Arkaplan
MySQL birçok alanda kullanılan popüler bir veritabanı sunucusudur. SQL'in açılımı (S)tructured (Q)uery (L)anguage yani "yapısal sorgulama dili"dir ve MySQL diğer uygulamalar ile bu dil üzerinden anlaşır. Ayrıca standart SQL dilinin üzerine kendisine has bazı özellikler eklemiş durumdadır. Bu belgede MySQL kurulumu, veritabanı/tabloların ayarlanması ve kullanıcı işlemlerine değineceğiz. Kurulum ile başlayalım.

MySQL Kurulumu
Öncelikle sisteminizde MySQL'in kurulu olduğuna emin olun. MySQL'i özel bir ihtiyacınıza göre kullanacaksanız kurarken doğru USE bayraklarını seçtiğinize emin olun.

Kurulumun tamamlanmasının ardından şöyle bir mesaj göreceksiniz:

MySQL einfo bilgi mesajı (Eğer bu yeni bir kurulum ise "emerge --config =dev-db/mysql-[sürüm]" komutunu çalıştırmak isteyebilirsiniz.)

Bu yeni bir kurulum olduğu için, komutu çalıştırıyoruz. MySQL veritabanını yapılandırırken 'a basmanız gerekiyor. Yapılandırma sırasında MySQL'in kendi bilgilerini (kullanıcılar, izinler gibi) tutan mysql isminde ana veritabanı oluşturulur. Yapılandırma sihirbazı mümkünse root (yönetici) parolanızı değiştirmenizi isteyecektir. Başka birisinin kolayca MySQL yöneticisi yetkilerine sahip olmaması için bunu yapmamız gerekmekte.

Bazı bilgiler sadelik açısından çıkartılmıştır.

Sihirbaz parolayı atamamız için gerekli komutları iletmiş görülüyor, komutları çalıştıralım.

MySQL sunucusuna girmeye çalışarak yeni parolanızı test edebilirsiniz.

parametresi giriş yapacak olan kullanıcıyı,  ise sunucuyu belirtir. Uzak bir sunucuya bağlanmıyorsanız sunucu değeri genellikle 'tur. parametresi de sunucuya giriş için bir parola gireceğinizi belirtir. Giriş yaptıktan sonra MySQL'e vereceğimiz komutları bize sağladığı  ile belirttiği ekranda vereceğiz. Yetkili kullanıcı ile MySQL'e giriş yaptığımız için artık veritabanımızı ayarlamaya başlayabiliriz.

Yeni Veritabanı Oluşturma
Giriş yaptık ve mysql ekranını görüyoruz. Öncelikle hangi veritabanlarının sistemde var olduğuna bakalım. Bunun için  komutunu kullanıyoruz.

Zaten var olan veritabanlarını görüyorsunuz. Ancak biz kendi veritabanımızı yaratacağız. Bu işlem için  komutunu kullanıyoruz. "gentoo" isminde bir veritabanı yaratalım.

Bu tepkinin anlamı verdiğimiz komutun herhangi bir hata oluşmadan çalıştırıldığıdır. Şu anda 1 satırda değişiklik yapılmış. Bu bilgi veritabanlarının bilgisini tutan "mysql" isimli veritabanına işaret ediyor. Arkaplan ile ilgili fazla endişelenmenize gerek yok. Son bilgi ise komutun çalışmasının ne kadar sürdüğü. Oluşturmuş olduğumuz veritabanını görmek için  komutunu verelim.

Veritabanımız gerçekten de oluşturulmuş görülüyor. İçerisindeki tablo yapısında değişiklikler yapabilmemiz için veritabanımızı seçili veritabanı durumuna getirmemiz gerekiyor. Bunun için de  komutunu kullanmalıyız. Dilerseniz giriş sırasında  parametresi ile seçili veritabanına direkt giriş de yapabilirsiniz. Şimdi "gentoo" veritabanına geçelim.

Şu anda gentoo veritabanına giriş yaptık ve kullanıyoruz. Şimdi bazı tablolar oluşturup içlerine bilgiler girelim.

Tablo Oluşturmak
MySQL'in yapısında veritabanları, tablolar, kayıtlar ve alanlar bulunmaktadır. Veritabanları tabloları, tablolar kayıtları, kayıtlar da gerçek veriyi tutan alanları barındırır. Bu yapı kullanıcının veriye dilediği gibi ulaşmasını sağlar. Şimdiye kadar sadece veritabanları ile uğraştık. Şimdi tablolara bakalım. Öncelikle, tabloların görüntülenmesi işlemi de aynı veritabanlarında olduğu gibi  komutu ile gerçekleştirilir. Ancak henüz gentoo veritabanında bir tablomuz yok, bu yüzden şöyle bir çıktı alacağız:

Yani önce bazı tablolar yaratmamız gerekiyor. Bu iş için  komutunu kullanıyoruz. Ancak bu komut  komutundan biraz farklı çalışıyor ve bazı değerler vermemizi istiyor. Yapısı şu şekilde:

CREATE TABLE Yapısı

tablo_adı bölümüne oluşturacağımız tablonun ismi. Bu örnekte tablonun ismini  yapalım. Bu tabloda geliştiricilerin ismini, e-posta adresini ve mesleklerini barındıracağız. bölge_adı bilgiyi taşıyacak alanın adıdır. Bu durumda 3 tane bölgemiz olacak; isim, eposta ve meslek. bölge_veri_türü de saklayacağımız verinin türünü belirtiyor. Veri saklama formatlarını MySQL sütun türleri sayfasında bulabilirsiniz. Biz kendi amaçlarımız için tüm bölgeler için  kullanacağız. Yalnızca yazı saklayacaksanız  kullanabileceğiniz en basit veri türlerinden birisi. boyut ise tablodaki tek bir bölgenin alabileceği en büyük boyutu belirtiyor. Biz 128 kullanacağız. Yani her bölge en fazla 128  veri içerebilecek. Şu anda bunu "128 karakter" olarak düşünebilirsiniz. Ne yapacağımızı artık biliyoruz, hadi tabloyu oluşturalım.

field_name will contain the name of the field. We have 3 required names in this case: name, email, and job.

The field_data_type is what type of information will be stored. The different formats available can be found at the MySQL Column Types Page. For our purposes, we'll use the  data type for all of our fields. is one of the simplest of data types when it comes to working with strings.

size is how much of data a single field will store. In this case, we'll use 128. This means that the field can have  data that is 128 bytes. You can safely think of this as 128 characters for the time being, though there is a somewhat more technical explanation that the above site will provide you with. Now that we know how we are going to create the table, let's do it.

Görünüşe göre tablomuz oluştu. komutuyla kontrol edelim:

Evet, tablomuz burada ama içeriği ile ilgili pek bilgi yok. Bunun için  ("açıkla", kısa kullanım için  ) komutunu kullanacağız. Bakalım developers tablosunda neler var.

Çıktıda bölgeler ve türleri ile birlikte bu belgede değinmeyeceğimiz bazı bilgiler de bulunmakta. Daha fazla bilgi için MySQL belgelerini inceleyebilirsiniz. Artık üzerinde çalışacağımız tablomuz da var. Sıra doldurmaya geldi.

MySQL Veritabanını Doldurmak
Veri eklemek için  komutunu kullanıyoruz. Bu komut da  gibi özel yapıya sahip:

INSERT Yapısı

Bu komut bir tabloya veri girişi yapmak için kullanılır."tablo" yerine tablonun adı yazılır ve ardından verinin girilmesi istenen sütun adlarının listesi yazılabilir. bölümü de bu verileri içerir. Sırasıyla birden çok değer verdiyseniz sütun isimlerini yazmayabilirsiniz. Örnek olarak developers tablosuna veri ekleyelim:

Sonuca göre veri doğru şekilde yüklendi. Peki çok sayıda veri eklemek istersek? Bunun için de  komutunu kullanacağız. Bu komut sekmelerle ayrılmış veriler içeren bir dosyadan veriyi içe aktarmayı sağlar. Hadi bunu ev dizinimizde aşağıdaki içeriğe sahip isimli bir dosya oluşturup deneyelim:

~/kayitlar.txt

nispeten karışık bir kullanıma sahip, ancak basit bir şekilde kullanacağız.

LOAD DATA Yapısı

yerine dosyamıza giden tam yolu yazıyoruz. Bizim ev dizinimizde olduğu için bu şeklinde.

Bu da çalıştı. Ancak genelde birçok web uygulaması MySQL'e hızlıca veri girişi için MySQL scriptlerini kullanır. Bunlar MySQL komutları içeren dosyalardır. Böyle bir script kullanmak istiyorsanız işte yöntemi:

gibi, burada da dosyasının içeriğinden emin olun. Hatalı işlem veritabanınıza zarar verebilir! Bu işlemi gerçekleştirmenin bir yolu da  komutu kullanmaktır. Bu komut MySQL içerisindeyken bir dosyayı içe aktarmanızı ve içerisindeki komutları çalıştırmanızı sağlar. İşte örneği:

Eğer bir web uygulaması bir script çalıştırmak istiyorsa yukarıdaki iki yöntemle işlemi yapabilirsiniz. Artık tablolarımız da dolu olduğuna göre, alanlara bir bakalım. Bunun için sorgular ile arama yapacağız.

MySQL Tablolarını Sorgular ile Gezmek
Sorgular SQL veritabanlarının en önemli bileşenlerindendir. Tablolardaki verileri kullanışlı bilgiye çevirmeye yararlar. Çoğu sorgu  komutuyla yapılır. komutu oldukça karmaşık şekillerde kullanılabilir ancak biz üç temel kullanım şekline değineceğiz.

SELECT sorgu çeşitleri

İlk şekline hızlıca bakalım. Nispeten basit ve tablodaki tüm verileri önünüze seren bir sorgu. Kendi tablomuzda çalıştırıp sonucu görelim.

Hem  hem de   ile eklediğimiz verilerin tamamı burada. Şimdi sadece Chris White'a ait verileri getirelim. Bunun için örnekteki ikinci sorguyu kullanabiliriz.

Umduğumuz gibi, sadece istediğimiz kişiye ait bilgiler geldi. Şimdi de bir koşul daha ekleyerek kişinin sadece mesleğini ve e-posta adresini getirelim. Bunun için örnekteki üçüncü sorguyu kullanabiliriz.

Bu türde seçimler, özellikle büyük verilerle uğraşırken işimizi oldukça kolaylaştırmakta.

Şimdiye kadar MySQL üzerinde root kullanıcı olarak tüm yetkiler ile dilediğimizi yaptık. Ancak bir sunucu ortamında bu şekilde bir yetkilendirme mümkün olmayacaktır. Kimin neyi yapabileceğine izin verebilmek için yetki ayarları yapmamız gerekmekte.

GRANT İle Yetki Atama
Yetkiler kullanıcıların veritabanlarına, tablolara ve aşağı yukarı herşeye nasıl erişim sağlayacağını belirler. Şu anda oluşturduğumuz gentoo veritabanındaki yetki dağılımına göre yalnızca erişim yapabilecek olan kullanıcı, MySQL'in root kullanıcısı. Şimdi guest ve admin isminde iki tane genel kullanıcı oluşturup bu veritabanında işlemler yapabilmeleri için yetki atamalarını yapalım. guest hesabı kısıtlı yetkiye sahip olup yalnızca var olan verilere erişebilecek, admin ise root gibi dilediği düzenlemeyi yapabilme yetkisine (yalnızca gentoo veritabanı için, ana mysql veritabanına erişimi olmadan) sahip olacaktır. Başlamadan önce kısaca  komutunun yapısına bakalım:

GRANT Yapısı

Öncelikle atamak istediğimiz yetkilere bakalım. Şimdiye kadar öğrendiğiklerimiz kadarıyla, atayabileceğimiz bazı yetkiler şöyle:


 * - Veritabanı için tam kontrol yetkisi
 * - Tablo oluşturma yetkisi
 * - Sorgulama yapma yetkisi
 * - Tabloya veri ekleme yetkisi
 * - Veritabanları listesini görme yetkisi
 * - Sadece kullanım yetkisi (özel bir yetki yok)
 * - Farklı kullanıcılara yetki verme yetkisi

admin kullanıcımız için ALL yetkileri işimizi görecektir. guest kullanıcısı için de yalnızca  yeterli olacaktır. Aşağıdaki örnekte gentoo veritabanımızın adı, .* tüm tabloları anlamındadır. Dilerseniz her tablo için ayrı bir yetki de atayabilirsiniz. kullanıcı yerine kullanıcımızın adını, host yerine de erişim yaptığımız sunucu adresini yazıyoruz (çoğu kez bu localhost). Son olarak parola yerine kullanıcımızın parolasını ekliyoruz. Kullanıcılarımızı oluşturalım:

Artık kullanıcılarımız da olduğuna göre, kontrol edelim. Öncelikle  komutuyla MySQL'den çıkıyoruz:

Artık konsola geri döndük. Şimdi oluşturduğumuz kullanıcılar ile neler yapabildiğimize bakalım.

Kullanıcı İzinlerini Test Etmek
Önce guest kullanıcısı ile giriş yapalım. Bu kullanıcı şu anda yalnızca  yetkisine sahip. Bunun anlamı yalnızca veritabanında arama yapabilmek, fazlası değil. Girip bakalım:

Şimdi kısıtlamalara bakalım. Öncelikle gentoo veritabanına geçelim:

Şimdi de yapmamamız gereken bir işlem yapalım: Tablo oluşturalım.

Gördüğünüz gibi, kullanıcımızın yetkisi bu işlem için yeterli değil. Şimdi de yapabildiğimiz bir işlemi, 'i deneyelim:

İzin verdiğimiz bu işlem başarılı. Ayrıca bir de admin hesabı açmıştık. Ancak tüm yetkileri de versek kullanıcıların yapamayacağı bazı şeyler var. Görebilmek için admin kullanıcısı ile giriş yapalım.

Önce admin kullanıcımız ile yeni bir veritabanı oluşturalım. admin kullanıcısı, gentoo veritabanı üzerinde, MySQL'in root kullanıcısı gibi her istediğini yapabilecek yetkilere sahip. Bu yapacağımız işlem ile MySQL'in kendi veritabanı üzerinde bir değişikliğe sebep olup olamayacağımızı göreceğiz. Kullanıcıya izni sağlarken yalnızca gentoo veritabanının adını verdiğimizi hatırlayın.

Evet, kullanıcımız gentoo veritabanı üzerinde yetkili ancak MySQL üzerinde bir veritabanı oluşturamıyor. gentoo veritabanı üzerinde işlem yapabileceğimizden emin olmak için bir veri girelim.

admin kullanıcısı kendi veritabanında tüm yetkilere sahip. Ancak bazen bazı kullanıcılardan birtakım yetkileri geri almak isteyebiliriz. Bu, problemli bir kullanıcı veya işten ayrılmış bir çalışan olabilir. Bunun için  komutunu kullanacağız.

Kullanıcıdan REVOKE Komutu ile Yetki Almak
komutu bir kullanıcıya kısıtlama yapmak için kullanılır. Dilersek tek yetkiyi, dilersek tüm yetkilerini alabiliriz. Kullanımı 'a çok benzer.

REVOKE Yapısı

Buradaki bölümleri  komutunu anlatırken açıklamıştık. Diyelim ki guest kullanıcısı güvenlik açısından problemlere yol açıyor ve tüm yetkilerini almaya karar verdik. root olarak giriş yapıp gerekli komutu verelim.

Şimdi çıkıp guest olarak giriş yapalım.

Giriş yapabiliyoruz ancak gentoo veritabanına erişim yetkimiz elimizden alındı.

Ve bu şekilde problem oluşturan kullanıcımız gentoo veritabanına erişemez hale geldi. Kullanıcının halen giriş yapabildiğine dikkat edin. Çünkü ana mysql veritabanında halen kullanıcının bir kaydı var. Şimdi de  komutu ile kullanıcıyı MySQL kullanıcıları tablosundan nasıl sileceğimizi öğrenelim.

DELETE ile Kullanıcı Silme
MySQL kullanıcı tablosu tüm kullanıcıları ve bilgilerini tutar. root olarak giriş yaptığınıza emin olun ve ana MySQL veritabanına giriş yapın.

Şimdi mysql veirtabanındaki tablolara bakalım:

Aradığımız tablo user tablosu. Ancak user tablosunun 30 farklı alanı var. Bu durum okumayı zorlaştıracak. İşimizi kolaylaştırmak için  örneğindeki üçüncü (koşullu) sorguyu kullanalım. Sonuçta ihtiyacımız olan bölümler sadece Host ve Kullanıcı:

İstediğimiz bilgiye ulaştık, şimdi guest kullanıcısından kurtulalım. Bu işlem için  komutundan faydalanacağız.

DELETE Yapısı

Farkettiğiniz gibi,  komutunun   komutuna benziyor. Şu anda alanımız "User" ve değerimiz "guest" olacak. Bu, User alanındaki değer guest olan bölgeyi silecek, yani hesabı ortadan kaldıracaktır:

Çalışmış görülüyor. Giriş yapmaya çalışarak test edelim.

Kullanıcımız silinmiş!

Sonuç
Bu belge MySQL'in komut satırı kullanımını ele almakta. Ancak dilerseniz bazı grafiksel arayüz alternatiflerini de kullanabilirsiniz:


 * phpMyAdmin - PHP temelli popüler MySQL yönetim uygulaması.
 * mysqlnavigator - MySQL için QT arayüz.
 * gmyclient - GNOME için MySQL istemcisi.
 * knoda - KDE için MySQL istemcisi.

Böylelikle MySQL tanışma belgesinin sonuna geldik. Umarız MySQL'in temelleri ve çalışma şekli hakkında anlamanıza katkı sağlamıştır.

Bilgiler
Bu makalede emeği geçen kişilere teşekkürler:


 * Chris White
 * Shyam Mani
 * Xavier Neys
 * Gürkan Gür (TR çeviri)