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.

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 Syntax

First we have the privileges we wish to assign. With what we've learned so far, here are some of the privileges you can set:


 * - Gives the all privilege control for the database
 * - Allows users to create tables
 * - Allows users to query tables
 * - Allows users to insert data into a table
 * - Allows users to see a list of databases
 * - User has no privileges
 * - Allows users to grant privileges

For our admin user, ALL will do. For the guest user,  will be sufficient for read only access. database is the database we wish the user to have these permissions on. In this example, gentoo is the database. The .* means all tables. If you wanted to, you could apply per table access. user is the name of the user and host is the hostname the user will be accessing from. In most cases, this will be localhost. Finally, password is the user's password. Given the information, let's go ahead and create our users.

Now that we have the users setup, let's test them out. First we quit mysql by typing  at the command prompt:

We're now back at the console. Now that we have our users setup, let's go ahead and see what they can do.

Testing User Permissions
We shall now attempt to login as the guest user. Currently, the guest user has  only privileges. This basically comes down to being able to search and nothing more. Go ahead and login with the guest account.

Now we should test the user restriction(s). Let's switch to the gentoo database:

Now let's try to do something we are not supposed to. We'll attempt to create a table.

As you can see, this function fails, as our user does not have the appropriate access. However, one access we did grant is the  statement. Let's go ahead and try that:

The command succeeds, and we're given a glimpse of what user permissions can do. We did, however, create an admin account as well. This was created to show that even all permissions granted users can still have limitations. Go ahead and quit MySQL and login as the admin.

To begin, we'll try creating a new database with our admin user. This admin user will have access similiar to the root MySQL account, and will be able to do any kind of modification to the gentoo database it chooses. This will test the user's access to the main MySQL database. Remember ealier that we only set permissions to a specific database.

Indeed, the admin user cannot create databases on the main MySQL database, despite all his permissions on the gentoo database. However, we're still able to use the admin account to modify the gentoo database, as shown here by this example data insertion.

The admin user can access the database as they please. Now sometimes, we need to get rid of user permissions. This could be anything from a problematic user to a retired employee. Let's take a look at how to disable user permissions with the  command.

Removing User Access With The REVOKE Command
The  command lets us deny access to a user. We can either deny full access, or specific access. In fact, the format is very similiar to.

REVOKE Syntax

Options here are explained in the  command section. In this section however, we're going to deny full access to a user. Let's say we find out the guest account is causing some problems security wise. We decide to revoke all privileges. We login as root and do the needful.

Now let's quit and attempt to login as a guest user.

Although we're able to login, our access to gentoo is now gone.

And our problematic user is no longer able to access the gentoo database. Please note that the user was still able to login. That is because they remain in the main MySQL database. Let's take a look at how to completely remove an account with  and the MySQL user table.

Removing Accounts Using DELETE
The MySQL user table is a listing of all users and information about them. Make sure you're logged in as root. Then go ahead and use the main MySQL database.

Now let's see what tables the mysql database has:

The user table is the table we're after. However, the user table contains 30 different fields, making it very hard to read. In order to make things easier to read, we'll go ahead and use the third version of the  statement. The fields we're after are Host and User.

Now that we have our information, we can get rid of the guest user. This is done with the  command and the syntax is shown below.

DELETE Syntax

You may notice that  is somewhat similiar to the   statement in its format. In this case, the field will be User, and the value guest. This will delete the record in the user table where the user is guest, successfully deleting our guest user account. Let's go ahead and do that:

It seems to have worked ok. Let's test by logging out and attempting to login as our guest user.

Our user is now successfully deleted!

Conclusion
While this guide focuses mainly on setting up MySQL on the command line, a few alternatives are available in GUI form:


 * phpMyAdmin - Popular php based MySQL administration tool.
 * mysqlnavigator - QT frontend to MySQL.
 * gmyclient - A GNOME based MySQL client.
 * knoda - A KDE MySQL client.

This ends the MySQL introductory tutorial. I hope this gives you a better understanding of the basics behind MySQL and getting a database set up.

Acknowledgements
We would like to thank the following authors and editors for their contributions to this guide:


 * Chris White
 * Shyam Mani
 * Xavier Neys