MYSQL/Başlangıç Kılavuzu

From Gentoo Wiki
< MySQL
Jump to: navigation, search
This page is a translated version of the page MySQL/Startup Guide and the translation is 100% complete.

Other languages:
Deutsch • ‎English • ‎Türkçe • ‎français • ‎русский • ‎中文(中国大陆)‎ • ‎日本語 • ‎한국어

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

MySQL'e Başlarken

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.

root #emerge --ask mysql

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

CODE MySQL einfo bilgi mesajı
You might want to run:
"emerge --config =dev-db/mysql-[version]"
if this is a new install.

(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 ENTER'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.

root #emerge --config =dev-db/mysql-[version]
 * MySQL DATADIR is /var/lib/mysql
 * Press ENTER to create the mysql database and set proper
 * permissions on it, or Control-C to abort now...
 
   Preparing db table
   Preparing host table
   Preparing user table
   Preparing func table
   Preparing tables_priv table
   Preparing columns_priv table
   Installing all prepared tables
 
   To start mysqld at boot time you have to copy support-files/mysql.server
   to the right place for your system
 
   PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
   To do so, issue the following commands to start the server
   and change the applicable passwords:
 
   /etc/init.d/mysql start
   /usr/bin/mysqladmin -u root -h pegasos password 'new-password'
   /usr/bin/mysqladmin -u root password 'new-password'
   Depending on your configuration, a -p option may be needed
   in the last command. See the manual for more details.
Not
Eğer komutlar sistem hostname'i "localhost" olduğu için hata iletirse, sistemin hostname'ini değiştirin, örneğin gentoo. Bunun için /etc/conf.d/hostname dosyasında değişikliği yapıp /etc/init.d/hostname servisini yeniden başlatabilir veya systemd kullanıyorsanız hostnamectl set-hostname gentoo kullanabilirsiniz.

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

Important
mysql-4.0.24-r2 sürümünden itibaren daha güvenli olması için root parolası yapılandırma sihirbazı çalışırken alınmaktadır.

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

OpenRC kullanıyorsanız, şu komutu çalıştırın:

root #/etc/init.d/mysql start
 * Re-caching dependency info (mtimes differ)...
 * Starting mysqld (/etc/mysql/my.cnf) ...        [ ok ]

Systemd kullanıyorsanız aşağıdaki komutu kullanmalısınız:

root #systemctl restart mysqld.service

With >=dev-db/mariadb-10.1.18, use:

root #systemctl restart mariadb.service

Ardından root parolasını belirleyin:

root #/usr/bin/mysqladmin -u root -h localhost password 'yeni-parola'

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

user $mysql -u root -h localhost -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4 to server version: 4.0.25
 
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
 
mysql>

-u parametresi giriş yapacak olan kullanıcıyı, -h ise sunucuyu belirtir. Uzak bir sunucuya bağlanmıyorsanız sunucu değeri genellikle localhost'tur. -p parametresi de sunucuya giriş için bir parola gireceğinizi belirtir. Giriş yaptıktan sonra MySQL'e vereceğimiz komutları bize sağladığı mysql> 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.

Önemli
Öntanımlı mysql kurulumu geliştirme yapılan sistemlere uygundur. Kurulumu daha güvenli bir hale getirmek için /usr/bin/mysql_secure_installation komutunu çalıştırmanız fayda sağlayacaktır

Veritabanı Yapılandırma

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 SHOW DATABASES komutunu kullanıyoruz.

mysql>SHOW DATABASES;
+----------+
| Database |
+----------+
| mysql    |
| test     |
+----------+
2 rows in set (0.09 sec)
Important
Lütfen MySQL komutlarının noktalı virgül ile bittiğine dikkat edin -- ;

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

mysql>CREATE DATABASE gentoo;
Query OK, 1 row affected (0.08 sec)

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 SHOW DATABASES komutunu verelim.

mysql>SHOW DATABASES;
+----------+
| Database |
+----------+
| gentoo   |
| mysql    |
| test     |
+----------+
3 rows in set (0.00 sec)

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 USE komutunu kullanmalıyız. Dilerseniz giriş sırasında -D parametresi ile seçili veritabanına direkt giriş de yapabilirsiniz. Şimdi "gentoo" veritabanına geçelim.

mysql>USE gentoo;
Database changed

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

MySQL'de Tablolar İle Çalışmak

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 SHOW TABLES komutu ile gerçekleştirilir. Ancak henüz gentoo veritabanında bir tablomuz yok, bu yüzden şöyle bir çıktı alacağız:

mysql>SHOW TABLES;
Empty set (0.00 sec)

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

CODE CREATE TABLE Yapısı
CREATE TABLE [tablo_adı] ([bölge_adı] [bölge_veri_türü]([boyut]));

tablo_adı bölümü oluşturacağımız tablonun ismidir. Bu örnekte tablonun ismini developers 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 VARCHAR kullanacağız. Yalnızca yazı saklayacaksanız VARCHAR 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 VARCHAR veri içerebilecek. Şu anda bunu 128 karakter olarak düşünebilirsiniz. Ne yapacağımızı artık biliyoruz, hadi tabloyu oluşturalım.

mysql>CREATE TABLE developers ( isim VARCHAR(128), eposta VARCHAR(128), meslek VARCHAR(128));
Query OK, 0 rows affected (0.11 sec)

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

mysql>SHOW TABLES;
+------------------+
| Tables_in_gentoo |
+------------------+
| developers       |
+------------------+
1 row in set (0.00 sec)

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

mysql>DESCRIBE developers;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| isim   | varchar(128) | YES  |     | NULL    |       |
| eposta | varchar(128) | YES  |     | NULL    |       |
| meslek | varchar(128) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

Çı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 INSERT komutunu kullanıyoruz. Bu komut da CREATE TABLE gibi özel yapıya sahip:

CODE INSERT Yapısı
INSERT INTO tablo (sütun1, sütun2, ...) VALUES('değer1', 'değer2', ...);

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. VALUES() 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:

mysql>INSERT INTO developers VALUES('Joe Smith', 'joesmith@gentoo.org', 'toolchain');
Query OK, 1 row affected (0.06 sec)
## (Eğer sırayı tam olarak bilmiyorsanız veya tüm alanları doldurmayacaksanız aşağıdaki gibi de olabilir)
mysql> INSERT INTO developers (meslek, isim) VALUES('outsourced', 'Jane Doe');
Query OK, 1 row affected (0.01 sec)

Sonuca göre veri doğru şekilde yüklendi. Peki çok sayıda veri eklemek istersek? Bunun için de LOAD DATA 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 kayitlar.txt isimli bir dosya oluşturup deneyelim:

CODE ~/kayitlar.txt
John Doe	johndoe@gentoo.org	portage
Chris White	chriswhite@gentoo.org	documentation
Sam Smith	samsmith@gentoo.org	amd64
Important
Burada yaptığınız işlemden emin olun. Dosya içeriğinden emin değilseniz LOAD DATA kullanımı sakıncalıdır!

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

CODE LOAD DATA Yapısı
LOAD DATA LOCAL INFILE '/dosya/yolu' INTO TABLE tablo_adi;

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

mysql>LOAD DATA LOCAL INFILE '~/kayitlar.txt' INTO TABLE developers;
Query OK, 3 rows affected (0.00 sec)
Records: 3  Deleted: 0  Skipped: 0  Warnings: 0
Important
Eğer farklı ve garip bir davranışla karşılaştıysanız dosyanızda değerlerin sekmeler (tab) ile ayrıldığına emin olun. Farklı bir kaynaktan kopyalandığında editörler bazen sekmeleri boşluklara çevirebilmekte.

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:

user $mysql -u root -h localhost -p < sqldosyasi

LOAD DATA gibi, burada da sqldosyasi 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 source 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:

mysql>source sqldosyasi;

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 SELECT komutuyla yapılır. SELECT komutu oldukça karmaşık şekillerde kullanılabilir ancak biz üç temel kullanım şekline değineceğiz.

CODE SELECT sorguları
## (Bir tablodaki tüm girdileri getir)
SELECT * FROM tablo;
## (Sadece belirli koşulu sağlayan verileri getir)
SELECT * FROM tablo WHERE alan=değer;
## (Belirli alanları getir)
SELECT bolge1,bolge2,bolge3 FROM tablo [WHERE alan=deger];

İ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.

mysql>SELECT * FROM developers;
+-------------+-----------------------+----------------+
| isim        | eposta                | meslek         |
+-------------+-----------------------+----------------+
| Joe Smith   | joesmith@gentoo.org   | toolchain      |
| John Doe    | johndoe@gentoo.org    | portage        |
| Chris White | chriswhite@gentoo.org | documentation  |
| Sam Smith   | samsmith@gentoo.org   | amd64          |
| Jane Doe    | NULL                  | Outsourced job |
+-------------+-----------------------+----------------+
5 rows in set (0.00 sec)

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

mysql>SELECT * FROM developers WHERE isim = 'Chris White';
+-------------+-----------------------+---------------+
| isim        | eposta                | meslek        |
+-------------+-----------------------+---------------+
| Chris White | chriswhite@gentoo.org | documentation |
+-------------+-----------------------+---------------+
1 row in set (0.08 sec)

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.

mysql>SELECT eposta,meslek FROM developers WHERE isim = 'Chris White';
+-----------------------+---------------+
| eposta                | meslek        |
+-----------------------+---------------+
| chriswhite@gentoo.org | documentation |
+-----------------------+---------------+
1 row in set (0.04 sec)

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.

MySQL Yetkileri

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 GRANT komutunun yapısına bakalım:

Creating Users

The CREATE USER SQL statement will define users and set the authentication method, commonly by password but other plugins may be available.

An example CREATE USER command is:

CODE CREATE USER Syntax
CREATE USER '[user]'@'[host]' IDENTIFIED BY '[password]';

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. To create our users for this example:

(admin)

mysql>CREATE USER 'admin'@'localhost' IDENTIFIED BY 'password';

(guest)

mysql>CREATE USER 'guest'@'localhost' IDENTIFIED BY 'password';
Important
A host of 'localhost' does not mean DNS localhost (127.0.0.1) to MySQL. Instead, it refers to the UNIX socket connection and not TCP/IP.

GRANT İle Yetki Atama

Let's have a closer look at this somewhat simplified format of the GRANT command.

CODE GRANT Yapısı
GRANT [yetkiler] ON veritabani.* TO '[kullanici]'@'[host]' IDENTIFIED BY '[parola]';

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

  • ALL - Veritabanı için tam kontrol yetkisi
  • CREATE - Tablo oluşturma yetkisi
  • SELECT - Sorgulama yapma yetkisi
  • INSERT - Tabloya veri ekleme yetkisi
  • SHOW DATABASES - Veritabanları listesini görme yetkisi
  • USAGE - Sadece kullanım yetkisi (özel bir yetki yok)
  • GRANT OPTION - Farklı kullanıcılara yetki verme yetkisi
Not
Eğer MySQL'i bir web uygulaması ile kullanmak istiyorsanız, muhtemelen yalnızca CREATE , SELECT , INSERT, DELETE ve UPDATE yetkilerini vermeniz yeterli olacaktır (detaylı bilgi için MySQL belgelerinin GRANT ve REVOKE bölümüne bakabilirsiniz). Birçok insan gerekli olmadığı halde tüm yetkileri sağlamakta. Belirttiğimiz yetki dizisinin uygulamanın çalışmasında bir problem oluşturmayacağından emin olmak için uygulamanın geliştiricilerine/belgelerine danışabilirsiniz.

admin kullanıcımız için ALL yetkileri işimizi görecektir. guest kullanıcısı için de yalnızca SELECT 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:

mysql>GRANT ALL ON gentoo.* TO 'admin'@'localhost' IDENTIFIED BY 'parola123';
mysql>GRANT SELECT ON gentoo.* TO 'guest'@'localhost' IDENTIFIED BY 'parola456';

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

mysql>quit

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 SELECT yetkisine sahip. Bunun anlamı yalnızca veritabanında arama yapabilmek, fazlası değil. Girip bakalım:

user $mysql -u guest -h localhost -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6 to server version: 4.0.25
 
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
 
mysql>

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

mysql>USE gentoo;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
 
Database changed

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

mysql>CREATE TABLE test (test VARCHAR(20), deneme VARCHAR(2));
ERROR 1044: Access denied for user: 'guest@localhost' to database 'gentoo'

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, SELECT'i deneyelim:

mysql>SELECT * FROM developers;
+-------------+-----------------------+----------------+
| isim        | eposta                | meslek         |
+-------------+-----------------------+----------------+
| Joe Smith   | joesmith@gentoo.org   | toolchain      |
| John Doe    | johndoe@gentoo.org    | portage        |
| Chris White | chriswhite@gentoo.org | documentation  |
| Sam Smith   | samsmith@gentoo.org   | amd64          |
| Jane Doe    | NULL                  | Outsourced job |
+-------------+-----------------------+----------------+
5 rows in set (0.00 sec)

İ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.

mysql>quit
Bye
user $mysql -u admin -h localhost -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7 to server version: 4.0.25
 
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
 
mysql>

Ö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.

mysql>CREATE DATABASE gentoo2;
ERROR 1044: Access denied for user: 'admin@localhost' to database 'gentoo2'

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.

mysql>USE gentoo;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
 
Database changed
mysql> INSERT INTO developers VALUES('Bob Simmons', 'bobsimmons@gentoo.org', 'python');
Query OK, 1 row affected (0.08 sec)

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 REVOKE komutunu kullanacağız.

Kullanıcıdan REVOKE Komutu ile Yetki Almak

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

CODE REVOKE Yapısı
REVOKE [yetkiler] ON veritabani.* FROM '[kullanici]'@'[host]';

Buradaki bölümleri GRANT 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.

mysql>REVOKE ALL ON gentoo.* FROM 'guest'@'localhost';
Query OK, 0 rows affected (0.00 sec)
Not
Bu örnekte kullanıcının yetkilerini tek veritabanına verdiğimiz için aynı şekilde geri almak bir problem oluşturmuyor. Ancak daha büyük yapılarda muhtemelen gentoo.* yerine *.* kullanarak kullanıcının diğer tüm veritabanlarındaki yetkilerini de almamız gerekirdi.

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

user $mysql -u guest -h localhost -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9 to server version: 4.0.25
 
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
 
mysql>

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

mysql>USE gentoo;
ERROR 1044: Access denied for user: 'guest@localhost' to database 'gentoo'

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 DELETE 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.

DROP USER will delete the record in the user table and all privilege tables. Let's go ahead and do that:

mysql>DELETE FROM user WHERE User='guest';
Query OK, 1 row affected (0.07 sec)

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

mysql>quit
Bye
user $mysql -u guest -h localhost -p
Enter password:
ERROR 1045: Access denied for user: 'guest@localhost' (Using password: YES)

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:

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.


This page is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: Chris White, Shyam Mani, Xavier Neys
They are listed here because wiki history does not allow for any external attribution. If you edit the wiki article, please do not add yourself here; your contributions are recorded on each article's associated history page.