MySQL Kurulumu ve kullanımı
MySQL ve PostgreSQL
Gelecek Linux ile birlikte gelen, ücretsiz ve oldukça kullanışlı iki veritabanıdır.
Yahoo ve Nasa tarafından da kullanılan MySQL, Linux, Apache ve PHP dörtlüsü
web uygulama geliştirmede tüm dünyada sıkça kullanılır. Bu yazıda MySQL'e genel
bir giriş yapılacak, kurulumu ve kullanımı anlatılacaktır.
İçindekiler
· MySQL'in çalıştırılması
· MySQL parolasının düzenlenmesi
· MySQL ayarları
· MySQL'e yeni sistem kullanıcısı eklenmesi
· MySQL'e normal bir kullanıcı eklenmesi
· Örnek bir veritabanı yaratılması
· Son olarak
www.mysql.com web sayfasından hem .tar.gz, hem de RPM biçiminde alınabilecek
olan bu veritabanı GL 1.1'in 2. CD'sinde gelmektedir. MySQL'den en yüksek verimi
almak için, aşağıdaki paketleri sisteme kurmalısınız.
· mysql: MySQL temel dosyaları ve kütüphaneleri (şart)
· mysql-devel: MySQL geliştirme için başlık dosyaları
· php-mysql: Php ve MySQL bağlantısı için gereken yordamlar (MySQL/PHP programlama
yapılacaksa şart)
· mysql-server: MySQL sunucu (şart)
· mod_auth_mysql: Apache'nin mod_auth özelliği ile MySQL bağlantısı yapması
için gerekli dosyalar
Bu paketlerin sistemde kurulu olup olmadıklarını öğrenmek için, aşağıdaki komut
işe yarayacaktır:
# export LANG=en# rpm -qa | grep mysqlmysql-3.23.24-1mysql-devel-3.23.24-1php-mysql-4.0.3pl1-1mysql-server-3.23.24-1mod_auth_mysql-2.20-1
Eğer paketler kurulu değil ise, CD'yi sürücüye takın ve aşağıdaki işlemleri
yapın:
# mount /dev/cdrom # cd /mnt/cdrom/Gelecek/RPMS# rpm -i *mysql* --nodeps
Yukarıdaki komutlar CD sürücüyü /mnt/cdrom dizinine bağlayacak ve /mnt/cdrom/Gelecek/RPMS
dizini altında, içinde tüm mysql satırı geçen programları sisteme kuracaktır.
MySQL'in çalıştırılması
Gelecek Linux'ta,
diğer tüm dağıtımlarda olduğu gibi sunucuları başlatmak, durdurmak, durumlarını
öğrenmek ve yeniden çalıştırmak için /etc/init.d betikleri kullanılır. MySQL'i
kurunca bu veritabanını başlatabilmek için, aşağıdaki komutu (root kullanıcısı
haklarıyla) bir terminalden yazın.
# /etc/init.d/mysqld startMySQL başlatılıyor: [TAMAM]
MySQL çalışmaya başlayacaktır. 'start' yerine 'stop' komutunun verilmesi halinde
ise veritabanı durur.
MySQL parolasının düzenlenmesi
MySQL ilk çalıştırıldığı zaman bunu kullanacak olan sistem yöneticisinin (root),
parolasını hemen değiştirmesi gereklidir.
Aşağıdaki komutu
inceleyin.
# mysqladmin -u root password "yeni parola"
Yukarıdaki komutu (tırnaklar kullanmadan) yazarsanız MySQL veritabanını kullanacak
olan root'un parolasını "yeni parola" olarak atamış olursunuz. MySQL
veritabanı Linux'taki kullanıcı hesaplarının tutulduğu /etc/passwd ve /etc/shadow
dosyalarına bakmaz. Bu veritabana erişim yapmak isteyen her kullanıcı açıkça
MySQL'e belirtilmelidir.
Şimdi root kullanıcısı olarak aşağıdaki komut yardımıyla MySQL veritabanına
giriş yapabilirsiniz:
# mysql -u root -p mysqlEnter password:Welcome to the MySQL monitor. Commands
end with ; or \g. Your MySQL connection id is 11 to server version: 3.23.24-beta-logmysql>
Yukarıda belirttiğimiz komut satırı parametrelerinden -u, kendisinden sonra
gelen kullanıcıyla (root) MySQL'e bağlantı yapılacağını söyler. -p parametresi
ise, bu komutu yazdıktan sonra bizden bir komut istemcisi üzerinden parolayı
ister. Parolayı -p'den hemen sonra da yazabilirsiniz, ancak parolayı verirken
arada boşluk bırakmamanız gerekiyor:
# mysql -u root -pparolam mysql
Yukarıdaki MySQL bağlantı komutunun en sonunda yeralan "mysql" ise,
bu sunucudaki hangi veritabanına bağlantı kurulacağını söyleyecektir. Öntanımlı
olarak, yerel makinanızda mysql adında bir veritabanı önceden tanımlıdır. Şimdi
tam olarak çalışan bir MySQL sunucuya sahipsiniz.
MySQL
ayarları
MySQL dağıtımının .tar.gz biçimiyle birlikte 4 farklı MySQL yapılandırma dosyası
gelir. Bunlar my-huge.conf (1 Gb ve daha fazla bellekli sistemler için), my-large.conf
(512 Mb'a kadar belleğe sahip olan sistemler için), my-medium.conf (32 Mb -
128 Mb arası belleğe sahip olan sistemler için) ve my-small.conf (64 Mb belleğe
sahip sistemler için).
Bu dosyaların bir tanesini /etc altına "my.cnf" adıyla yerleştirmekle
MySQL'e açılış anında çeşitli parametreler vermek mümkündür. Ancak bu dosyanın
içinin boş olması halinde bile MySQL sorunsuz olarak çalışacaktır.
Biz burada my-medium.cnf dosyasını örnek alarak bir /etc/my.cnf yapılandırma
dosyası hazırlayalım.
# Örnek /etc/my.cnf yapılandırma dosyası# Key-buffer parametresi, ne kadar belleğin
index # verileri için tutulacağını gösterir. Buradaki rakamın # (16 Mb) yüksek
tutulması MySQL'in performansını # hissedilir derecede artırır.key-buffer=16M#
table_cache, MySQL'in aynı anda açık tablo sayısını verir. # Eğer büyük # bir
veritabanı sistem kullanıyorsanız, bu # rakamı artırmalısınız.table_cache=128#
MySQL içinde "ORDER BY" ve "GROUP BY" parametrelerini çok
# kullanmanız halinde sort_buffer değerini yükseltin.sort_buffer=512K# myisam_sort_buffer_size
parametresi, bir indeks # yaratılırken ya da bir tablo düzenlenirken kullanılacak
# tampon bölgesi büyüklüğünü tanımlar.myisam_sort_buffer_size=8M
Hazırlanan bu dosyayı /etc altında kopyalayın. Eğer /etc/my.cnf dosyası zaten
varsa, bunu silin.
# /etc/my.cnf# cp my.cnf /etc/my.cnf
Bu aşamalardan sonra MySQL başlatıldığı zaman /etc/my.cnf dosyasını okuyacaktır.
MySQL'e yeni
sistem kullanıcısı eklenmesi
Yukarıdaki ayarlardan sonra MySQL veritabanı root kullanıcısı altında rahatlıkla
kontrol edilebilir. MySQL veritabanı, bir kullanıcının veritabanı bilgilerine
tüm haklarla erişmesine, diğerinin sadece okumasına, bir başkasının da sadece
yazmasına izin verebilir. Bazı geniş sistemlerde root dışında da kullanıcılar
tanımlanır ve her kullanıcı veritabanının farklı bölgelerini denetleyebilir.
Şimdi veritabanına yeni bir kullanıcı ekleyelim. Bunu yapmak için aşağıdaki
örneği inceleyin:
# mysql -u root -p mysqlEnter password:mysql> GRANT ALL PRIVILEGES ON *.*
TO akgun@localhost IDENTIFIED BY 'akgunparola' WITH GRANT OPTION;Query OK, 0
rows affected (0.00 sec)mysql> exit
Yukarıdaki komutu yazıp exit ile sistemden çıktığınız zaman akgun kullanıcısı,
MySQL veritabanına tam yetkiler verilen bir kullanıcı haline gelir. Herhangi
bir kullanıcı ile sisteme telnet ile girip, aşağıdaki komutu çalıştırdıktan
sonra MySQL'e yeni veritabanı ekleyebilir, silebilir, başka yetkili kullanıcı
tanımlayabilirsiniz.
# mysql -u akgun -p mysql
MySQL'e normal bir kullanıcı eklenmesi
Yukarıda "GRANT ALL" ile başlayan MySQL satırı yardımıyla bir kullanıcıya
tam yetki vermiştik. Şimdi ise bir tabloda bulunan verileri güncelleyebilecek,
yeni veri ekleyebilecek bir kullanıcı tanımlayalım. Yapmanız gereken tek işlem,
sadece yukarıda "GRANT ALL" satırı yerine "GRANT SELECT, INSERT,
DELETE, UPDATE" getirmek.
Örnek bir veritabanı
yaratılması
Aşağıdaki komut MySQL'de kullanicilar veritabanını açacaktır.
mysql> CREATE DATABASE kullanicilar;Query OK, 1 row affected (0.00 sec)
Yeni veritabanına bağlantı kurmak için mysql'den çıkmak ve aşağıdaki komutu
çalıştırmak yeterlidir:
$ mysql -u root -p kullanicilarEnter password:Welcome to the MySQL monitor.
Commands end with ; or \g.Your MySQL connection id is 18 to server version:
3.23.Type 'help;' or '\h' for help. Type '\c' to clear the buffermysql>
Şimdi veritabanımıza bir kaç bilgi aktaralım. Bunun için yapacağınız işlem çok
basit. Önce veritabanında tutacağınız tabloyu (table) tasarlayın. Ardından bunları
MySQL'e girin.
# mysql -u root -p kullanicilarmysql> CREATE TABLE parolalar ( -> kullaniciadi
varchar(15) not null, -> crypt varchar(128) not null, -> gercekadi varchar(50)
not null, -> kabugu varchar(10) not null -> );Query OK, 0 rows affected
(0.01 sec)
Şimdi kullanicilar veritabanı içinde parolalar tablosunu yukarıdaki gibi oluşturmuş
olduk. Bunu görebilmek için aşağıdaki komutu kullanın.
mysql>insert into parolalar values ('ilhan',md5('ilhanparola'), 'Murat Ilhan',
'/bin/bash');Query OK, 1 row affected (0.00 sec)mysql> select * from parolalar;+--------------+------------------+-------------+-----------+|
kullaniciadi | crypt | gercekadi | kabugu |+--------------+------------------+-------------+-----------+|
ilhan | 10de2b0e8c2cbd52a| Murat Ilhan | /bin/bash |+--------------+------------------+-------------+-----------+1
row in set (0.00 sec)
Son olarak
MySQL veritabanı burada aktarmaya çalışılan bilgilerin çok ötesindedir ve çok
geniş kullanım alanları vardır. Daha geniş kullanım bilgisi için www.mysql.com
ve MySQL/PHP bağlantısı için www.php.org.tr adreslerine göz atın.
MySQL
(Win95/98/NT) Kurulumu ve SQL'e Giriş
Bu bölümde, PHP ile en çok kullanılan SQL sunucusu MySQL'in Windows altında
kullanımı hakkında bilgi vereceğim. Aynı zamanda SQL diline de bir giriş yapmış
olacağız.
Kurulum
1. MySQL'i www.php.org.tr adresinden indirin. (benim kullandığım versiyon 3.22.34-shareware)
2. ZIP dosyasını açın ve SETUP.EXE yi çalıştırın.
3. Program yüklendikten sonra MS-DOS ekranına geçin.
4. cdmysql_in yazıp ENTER'a basın.
5. ren mysqld-shareware.exe mysqld.exe yazıp ENTER'a basın.
6. c:mysql_inmysqld --standalone yazıp ENTER'a basın.
7. Eğer işletim sisteminiz NT ise, 6.maddeyi atlayın, c:mysql_inmysqld --install
yazıp ENTER'a basın.
8. Eğer Win95/98 kullanıcısıysanız, 6.maddedeki komutu bilgisayarınızı her yeniden
kapatıp açtığınızda tekrar yazıp çalıştırmanız gerekir, Başlat | Çalıştır (Start
| Run) ekranından aynı komutu verip çalıştırabilirsiniz.
9. exit yazıp ENTER'a basın ve DOS ekranını kapatın.
10. NT kullanıyorsanız MySQL'i başlatmak için;
Başlat | Ayarlar | Denetim Masası | Hizmetler seçeneklerine tıklayın ve
(Start Menu | Settings | Control Panel | Services)
MySql i seçip Başlat (Startup) tuşuna basın.
Artık MySQL sistemimizde kurulu. MS-DOS ekranına geçip bir deneme yapalım. DOS
ekranında cdmysql_in yazın. Bu klasör MySQL'in bütün çalıştırılabilir dosyalarının
bulunduğu yer.
C:mysql_in> mysqladmin version
Bu komutu verdiğinizde
karşınıza MySQL ile ilgili bilgiler gelecektir. Bu, programı doğru bir şekilde
yüklediğinizi ve programın kullanıma hazır olduğunu gösterir. Eğer "cannot
connect to localhost" gibi bir hata mesajı alıyorsanız, "--standalone"
ekini koyup koymadığınızı kontrol edip tekrar "mysqld" yi çalıştırın.
SQL'e Giriş
C:/mysql/bin> mysql
Yukardaki komutu vererek MySQL'i çalıştırıyoruz. Artık karşımızda "mysql>" şeklinde MySQL komut satırı var. İlk veritabanımızı yaratalım:
mysql> create database deneme;
Sondaki "noktalı virgül"e dikkat edin. Bu işaret MySQL'e işlemi gerçekleştirmesini söyler. Eğer koymazsanız, MySQL komutu yazmaya bir sonraki satırdan devam etmek istediğinizi düşünür ve size devam edebilmeniz için yeni bir satır açar. Bu uzun sorgulamalar için faydalı bir özelliktir.
mysql> use deneme;
"use"
komutu ile üstünde çalışmak istediğimiz veritabanını seçiyoruz.
Burada durup biraz veritabanı mantığından ve ne zaman veritabanı kullanmanız
gerektiğinden bahsetmek istiyorum. Diyelim ki, bir okuldaki öğrencilerin ders
notlarını takip etmemiz isteniyor. Dört tane dersimiz var, Matematik, Türkçe,
Beden ve Müzik. Her öğrencinin bu derslerden aldığı bir not var. Ekstra bir
bilgi olarak da, öğrencinin sınıfını da takip etmek istiyoruz. Bu alanları aşağıdaki
gibi gruplandırabiliriz:
"İsim","Sınıf","Matematik","Türkçe","Beden"
ve "Müzik", alan (field) olarak adlandırılır. Her alan, aynı kümenin
farklı elemanlarını (veya aynı elemanlarını) içerir. Bu gördüğünüz tabloyu veritabanımızda
yaratalım:mysql> create table notlar (isim char(20), sinif char(5), mat int,
turkce int, beden int, muzik int);Yarattığınız veritabanındaki alanları,mysql>
show fields from notlar;komutu ile görebilirsiniz. Elde ettiğimiz sonucu görelim:+--------+----------+------+-----+---------+-------+|
Field | Type | Null | Key | Default | Extra |+--------+----------+------+-----+---------+-------+|
isim | char(20) | YES | | NULL | || sinif | char(5) | YES | | NULL | || mat
| int(11) | YES | | NULL | || turkce | int(11) | YES | | NULL | || beden | int(11)
| YES | | NULL | || muzik | int(11) | YES | | NULL | |+--------+----------+------+-----+---------+-------+Tabloyu
yaratırken şu işlemleri doğru yaptığınızdan emin olun:· Alan adları bir çift
parantez içine alınmış olmalı. · Her alan adı diğerinden virgül ile ayrılmalı.
· Son alandan sonra virgül kullanılmamalı. · Bütün SQL komutlarının sonuna noktalı
virgül ";" konmalı.
Tabloya Kayıt Eklemek
mysql> INSERT INTO notlar (isim,sinif,mat,turkce,beden,muzik) VALUES ('Ahmet','10-A',3,3,4,3);
"Char" ile tanımladığınız alan adlarına değer verirken tek tırnak arasında yazmak zorundasınız. Diğer alanları "integer" yani sayısal değer olarak tanımladığımız için böyle bir zorunluluğumuz yok. Şimdi yeni eklediğimiz kaydı listeleyelim:
mysql> SELECT * FROM notlar;
Sonuç:
+-------+-------+------+--------+-------+-------+
| isim | sinif | mat | turkce | beden | muzik |
+-------+-------+------+--------+-------+-------+
| Ahmet | 10-A | 3 | 3 | 4 | 3 |
+-------+-------+------+--------+-------+-------+
Tabloya Alan
Eklemek
Tabloya istediğimiz zaman yeni bir alan ekleyebilir ya da mevcut alanlar üzerinde
değişiklikler yapabiliriz:
mysql> ALTER
table notlar ADD COLUMN resim int;
Bir'den fazla alan eklemek için:
mysql> ALTER table notlar ADD COLUMN fizik int, ADD COLUMN
dogumtarihi date;
Sonucu kontrol edelim:
mysql> SELECT * FROM notlar;
+-------+-------+------+--------+-------+-------+-------+-------+-------------+
| isim | sinif | mat | turkce | beden | muzik | resim | fizik | dogumtarihi
|
+-------+-------+------+--------+-------+-------+-------+-------+-------------+
| Ahmet | 10-A | 3 | 3 | 4 | 3 | NULL | NULL | NULL |
+-------+-------+------+--------+-------+-------+-------+-------+-------------+
1 row in set (0.00 sec)
Çoklu-Satır Kullanarak
Komut Girişi
MySQL komut satırı arabirimi komutu tek bir satır halinde yazmanıza ya da satırlara
bölmenize olanak sağlar. İki yazım biçimi arasında bir fark yoktur. Ancak kodunuzu
satırlara bölmeniz, yazdıklarınızın daha anlaşılabilir olmasını sağlar.
Çoklu-Satır modunda, MySQL yorumlayıcısı her satırın başına "->"
ekler. Bu siz noktalı virgül ";" ile SQL komutunu sonlandırana kadar
devam eder. Noktalı virgül yazılıp ENTER'a basıldıktan sonra komut çalıştırılır.
Aşağıdaki örnekleri inceleyelim:
Tek Satır Örneği
mysql> create table test (alan01 integer,alan02 char(30));
Çoklu-Satır Örneği
mysql> create
table test
-> (alan01
-> integer,
-> alan02
-> char(30));
Doğru Kullanım
mysql> create
table test
-> (alan01
-> integer,
-> alan02
-> char(30));
Yanlış Kullanım
mysql> create
table test
-> (alan01 inte
-> ger,
-> alan02
-> char(30));
Kayıt eklerken veya güncellerken, bir alana girilecek bilgiyi satırlara bölmeyin. Hata mesajı almazsınız ancak veritabanının yapısına zarar verirsiniz:
Standart İşlem
mysql> insert
into test (alan02)
-> values
-> ('merhaba ben mysql ogreniyorum');
Bozuk Kayda Neden Olan İşlem
mysql> insert
into test (alan02)
-> values
-> ('merhaba ben
-> mysql ogreniyorum');
Sonuç:
+---------+-------------------------------+
| alan01 | alan02 |
+---------+-------------------------------+
| NULL | merhaba ben mysql ogreniyorum |
| NULL | merhaba ben
mysql ogreniyorum |
+---------+---------------------+
Tabloya Değişik Tipte Kayıtlar Ekleyelim
mysql> INSERT
INTO notlar (isim,sinif,mat,turkce,beden,muzik,resim,fizik,dogumtarihi)
VALUES ('Aslı','10-C',2,2,4,4,5,1,'1980-01-31');
Sonucu görelim:
mysql> SELECT * FROM notlar;
+-------+-------+------+--------+-------+-------+-------+-------+-------------+
| isim | sinif | mat | turkce | beden | muzik | resim | fizik | dogumtarihi
|
+-------+-------+------+--------+-------+-------+-------+-------+-------------+
| Ahmet | 10-A | 3 | 3 | 4 | 3 | NULL | NULL | NULL |
| Aslı | 10-C | 2 | 2 | 4 | 4 | 5 | 1 | 1980-01-31 |
+-------+-------+------+--------+-------+-------+-------+-------+-------------+
· Standart Tarih
formatı "yyyy-gg-aa" dır.
· Standart Zaman formatı "hh:mm:ss" dir. (saat:dakika:saniye).
· Yukardaki örnekte olduğu gibi Tarih ve Zaman bilgileri kaydedilirken tırnak
içine alınmalıdır.
· Tarih "yyyyggaa", Zaman "hhmmss" formatında yazılabilir.
Böyle yazıldıklarında tırnak işareti kullanmaya gerek yoktur.
· MySQL'in "buffer (tampon)" özelliği vardır. Yukarı ok tuşuna basarak
önceki komutları tekrar yazdırıp zamandan tasarruf edebilirsiniz.
Mevcut Kayıtları Güncelleme
Tek bir alanı güncelleme
mysql> update notlar set fizik=1 where isim='Ahmet';
Bir'den çok alanı güncelleme
mysql> update notlar set fizik=3, mat=4 where isim='Aslı';
Ve aldığımız sonuç şöyle olacak:
mysql> SELECT * FROM notlar;
+-------+-------+------+--------+-------+-------+-------+-------+-------------+
| isim | sinif | mat | turkce | beden | muzik | resim | fizik | dogumtarihi
|
+-------+-------+------+--------+-------+-------+-------+-------+-------------+
| Ahmet | 10-A | 3 | 3 | 4 | 3 | NULL | 1 | NULL |
| Aslı | 10-C | 4 | 2 | 4 | 4 | 5 | 3 | 1980-01-31 |
+-------+-------+------+--------+-------+-------+-------+-------+-------------+
Tablodan Kayıt Silme
Tablodan bir veya daha fazla kayıt silmek için "DELETE" komutunu kullanacağız.
Aşağıdaki örneğe bakalım:
mysql> DELETE
FROM notlar WHERE isim='Ahmet';
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM notlar;
+-------+-------+------+--------+-------+-------+-------+-------+-------------+
| isim | sinif | mat | turkce | beden | muzik | resim | fizik | dogumtarihi
|
+-------+-------+------+--------+-------+-------+-------+-------+-------------+
| Aslı | 10-C | 4 | 2 | 4 | 4 | 5 | 3 | 1980-01-31 |
+-------+-------+------+--------+-------+-------+-------+-------+-------------+
"DELETE" komutunu kullanırken dikkatli olmalısınız. Yukardaki örnekte WHERE komutunu eklemiş olmasaydık, tablodaki bütün kayıtları sil demiş olacaktık:
mysql> DELETE
FROM notlar;
Query OK, 2 row affected (0.01 sec)
Çıkmak için
mysql> quit
Bye
MySQL ve PHP
SQL dilini kullanarak, bir MySQL veritabanı üzerinde yapabileceğimiz temel işlemleri
öğrendik. Tabii ki MySQL ile amacımıza uygun çok daha karmaşık sorgulamalar
yapabilir, farklı tablolardan aldığımız bilgileri birleştirip istediğimiz kriterlere
uygun biçimde kullanıcılara sunabiliriz. Burada anlattığım komutlara hakim olmanız,
PHP ile yarattığınız veritabanı uygulamalarında size sürat kazandıracaktır.
MySQL'in PHP kodu içinde kullanımını mysql_db_query fonksiyonunu inceleyerek
öğrenebilirsiniz, ben ufak bir örnek vereceğim:
Matematik: " . <br>"; } ?>
mysql_fetch_array komutu, sorgulama sonunda oluşan listeden sıradaki ilk kaydı
alır ve bunları istenen array'e atar (burada $row). Listedeki bütün kayıtları
gösterebilmek için de bu işlemi döngü (while) içine sokuyoruz. Bütün kayıtlar
okunduğunda döngü de sona erecektir.
Son Söz
PHP ve MySQL dinamik web sayfaları tasarımında her geçen gün daha fazla tanınıyor,
kullanılıyor. Her ikisinin de ücretsiz olması, kullanımlarının kolay ve performanslarının
diğer alternatiflerinden aşağı kalmıyor olması da popülerliklerinin devam etmemesi
için hiçbir neden olmadığını gösteriyor. Bugün birçok web alanı veren firma
PHP + MySQL desteğini de beraberinde sunuyor. Aynı zamanda bu iki hizmeti reklam
karşılığı ücretsiz veren siteler de giderek çoğalmakta. Kısaca, PHP ve MySQL
öğrenmekle, her geçen gün büyüyen ve açık-kod felsefesini başlangıç noktası
olarak belirlemiş kocaman bir ailenin üyesi olmuş olacaksınız ;o)