Mysql.exe dosyası aracılığıyla Mysql
sunucusu ile bağlantı kurulabilir. Mysql Monitörüne girmek için genel
formul: mysql [-h host_name] [-u user_name] [-pyour_pass]
Host :Masaüstünde Bilgisayarım'a sağ tıklayıp özellikler-Ağ
kimliği-Tam Bilgisayar Adı karşısında yazan isim bilgisayarınızın host
ismidir. Mysql Sunucusu sizin bilgisayarınıza kurulmuş ve bu
bilgisayardan mysql monitöre giriş yapacaksanız host olaak localhost da
yazabilirsiniz. Yada localhostun IP numarasını olan 127.0.0.1
rakamını yazabilirsiniz. Mysql sunucusuna başka bir bilgisayardan
bağlanacaksanız host olarak o bilgisayarın ağ kimliğini veya IP
numarasını yazmalısınız.
örnek:
C:\Mysql\bin\mysql -h localhost -u kullanici -p
[enter]
Enter Password:
veya C:\Mysql\bin\mysql -h localhost -u
kullanici -psifre [enter] yazılabilir.(-p den sonra şifre bitişik
yazılmalı.
Örneğin Mysql monitörüne girer girmez ilamat isimli bir veritabanını
kullanmak istersek C:\Mysql\bin\mysql -h localhost
-u kullanici -psifre ilamat [enter]
Eğer mysql sunucusunun çalıştığı bilgisayardan veritabanına giriş
yapıyorsanız hostu belirtmek zorunluluğu yok.örnek:C:\Mysql\bin\mysql -u kullanici -psifre
Mysql monitoru ile bir *.sql dosyasını icra etmek:
C:\Mysql\bin\mysql -u kullanici -psifre <
dosyaadi.sql
Mysql monitorunden çıkmak için:
mysql>quit; veya
mysql>\q yazarız.
Mysql monitöründeki komutlarla ilgili yardım almak için:
myswl> help; veya
mysq>l\h yazarız.
Mysql monitöründe iken her komut sonununa ";" işaretini koyarız, aksi
halde komutun halen bitmediği şeklinde yorumlanır ve komut satırı ->
şekline dönüşür.
örnekler:
mysql> select version(); select now();
Her iki komutda icra edilecek. Her komut bitiminden sonra ";" işaretini
koyarak tek bir satıra birden fazla komut yazabiliriz. Bu ifadeyi birden
fazla satırla yazmak istersek
mysql> select version()
-> ,
-> now()
-> ; //burdan itiabaren komut icra edilecektir.
+-----------+---------------------+
| version() | now() |
+-----------+---------------------+
| 4.0.15-nt | 2004-03-22 22:43:07 |
+-----------+---------------------+
1 row in set (0.00 sec)
Birden fazla satırlı komutlarda yazdığımız ifadenin çalışmasından
vazgeçmek ve bufferi temizlemek için \c veya \clear; ifadesini
kullanırız. örnek:
mysql> SELECT
-> USER()
-> \c
mysql>
Komut satırı '> olursa tek tırnakla başlamış bir string bekliyor.
"> olursa çift tırnakla başlamış bir string bekliyor.
; işaretini koymayı unutup entere basarsak sonraki satıra koyarız..
örnek:
mysql> SELECT USER()
-> ;
Çift tırnak beklenmesine örnek:
mysql> SELECT * FROM isimler WHERE adi = "metin AND [enter]
"> yas<30"; [enter]
Veritabanlarını görmek için:
mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| mysql |
| test |
+----------+
Yukarıdaki örnekte mysql veritabanını kullanmak için:
mysql> use mysql;
Database changed
mysql>
Mysql tablosundaki tabloları görmek için:
mysql> show tables;
+----------------- +
| Tables_in_mysql |
+----------------- +
| columns_priv |
| db
|
| func
|
| host
|
| tables_priv |
| user
|
+----------------- +
6 rows in set (0.00 sec)
Mysql sunucusunu kullanan kullanıcıların isimleri, hostları erişim
yetkileri mysql veritabanında tutulur.
Yeni bir veritabanı yaratmak için:
mysql> create database ornekveritabani;
Query OK, 1 row affected (0.02 sec)
Bir veritabanını kullanmak için Use komutu kullanılır.
use ornekveritabani:
Ornek veritabanı içinde kitaplar isminde bir tablo yaratalım:
mysql> CREATE TABLE `kitaplar` (`SiraNo` INT
UNSIGNED NOT NULL AUTO_INCREMENT ,
`kitapadi` VARCHAR(20), `YazarAdi` VARCHAR(20),
->`YazarSoyadi` VARCHAR(20),
-> `aciklama` VARCHAR(200), `BasimTarihi` DATE, `AlimTarihi` DATE,
-> PRIMARY KEY ( `SiraNo` ),
-> index `inkitap` ( `kitapadi` ),
-> index `AdSoyad` ( `Yazaradi` , `YazarSoyadi` )
-> );
Query OK, 0 rows affected (0.04 sec)
Oluşturduğumuz bu tabloyu silmek için:
mysql> drop table kitaplar;
Query OK, 0 rows affected (0.01 sec)
Oluşturduğumuz veritabanını silmek için:
mysql> drop database ornekveritabani;
Query OK, 0 rows affected (0.17 sec)
Bir dosyadan Sql komutlarını okuyarak icra etmek: Örneğin yukarıdaki
ornekveritabani ve tabloyu oluşturmak için nod defteri ile aşağıdaki
satırları yazalım.
# solda diyez işareti olursa bu satır açıklama
oluyor.dikkate
#alınmaz.
#önce veritabanımızı oluşturalalım.
create database 'ornekveritabani';#bu veritabanıını kullanmaya
başlayalım.
use ornekveritabani;
#Bu veritabanı içinde kitaplar isminde bir tablo
oluşturalım.
CREATE TABLE `kitaplar` (`SiraNo` INT UNSIGNED NOT NULL AUTO_INCREMENT
,
`kitapadi` VARCHAR(20), `YazarAdi` VARCHAR(20),
`YazarSoyadi` VARCHAR(20),
`aciklama` VARCHAR(200), `BasimTarihi` DATE, `AlimTarihi` DATE,
PRIMARY KEY ( `SiraNo` ),
index `inkitap` ( `kitapadi` ),
index `AdSoyad` ( `Yazaradi` , `YazarSoyadi` )
);
#meydana gelen tabloyu gösterelim.
show tables;
#artık query'imiz bitti. |
Yukarıdaki dosyayı not defteri ile yazdıktan sonra ornek1.sql olarak
c:\mysql\bin dizini içine kaydedelim.Uzantının mutlaka sql olması
gerekmez, Txt de olabilir.Bu dosyayı yükleyip içindeki komutları icra
etmek için:
mysql> source ornek1.sql
Query OK, 1 row affected (0.00 sec)
Database changed
Query OK, 0 rows affected (0.01 sec)
+--------------------------- +
| Tables_in_ornekveritabani |
+--------------------------- +
| kitaplar
|
+--------------------------- +
1 row in set (0.00 sec)
Yukarıdaki dosyayı Mysql monitörü dışında iken yanı DOS komut
satırında iken yüklemek isteseydik:
C:\mysql\bin>mysql -u kullaniciadi -psifre
<ornek1.sql
Tables_in_ornekveritabani
kitaplar
Mysqlyi kullanan kullanıcının kim olduğunu görmek için:
mysql> select user(); komutunu
kullanırız.
Mysql sunucu versiyonunu öğrenmek için:
mysql> select version(); komutunu
kullarız.
Hangi veritabanı üzerinde işlem yapıldığını bulmak için
mysql> SELECT DATABASE();
+-------------------+
| DATABASE() |
+-------------------+
| ornekveritabanı |
+-------------------+
1 row in set (0.00 sec)
Herhangi bir veritabanı kullanılmıyorsa yukarıdaki tabloda alt
bölümde bir şey yazmaz.
Kullanıcılara Yetki vermek:
Yetkiler:
1-Global
2-Veritabanı
3-Tablo
4-sütün bazında olabilir.
Grant ve Revoke komutu mysql adlı veritabanı içindeki tablolara etki
eden özel bir Select komutu olarak düşünülebilir.
Grant Komutu:
GRANT privileges [columns]
ON item
TO User_name [identified by 'Password']
[With GRANT OPTion]
-Köşeli parentezler içindeki ifadeler seçime bağlı.
Privileges:virgülle ayrılmış bir yetki
listesi olmalı.
Columns tek bir sütün veya "," ayrılmış
birden fazla sütün.
item yeni yetkilerin geçerli olduğu tablo
veya veritabanı.
item olarak "*.*" veya "*" kullanılarak tüm
veritabanına yetki verilebilir.Buna global
yetki denir.
Bir veritabanındaki tüm tablolarına dbname.*
tek bir tablo için dbname.tablename
Tablodaki sutunlar için dbname.tablename ve
Columns bölü-
müne istenilen sütünlar yazılarak yetki verilebilir.
With grant option seçeneği belirlenmişse
kullanıcı kendi yetkilerini başkasına vermesini sağlar.
Kullanıcı yetkileri:Select,insert,update,delete,index,alter,
create, drop.
Yönetici yetkileri:Kullanıcı yetkilerine ek olarak
Reload,shutdown,process, file
Özel yetkiler:
all: tüm yetkileri verir.
Usage:hiçbir yetki vermez.bir kullanıcı
yaratır ve girmesine izin verir.
REVOKE komutu: grant ın tersidir.
REVOKE privileges [(columns)]
on item
From user_name
Örnekler:
Mydql sunucusu üzerinde tüm yetkilere sahip yönetici konumunda bir
kullanıcı oluşturalım.
mysql> grant all //tüm yetkiler
mysql->on * //tüm veritabanı
mysql->to murat identified by 'sifrem'/murat
adında bir kullanıcı ve şifresimuratli olan bir kullanıcı oluştur.
mysql->with grant option; //yetkileri de
devret
Bu kullanıcının yetkilerini geri almak için
mysql> revoke all
->on *
->from murat;
hiç bir yetkisi olmayan bir kullanıcı tanımlayalım
mysql>grant usage
mysql->on books.*//book veritabanındaki tüm
tablolar
mysql->to nihat identified by 'yorgan';
Bu kullanıcı sadece sisteme girebilir fakat bir şey yapamaz.
Nihata uygun yetkiler vermeye karar verirsek
mysql>grant select,insert,update,delete, index,
alter, create, drop
mysql->on books.*
mysql->to nihat //şifresini belirtmemiz
gerekmiyor.
Nihatın yetkilerini azaltmak için:
Mysql>revoke alter, create, drop
->on books.*
->from nihat;
Tüm yetkilerini almak için
mysql>revoke all
->on books.*
->from nihat;
Tüm veritabanlarını sadece okuma yetkisi olan bir kullanıcı
oluşturalım:
mysql>grant select
mysql->on *.*//Tüm veritabanları ve
tablolar
mysql->to nihat identified by 'yorgan';
Herhangi bir hostdan veritabanına tam erişim hakkı olan bir kullanıcı
tanımlayalım.
mysql> grant all
-> on *
-> to 'murat'@'%' identified by 'marmara';
->with grant option; //yetkileri de devret
Query OK, 0 rows affected (0.00 sec)
Sadece Sunucunun kurulu olduğu (localhost) dan giriş yapacak bir
kullanıcı tanımlayalım.
mysql> grant all
-> on *
-> to 'murat'@'localhost' identified by 'marmara';
->with grant option; //yetkileri de devret
Yukarıdaki örnekte to 'murat'@'127.0.0.1'
identified by 'murat'; yazsakda sonuç değişmeyecektir.
Sadece BenBil isimli hostdan (bilgisayardan erişim hakkı olan bir
kullanıcı tanımlayalım. İstenirse BenBil yerine IP nosuda yazılabilir.
mysql> grant all
-> on *
-> to 'murat'@'BenBil' identified by 'marmara';
->with grant option; //yetkileri de devret
Görüldüğü gibi Kullanıcı yaratılırken host belirtilecekse tırnak
içinde isim, @ işareti ve tırnak içinde host ismi yazılmalı. Eğer host
ismi belirtilmezse herhangi bir host olduğu ('%') şeklinde yorumlanır.
Mysql veritabanındaki user, db, host, Tables_priv
columns_priv tablolarındaki verileri doğrudan değiştirerek de
kullanıcılara yetki verir veya alırız.Bu taktirde değişiklikleri
sunucuya bildirmemiz gerekir. (Grant ve Revoke de ise otamatik
yetkilendirme tablolarını okur.)
Bunu üç yoldan biriyle sunucuya bildirebiliriz.
mysql>Flush privileges; //Mysql monitörü
içinde iken.
c:\mysql\bin\mysqladmin flush-privilesges -u
kullanici -psifre // Dosda iken
c:\mysql\bin\mysqladmin reload -u kullanici -psifre
//Dosda iken
Örneğin nihatın pasaportunu "yastik" olarak değiştirmek istersek:
mysql> UPDATE user SET Password=PASSWORD('yastik')
->
WHERE user='nihat';
mysql> FLUSH PRIVILEGES;
Doğrudan müdehale ile bir kullanıcı yaratalım.
Veritabanı seçiliyor:
mysql> use mysql
kullanıcı yaratılıyor:
mysql> INSERT INTO
user (host, user, password) VALUES(
-> 'localhost',
-> 'rehadmin',
-> password('rehadmin')
-> );
Yukarıdaki kullanıcıyı Mysql ye ekledik, fakat hiç bir yetkisi yok.Bazı
yetkiler verecek olursak:
mysql> UPDATE user SET Select_priv='Y', Insert_priv='Y',
Update_priv='Y', Delete_priv='Y',
-> Create_priv='Y', Drop_priv='Y',
Alter_priv='Y)
->
WHERE user='rehadmin';
mysql> FLUSH PRIVILEGES;
Yukarıdaki örnekte Select,insert,updade, delete create, drop alter
yetkileri olan bir kullanıcı oluşturduk."Y" yerine "N" olsaydı ilgili
yetkisi olmayacaktı.
Sadece rehber isimli bir veritabanını okuma yetkisi olan bir
kullanıcı tanımlayalım.
mysql> INSERT INTO
db
-> ( host, db, user, Select_priv)
->
-> VALUES(
-> 'localhost', 'rehber', 'rehuser', 'Y'
-> );
Yukarıda 'rehber' isimli veritabanına 'rehuser' kullanıcısının sadece 'localhost'tan
erişebileceği ve yalnız 'select' hakkı olduğu belirtiliyor.
Mysql veritabanı içindeki user tablosu
içindeki yetkiler globaldir. Yani User
tablosu içinde Select (okuma) yetkisi
verilmişse sunucu diğer tablolara bakmaksızın bu kullanıcının tüm
sunuculardaki veritabanlarını(Mysql veritabanı da dahil olmak üzere)
okuma yetkisi olduğunu anlar, Mysql veritabanı içindeki
Db tablosu ise bir kullanıcıya sadece
belirli bir veritabanı ile ilgili yetki verilirse kullanılır.
Host tablosu ise db
tablosunu tamamlar.Bir kullanıcı birden fazla bilgisayardan sunucuya
bağlanacaksa Db tablosunda
host bölümü boş olacak, fakat
host tablosundaki
host alanında birden fazla giriş olacaktır.
Bir kullanıcının sadece şifresini değiştirmek için özel bir komut
vardır ve derhal etki eder.
mysql> SET PASSWORD FOR root@localhost=PASSWORD('new_password');
http://www.mysqlfront.de
adresinden Mysql-Front programını indirerek
windows ortamında görsel olarak çok daha kolay yukarıdaki anlatılanları yapabilir, yeni
veritabanı, tablo oluşturma, tabloları yedekleme, dışarıdan veri
alma, yeni kullanıcı ekleme silme, kullanıcılara yetki verme vs. işlemlerini yapabilirsiniz.
|