MySQL For Database Administrators

25 Ocak 2015
24 min read

  INTRODUCTION

  1. http://dev.mysql.com
  2. MYSQL KURULUM :
  3. WINDOWS INSTALL KULLANMADAN : mysql*noninstall*.zip dosyasını istenilen yere aç.
    PATH içine c:/opt/mysql/bin ekle
  4. Mysql’i komut satırından çalıştırmak :
    mysql — console
  5. Mysqladmin –uroot password newpassword ile root şifresi değiştirilir.
  6. Mysql root şifresini unutunca : mysqld – -console – -skip-grant-tables ile mysql başlat
  7. Mysql konsoluna bağlanmak : mysql –u<username> -p<password>
  8. Mysql’i komut ile kapatmak:
    mysqladmin –uroot –p<root_sifresi> shutdown
  9. MYSQL Service olarak çalıştırmak: (services.msc ile servisler görünür)
    mysqld – -install <service_name>
    ile hata alındıysa c:\opt\mysql\bin\mysqld – -install <service_name> şeklinde çalıştırırsan sorun düzelir.net start  <service_name>
    net  stop  <service_name>

    c adımını uygula.

  10. Services Unistall Etmek :
    mysqld – -remove <service_name>
  11. Yeni db oluşturmak : mysql konsoluna bağlıyken aşağıdaki komutu çalıştırarak oluşturulur.
    create database <dbName>;
  12. Backup dosyasından dönüş : mysql konsolunda;
    mysql> use <db_name>;
    mysql> source <dosya_path>;
  13. Show databases;
    show tables;
    show tables from mysql;
     
  14. Select * from city limit 10; ilk 10 kaydı getir;
    Select * from city limit 0,10; üst satırdaki komut ile aynı;
    Select * from City limit 10,10; ilk 10’u atla ikinci 10’u getir;
  15. Desc city; tablo yapısını gösterir.
  16. select * from information_schema.tables\G; db’nin tablo bilgisini verir. \G column isimlerinin diklemesine yazılmasını sağlar.
  17. Select @@datadir;  data dizini öğrenilebilir.
  18. Stattus; o an ki sunucunun çalışmasıyla ilgli bilgi verir
  19. Client / Server Architecture:
  20. Mysqld : db leri yönetim komutu, multi-threaded çalışır. Server programıdır.
  21. Client programlar:
  22. Mysql
  23. Mysqlimport

                                                          iii.      Non-Client programlar:

  1. Myisamchk : dosya kontrol eder ve hata varsa onarma yapar(index ve dataların durumunu kontrol eder).
  2. Myisampack : dosyanın diskte daha az yer kaplaması için yerleştirme yapar. 
  3. Mysql de her connection bir thread tarafından karşılanmakta. QueryCahce için mysql’e gelen tüm sql bire bir aynı ise sorgu cache’ten gelir. Aksi halde qache ıskalanmış olunur.
  4. MYSQL disk yapısı:
  5. *.frm : tablo bilgilerinin tutulduğu dosya
  6. *.myd : myISAM’in data dosyasi

                                                          iii.      *.myi : myISAM için index’lerin saklandığı dosya

  1. INNODB’de ise *.frm sadece tek bir dosya oluşturur. Trigger içinde *.trn dosyaları oluşturur.
  2. MYSQL Memomry Yapısı :
  3. Per-session :  yapılan her connection için bir memory ataması yapılabilir.
  4. Per-instance: bağlanan her kullanıcı belirlenen ortak memory kullanır. (Default)
  5. MYSQL SERVER (Solaris 10):
  6. “groupadd mysql” komutu ile “mysq” isimli kullanıcı grubu oluşturulur.
  7. “useradd -g mysql mysql” mysql isimli kullanıcı oluşturulur.
  8. “cd /usr/files” ile mysql kurulum paketinin olduğu dizine geçilir.
  9. “pkgadd -d mysql-xxx.pkg” “/opt/mysql” klasörünün altına komutu ile kurulum başlatılır.
  10. kurulum bittiğin mysql altına “/opt/mysql/mysql” altına yerleştirilmiş olunacaktır.
  11. /etc/init.d dizinin altındaki “mysql” dosyası bir text editör ile açılıp “datadir=<something>” kısmı “datadir=/opt/mysql/mysql/data”olaraka değiştirilir.
  12. “/opt” dizinine geçilir ve “chown -R mysql:mysql mysql” komutuyla dizin sahipliği “mysql” kullanıcısına devir edilir.

 

  1. Initiallizing the Database
  2. “su mysql” komutuyla root kullanıcısından “mysql” kullanıcısına geçilir.
  3. “cd /opt/mysql/mysql/scripts” komutu çalıştırılır.

iii.      “./mysql_install_db —user=mysql —ldata=/opt/mysql/mysql/data” komutu çalıştırılır

  1. “/opt/mysql/mysql/bin” dizinine geçilir.
  2.  “./mysqld_safe —datadir=/opt/mysql/mysql/data —user=mysql &” komutuyla mysql servisi başlatılır.
  3. MySql’e Uzaktan Erişim İzni Verilmesi:
  4. Sh ./mysqladmin –u root password newpass ile root şifresi değiştirilir.
  5. mysql –u root –p ile mysql konsoluna giriş yapılır.

iii.   Grant all on *.* TO root@’%’ identified by ‘pass’ ile root kullanıcısına tüm db’lerde işlem yapma yetkisi verilir.

  1. Mysql Default Storage Engine’i Değiştirmek:
  2. Mysql ilk kurulduğunda defaul storage engine Issam olarak gelir.
  3. Default engine görmek için “mysql –u root –p” ile mysql konsola giriş yapıp “show engines;” komutu çalıştırılabilir.

iii.   “opt/mysql/mysql” dizinin altında yer alan “my.cnf” dosyasına “default-storage_engine=innodb” yazılır.

  1. Mysql Tablolarının İsimlendirilmesi :
  2. mysql tabloları oluştururken windows ortamlarda hepsini küçük harf olarak isimlendirir. Unix sistemlerde ise ilk harf büyük olacak şekilde isimlendirme yapar. Tüm tablo isimlerinin windowstaki gibi küçük harf olmasını istiyorsak
    “my.cnf” dosyasının içine “lower_case_table_names=1” satırını eklememiz gerekmektedir.
  3. Mysql TimeZone Değiştirmek: Mysql_tzinfo_to_sql      /usr/share/zoneinfo | mysql –u root mysql ile timezone  ayarlaması yapılır.
  4. Slow Query Loglarını Açmak Icin :
  5. Show variables like ‘%slow%’;
    set global slow_query_log= ON;
  6. Mysql> conslounda yazılan komutları dosyaya yazmasını sağlamak için :
  7. tee  <dosyaYolu> ;
  8. notee; ile de kapatılır.
  9. Mysql_upgrade Programı: eski mysql versiyonundan yeni mysql sürümüne geçmek kullanılan program. Yeni mysql sürümünün bin dizini içinde;
    shell>mysql_upgrade  – -user=user_name    – -verbose 
  10. CONFIGURING MySQL SERVER ( my.ini / my.cnf ) : 
  11. Shell> mysqld – -verbose | help ile mysqld komutunun parametreleri öğrenilebilir. Mysqld komutunun parametreleri per-instance bazında çalışır.
  12. Option File Groups : mySQL ayarları my.ini (my.cnf) dosyasında yapılır. Seçenekler [ ]arasında gösterilir.
  13. [client] : mysql kurulu olduğu makina üzerinde çalışan mysql client uygulamasına ait ayarlar bunun altında yapılır. Yani shell>mysql komutuyla çalıştırılan programa ait ayarlar.
  14. [mysqld]
    general_log   
    #genel mysql işlemlerinin logunu tutar.

    log-bin  
    #insert,update,delete işlemlerinin tutulmasını sağlar. Önceden full backup alınırsa istenilen tarih ve saatteki datalara dönüşü bu log dosyası ile sağlanabilir.
    max_binlog_size ile dosya belli bir değere ulaştığında yenisinin oluşturulması.SET GLOBAL expire_logs_days=7; ile 7 günden daha eski logların temizlenmesi sağlanabilir.

    slow_query_log  #yavaş çalışan queryleri loglar.
    Eğer log komutlarından sonra path belirtilmezse varsayılan olarak mysql data dizinine

    log-queries-not-using-indexes ise index’e sahip olmayan queryleri listelenmesi sağlanabilir.

                                                          iii.      Shell>my_print_defaults  <db_name> <option_group> : ile my.ini içine girmeden değerleri ekrana listelenebilir. Örnek:
c:/opt/mysql/bin/my_print_defaults   world   mysqld

 

  1. Dynamic Server Variables
  2. Global Variables : bir değişkenin tipi global olarak değitirildiğinde o an sisteme bağlı kullanıcıları etkilemez, sonra bağlananları etkiler. Sadece root değiştirebilir.
  3. Session Variables: Bağlı olan kullanıcıları etkiler. Herkes kendi sessionındaki değişkenin değerini değiştirebilir. Ve sadece kendi
    örnek :
    show variables like ‘bulk%’;
    set bulk_insert_buffer_size=4000000;
    show variables like ‘bulk%’;
  4. Show global status; global değişkenlerin değerini verir.
    show session status;
    session değişkenlerinin durumunu gösterir.
    örnek:
    show global status like ‘bytes%’
  5. SQL MODE Değiştirmek:  sql modun değiştirilmesi sql cümleciklerinin nasıl yazılacağını belirler. Örnek-1: fonkisyonları çağırırken parantez kullanımının zorunlu kılınması gibi veya TRADITIONAL dışında bir mode seçildiğinde geçersiz veri girişi yapılrsa bu veri girişine izin verilmesinin sağlanması.
  6. mysql>set sql_mode=’TRADITIONAL’;
  7. MYSQL CLIENT:
  8. Mysql
  9. Mysql konsoluna giriş için kullanılan komuttur. Örnek:
    mysql  -uroot  -p
  10. Shell>mysql  – uroot –proot world –e “select count(*) from city where countryCode=’TR’ ” şeklinde mysql konsoluna giriş yapmadan da sql cümleleri çalıştırılabilir.

                                                          iii.      Shell>mysql  – uroot –proot world – -html –e “select count(*) from city where countryCode=’TR’ ” > c:\iller.html

  1. Shell>mysql  – uroot –proot world – -xml –e “select count(*) from city where countryCode=’TR’ ” > c:\iller.xml
  2. “ c:\opt\mysql\bin>mysql -u root -proot world —xml -e “select name,countryCode from city where countryCode like ‘TUR’” > c:\iller.xml ”
  3. SADECE UNIX’te çalışır:
    mysql –uroot –proot  world «END
    select name from city where countryCode=’TUR’;
    \q
    END

                                                         vii.      Mysql –uroot   -proot  world – -html –e < d:\calistir.sql ile sql cümlesi bir dosyaya yazılıp o dosyadan çalıştırılması sağlanabilir.
veya
mysql konsolundan:
mysql>SOURCE  c:/calistir.sql;

                                                       viii.      Echo %ERRORLEVEL%  ->değeri 0 dan fakrlı ise son çalışan komut hata vermiştir (windows için) .
echo $?  -> ise UNIX içindir.

  1. C:\mysql –uroot –proot  – -safe-updates ile çalıştırırsan where clause olmayan sql’lerin çalışması engellenir.
  2. Mysqladmin :
  3. mysqladmin – -help | more
  4. mysqladmin –uroot –proot processlist 
  5. Mysqlipmport 
  6. MysqldumpNot:

    www.cygwin.com unix komutlarını windowsta kullanmayı sağlayan proje.

  7. DATA TYPES :
  8. Numeric :
  9. UNSIGNED : sadece pozitif değer almasını sağlar. Örnek: alan bit tipinde oluşturulursa ve unsigned olarak işaretlenirse alabileceği max. değer 255 olacaktır.
  10. INTEGER TYPES :
  11. SYNTAX :
    INT
    [(<width>)] [UNSIGNED]
  12. TINYINT : -128 <-> 127 (UNSIGNED olursa 0 <-> 255). 1 byte
  13. SMALLINT : 2 byte
  14. MEDIUMINT : 3 byte
  15. INT : 4 byte
  16. BIGINT : 32 bit işlemcilerde anlam ifade etmez. 8 byte

                                                          iii.      FLOATING-POINT TYPES : Bunlardan UNSIGNED olabilir.

  1. FLOAT : 4 byte
  2. DOUBLE : 8 byte
  3. FIXED-POINT TYPES:
  4. DECIMAL
  5. BIT TYPE:

 

  1. Charcter: Stringlerin karşılaştırılmasında charset ve collation devredir. Collation içinde sıralama ve karşılaştırma algoritaması vardır.
  2. TEXT
  3. CHAR : 255 karakter olabilir. Max. 765 byte olabilir.bir karkter de olsa 2,3 karakterde olsa 255 byte yer kaplar.
  4. VARCHAR : 65533 byte yer tutar. Ne kadar karakter saklayabileceğini encoding’e göre değişir.
  5. TEXT
  6. TINYTEXT
  7. TEXT
  8. MEDIUMTEXT
  9. LONGTEXT
  10. INTEGER
  11. ENUM : String olan ifadenin daha az yer tutması sağlar.
    enum(‘Asia’,’Europe’,’North America’,’Africa’,’Oceania’)
  12. SET
  13. Binary: .*.jpeg,doc ,pdf gibi dosyalar db’de saklanmak isteniyorsa aşağıdaki veri tipleri kullanılır.
  14. BINARY  : 255byte
  15. VARBINARY : 64k

                                                          iii.      TINYBLOB : 255B

  1. BLOB : 64 KB
  2. MEDIUMBLOB : 16MB
  3. LONGBLOB :  4GB
  4. Temporal:
  5. DATE :
  6. TIME :

                                                          iii.      DATETIME:

  1. TIMESTAMP : creationDate,updateDate alanları için kullanılmalı.
  2. NULL :
  3. Column NOT NULL ile boş geçilmesi engellenebilir.
  4. AUTO_INCREMENT
    tablodaki auto_increment değerini değiştirmek istenirse istenilen değerden
    -1 daha küçük bir değer girişi yapılabilir. Örnek: id alanını 100 yapmak isteniyorsa ilk önce insert into tablo values(100,’değer’);
    sonra da insert into tablo values(‘değer’); sonrası  100’den devam edecektir.

                                                          iii.      LAST_INSERT_ID() fonksiyonu : girilen son ID’yi verir.

  1. METADATA: mysql, tüm db ve tabloların bilgilerinin information_schema üzerinde tutar. Gerçek bir db değil memory üzerinde oluşturulan bir db’dir.
  2. Show databeses;
  3. Show tables from world;
  4. Show tables like ‘%t%’;
  5. Select database();
  6. Select user();
  7. Status; -> bağlantı hakkında bilgi verir.
  8. Show status; -> global değişkenlerin durumu hakkında bilgi verir.
  9. Mysqlshow komutuyla da işletim sistemi konsolundan da show komutuyla elde edilen bilgiler alınabilir.
  10. DESC <tabloAdi>; ile tablo kolon bilgileri elde edilir.
  11. Help show ; ile show komutu hakkında bilgi verir.
    select * from information_schema.views where table_schema=’world’\G;

Örnek:
SELECT *

FROM INFORMATION_SCHEMA.SCHEMATA

WHERE SCHEMA_NAME= ‘test’\G

 

SELECT TABLE_NAME, ENGINE

FROM TABLES

WHERE TABLE_SCHEMA = ‘world’;

 

SELECT TABLE_SCHEMA, ENGINE, COUNT(*)

FROM TABLES

GROUP BY TABLE_SCHEMA, ENGINE

 

SELECT DATA_TYPE, COUNT(*)

FROM INFORMATION_SCHEMA.COLUMNS

WHERE TABLE_SCHEMA = ‘world’

AND DATA_TYPE IN (‘CHAR’, ‘VARCHAR’)

GROUP BY DATA_TYPE;

show table status from world where Engine like ‘%IN%’\G; ->world db’sinde engine innodb olan tabloları verir.

 

  1. Show open tables; o an için erişilen tabloların bilgisini verir.
  2. Show processlist; mysql’e erişim bilgisini veriri.
  3. STORAGE ENGINES :
  4. SET global storage_engine := InnoDB ile konsoldan db kapanana kadar default storage engine değiştirilmiş olur. Kalıcı olması isteniyorsa my.ini içinde mysqld altında tanımlama yapılması lazım.
  5. Tablonun engine değiştirmek : ALTER TABLE <tabloadi> ENGINE = InnoDB
  6. c:>mysqld – -verbose – -help | find “engine” ile my.ini dosyası içinde mysqld altında yazılabilecek paramtere hakkında bilgi verir.
  7. MYISAM: *.frm,*.myd, *.myi  db ile ilgli bilgiler dosyalarında tutulur. Dosya bazlı bir sistemdir. *.frm de tablo bilgileri, *.myd datalar, *.myi de ise index bilgileri durur.
    En büyük avantajı dosyaların kopyalanıp başka bir yere kolaylıkla taşınabilmesidir.
    MYISAM 3 farklı depolama biçimi vardır.
  8. Fixed-row format
  9. Dynamic

                                                          iii.      Compressed format

  1. InnoDB : Transaction özelliği olan bir engine’dir.
  2. Example : Storage engine geliştirmek için örnektir.
  3. Federated : Aynı bir sunucudaki başka bir mysql instance’taki tabloyu kendi kendi instance’ımızda gösterilip çağırılmasını sağlar. Uzak db’deki tablo böylelikle kendi db’mize katmış oluruz.
    create table sehirler(
    id int,
    sehirAdi varchar(30)
    ) engine=federated comment=’mysql://root:root@localhost:3306/world/city’;
    tablonun bire bir aynısını oluşturmak zorundayız. Bu işlem sonucu bizim makinamızda sadece tablonun *.frm dosyası oluşur. Datalar uzak makinada durur ve oradan okunur.
  4. ARCHIVE : Tablonun içine atılan bir veri değiştirilemez, silinemez. Datawarehouse uygulamalarında kullanılabilir. Veri sıkkıştırması yaptığı için çok büyük veri depolaması olanağı sağlar.
  5. CSV : Virgül ile ayrılmış olarak tutulur. Tablonun engine cvs yaparak tabloyu excel’den açılması sağlanabilir.
  6. MEMORY : Geçici tablolar oluşturmak için. Mysql stop edildiğinde datalar yok olur. Tablo hafızada oluşturulur.

    ALTER TABLE <tablo> ENGINE=<engine>
    ile tablonun engine değiştirilebilir. 
  7. PARTITIONING : Bir tablonun verilerini kriterlere göre farklı tablolarda tutulması sağlanabiliyor. Innodb’de foreign key desteği yok. Tabloların bölümlenmesi;
  8. RANGE : aralığıa göre
  9. LİST : verilen listeye göre göre
  10. HASH : bir fonksiyona göre
  11. KEY :show variables like ‘%partition%’; ile partition özelliğinin açık mı kapalı mı olduğu kontrol edilebilir.


    CREATE TABLE <tablo> ( <tablo_column_options>) ENGINE=<engine_name> PARTITION BY <type> (<partition_option>);

    örnek:
    CREATE TABLE orders_range (

id INT AUTO_INCREMENT PRIMARY KEY,

customer_surname VARCHAR(30),

store_id INT, salesperson_id INT,

order_date DATE, note VARCHAR(500)

) ENGINE = MYISAM

PARTITION BY RANGE(id) (

PARTITION p0 VALUES LESS THAN(10000),

PARTITION p1 VALUES LESS THAN(20000),

PARTITION p2 VALUES LESS THAN(30000),

PARTITION p3 VALUES LESS THAN(40000),

PARTITION p4 VALUES LESS THAN(50000)

);

Örnek :
CREATE TABLE orders_list (

id INT AUTO_INCREMENT, customer_surname VARCHAR(30),

store_id INT, salesperson_id INT,

order_date DATE, note VARCHAR(500),

INDEX idx (id)

) ENGINE = MYISAM

PARTITION BY LIST(store_id) (

PARTITION p0 VALUES IN (1, 3, 4, 17),

PARTITION p1 VALUES IN (2, 12, 14),

PARTITION p2 VALUES IN (6, 8, 20),

PARTITION p3 VALUES IN (5, 7, 9, 11, 16),

PARTITION p4 VALUES IN (10, 13, 15, 18)

);

örnek:
CREATE TABLE orders_key (

id INT AUTO_INCREMENT, customer_surname VARCHAR(30),

store_id INT, salesperson_id INT,

order_date DATE, note VARCHAR(500),

INDEX idx (id)

) ENGINE = MYISAM

PARTITION BY KEY(order_date) PARTITIONS  4;

örnek:  5 tane partition oluşturuyor ve bunlara ait 2’şer tane alt partitionlar oluşturuyor.

CREATE TABLE orders_range (

id INT AUTO_INCREMENT PRIMARY KEY,

customer_surname VARCHAR(30),

store_id INT, salesperson_id INT,

order_date DATE, note VARCHAR(500)

) ENGINE = MYISAM

PARTITION BY RANGE(id)

SUBPARTITION BY HASH(store_id)

SUBPARTITIONS 2 (

PARTITION p0 VALUES LESS THAN(10000),

PARTITION p1 VALUES LESS THAN(20000),

PARTITION p2 VALUES LESS THAN(30000),

PARTITION p3 VALUES LESS THAN(40000),

PARTITION p4 VALUES LESS THAN(50000)

);

  1. SHOW CREATE TABLE <tablo> : tabloyu oluşturan SQL’i verir.
  2. SHOW TABLE STATUS <tablo> : tablo hakkında bilgi verir.
  3. TRANSACTIONS AND LOCKING :
  4. TRANSACTION :
    START TRANSACTION; ile başlar.
    COMMIT veya ROLLBACK ile bitirilir.
  5. ISOLATION LEVELS :
  6. READ UNCOMMITTED : yapılan tüm değişiklikler tüm kullanıcılar tarafından anında görülür.
  7. READ COMMITTED : diğer kullanıcılar commit yapana kadar onların yaptıklarını değişiklik diğerleri tarafından görünemez.

                                                          iii.      REPEATABLE READ : transaction boyunca yapılan select’ler de hep aynı datalar görünür. Diğerlerinin yaptığı değişiklikleri görünmez.;

  1. SERIALIZABLE :
  2. LOCKING :
  3. LOCK IN SHARE MODE: okumaya izin verir, transaction kapatılana kadar yazmaya izin vermez.
  4. Start transaction;
    Select * from country where code=’AUS’ LOCK IN SHARE MODE; commit;
    bu kayıt diğer kullanıcılar tarafından sadece okunabilir. Commit’ten sonra kayıt yapılabilir.
  5. Lock tables <table> READ; engine’den bağımsız olarak tablonun kilitlenmesini sağlar. Select’ler bekletilmez sadece insert,update bekletilir.
    Lock tables <table> WRITE; select , insert,update hepsi bekletilir. 

                                                          iii.      select get_lock(<lock_name>,<sure sn>) ;
select release_lock(
<lock_name>);

 

 

  1. SECURITY AND USER MANAGEMENT : 5 aşamalı erişim hakkı tanımlanabilir. Haklar, Read-Only, Modify data, Administrative şeklinde gruplanır.
  2. HAKLAR :
  3. USER : 
  4. DB:  db üzerine verilebilecek olan haklar;
  5. ALTER
  6. CREATE Create databases and tables
  7. CREATE TEMPORARY TABLE Create a temporary table
  8. VIEW Create views
  9. Modify tables with ALTER TABLE
  10. CREATE DELETE Remove rows from tables
  11. DROP Drop databases and tables
  12. EVENT Set up events for the event scheduler
  13. GRANT OPTION Grant privileges to other accounts
  14. INDEX Create and drop indexes
  15. INSERT Add rows to tables
  16. SELECT Select records from tables
  17. SHOW VIEW
  18. UPDATE Modify records in tables
  19. TABLES Use SHOW CREATE VIEW
  20. Security and User Management
  21. LOCK Lock base tables

                                                          iii.      TABLES:

  1. ALTER
  2. CREATE Create databases and tables
  3. DELETE Remove rows from tables
  4. Modify tables with ALTER TABLE
  5. DROP Drop databases and tables
  6. GRANT OPTION Grant privileges to other accounts
  7. INDEX Create and drop indexes
  8. INSERT Add rows to tables
  9. SELECT Select records from tables
  10. TRIGGER Create and drop triggers
  11. UPDATE Modify records in tables
  12. COLUMNS:
  13. INSERT Add rows to tables
  14. SELECT Select records from tables
  15. UPDATE Modify records in tables
  16. PROCS :
  17. KULLANICI OLUŞTURMAK :
    create user ‘<username>’@’<nerdenbağlanacak>’ identified by ‘<buparolaile>’;
    örnek:
    create user ‘ugur’@’160.75.%.%’ identified by ‘sifre2’;
    create user ‘ugur’@’%.ce.itu.edu.tr’ identified by ‘sifre3
    ’;

Örnek:
use mysql;
update user set password=’
*7921BC8B90688E5151D69AC90C39AE3230C28FEB’ where id=1;
flush privilages;
ile kullanıcının password’ü değiştirilmiş olur.

  1. YETKILENDIRME (GRANT) :
    GRANT <yetki> <db>.<tablo> TO ‘<kullanici>’@’<nerdenbalanacaği>’ IDENTIFIED BY ‘<password>’;
     

    Grant komutu kullanıcı tanımlı değilse kullanıcıyı oluşturur. Kullanıcı oluşturması istenmiyorsaNO_AUTO_CREATE_USER enable edilmeli.show grants for current_user();
    sonucu WITH GRANT OPTION görünüyorsa, bu kullanıcı başka kullanıcılara yetki verebilir.

  2. DROP USER : DROP USER ‘jim’@’localhost’;
  3. RENAME USER : RENAME USER ‘jim’@’localhost’ TO ‘john’@’localhost’;
  4. PAROLA OLUŞTURMA : Parola oluşturma için 4 farklı yöntem vardır.
  5. GRANT
  6. SET PASSWORD :
    SET PASSWORD FOR ‘jim’@’localhost’ = PASSWORD(‘NewPass’);

                                                          iii.      Mysqladmin password :
mysqladmin -u root password ‘rootpass’
mysqladmin -u root -h host_name password ‘rootpass’

  1. Update mysql.user tablosunun güncelleyerek.  :
    use mysql;
    update user set password=’
    *7921BC8B90688E5151D69AC90C39AE3230C28FEB’ where id=1;
    flush privilages;
     
  2. HAKLARIN GERİ ALINMASI (REVOKE) :
    REVOKE DELETE, INSERT, UPDATE ON world.* FROM ‘Amon’@’localhost’;

REVOKE GRANT OPTION ON world.* FROM ‘Jan’@’localhost’;

REVOKE ALL PRIVILEGES, GRANT OPTION FROM ‘Sasha’@’localhost’;

  1. KAYNAKLARA LİMİT EKLEME:
    GRANT ALL ON test.* TO ‘quinn’@’localhost’

WITH

MAX_USER_CONNECTIONS 1

MAX_CONNECTIONS_PER_HOUR 10

MAX_QUERIES_PER_HOUR 50

MAX_UPDATES_PER_HOUR 20;

  1. PASSWORD ATANMAMIŞ KULLANICILAR :
    SELECT Host, User FROM user WHERE Password = ”;
  2. AYNI PASSWORD’e SAHIP KULLANICILAR :
    SELECT User FROM mysql.user GROUP BY password HAVING count(user)>1;
  3. ERİŞİM KONTROLLERİNİN KAPATILMASI : Örneğin root password unutulduğunda mysql kapatılıp, mysql —skip-grant-tables skip-networking parametresi ile açılıp root password’ü değiştirilebilir.
  4. TABLE MAINTENANCE : Tablolara bakım işlemleri. Tablo bakımı şekillerde yapılabilir.
  5. SQL KOMUTLARIYLA:
  6. CHECK TABLE : Tablonun ve içeriğinin geçerliğini kontrol eder.örneğin bir view tanımlarken geçerli olan bir tablo sonradan silindiyse view’in uygun olup olmadığı bilgisini verir. Onarma sözkonusu değildir. İndexlerin istatistiklerini düzenler. Hata varsa db stop eder. Çünkü tekrar açılıp recovry yapamak için.

check table <db>.<tablo> [,<tablo>] [<options>];

OPTIONS:
FOR UPGRADE

QUICK*

FAST*

CHANGED*

MEDIUM*

EXTENDED*

 

*Sadece MyIsam için geçerilidir.

 

  1. REPAIR TABLE : myISAM , CSV ve ARCHIVE için çalışır.
    REPAIR [LOCAL|NO_WRITE_TO_BINLOG] TABLE <table_name> [, <table_name>, …] [QUICK] [EXTENDED] [USE_FRM] 

                                                          iii.      ANALYZE TABLE :  Tablodaki key’leri tarar ve index’leri güncelleyerek query’lerin daha hızlı çalışmasını sağlar. Tüm eninge’lerde çalışır.
ANALYZE TABLE <table_name> [, <table_name>];

 

  1. OPTIMIZE TABLE : tabloları ve  BTREE+ ağacını yeniden oluşturur,indexlerin istatistiklerini günceller. Datalarda %20 oranında değişme olduğunda yapılmalı.
    OPTIMIZE TABLE <table_name> [, <table_name>];
  2. CHECKSUM TABLE :  SadeceMyIsam için veri tutarlığını kontrol eder ; 
  3. MySQL Administrator: 
  4. Mysqlcheck : SQL komutlarıyla yapılan tüm işlemler bu komutla da yapılabilir. Tersi de geçerlidir.
    mysqlcheck –-databases <dbname>
    mysqlcheck –-all-databases  [—options]

    options:
    —check(default),—repair,—analyze,—optimize 
  5. Myisamchk : Sadece engine myisam ise. Doğrudan dosya üzerinde çalıştığı için mysql’in stop edilmesi gerekmektedir.
  6. Mysqlbinlog —start-datetime=”2010-10-20 11:11:11” Godel1-bin.000010  ; ile belirtilen tarihten ve saatten sonra çalıştırılmış olan komutları gösterir.
  7. Tablolarda bozulma olduysa yapılabilecekler;
  8. Mysqldump –uroot -proot db_name table_name > dump_file;
    mysql –uroot –proot db_name < dump_file ;
  9. —innodb_force_recovery parametresiyle mysql start etmek.
  10. EXPORTING / IMPORTING DATA :
  11. SELECT … INTO OUTFILE : sunucu üzerinden bulunan bir dizine export yapılabilir.
    örnek-1:
    select * INTO ‘/home/backup/sonuc.txt ‘ FROM City;örnek-2:
    SELECT * INTO OUTFILE ‘C:/City.csv’

FIELDS TERMINATED BY ‘,’

ENCLOSED BY ‘”’

LINES TERMINATED BY ‘\r\n’ FROM City

  1. Mysqldump :
    mysql -u root -p<password> <dbname>  > (path/source)
  2. LOAD DATA INFILE : sunucu üzerinde bulunan bir dizinden okuma yapılabilir.
    örnek-1:
    LOAD DATA INFILE ‘C:/City.txt’ INTO TABLE City;örnek-2:
    LOAD DATA INFILE ‘C:/City.csv’ INTO TABLE City

FIELDS TERMINATED BY ‘,’

ENCLOSED BY ‘”’

LINES TERMINATED BY ‘\r’;
örnek-3: birinci kolonu alma, ikinci kolona Name ekle vb.

LOAD DATA INFILE ‘C:/City.txt’ INTO TABLE City (@skip,Name,CountryCode,District,Population)

  1. Mysql Restore :
    shell>mysql -u root -p<password> <dbname> < (path/source)
  2. SOURCE : restore’dekinden farkı işletim sisteminden değil mysql client programından çalıştırılması.
    mysql>SOURCE c:/world.sql

 

NOT: kolon oluşturulurken alan tipi timestamp ise update edildiğinde otomatik olarak alanın o anki tarihin atılmasını istiyorsan kolon tanımlamasından sonra,
on update curr_timestamp;
yazmalısın. Bu yapının çalışabilmesi için creationtime kolonu updatetime kolonundan önce olmalı.

 

  1. PROGRAMMING WITH MySQL :
  2. SHOW CREATE PROCEDURE / FUNCTION;
  3. SHOW CREATE PROCEDURE / FUNCTION STATUS;
  4. TRIGGER :
    CREATE TRIGGER trigger_name

{ BEFORE | AFTER }

{ INSERT | UPDATE | DELETE }

ON table_name

FOR EACH ROW

triggered_statement
örnek-1:
CREATE City AFTER ON before or after operation.

TRIGGER City_AD DELETE City

FOR EACH ROW

INSERT

INTO DeletedCity (ID, Name)

VALUES (OLD.ID, OLD.Name);

 

DROP TRIGGER [IF EXISTS] <schema>.<tablo>  <trigger_name>;

 

  1. EVENT :
    CREATE EVENT e_store_ts

ON SCHEDULE

EVERY 10 SECOND

DO

INSERT INTO myschema.mytable VALUES (UNIX_TIMESTAMP());

 

Select  * from information_schema.events ; çalışan event’ların durum bilgisini almak için;


DROP EVENT <event_name>;
 event silinebilir.

 

  1. VIEWS:
    CREATE [OR REPLACE] [ALGORITHM = algorithm_type]

[DEFINER = {user_spec | CURRENT_USER}]

[SQL SECURITY {DEFINER | INVOKER}]

VIEW view_name [(column_list)]

AS select_statement

[WITH [CASCADED | LOCAL] CHECK OPTION]

 

Örnek-1:
CREATE VIEW CityView AS SELECT ID, Name FROM City;

 

Eğer view , gerçek tabloyu bire bir karşılıyorsa o view updatable’dır. Yani view üzerinde ekleme,silme ve güncelleme yapılabilir. View’deki tablolara ait kolonlar gerçek tabloda da olacak. Örnek-2 updatable’dır.

 

Örnek-2:

CREATE VIEW EuropePop AS SELECT Name, Population FROM Country

WHERE Continent = ‘Europe’;

NOT-1: Eğer view oluşturulurken SQL SECURITY INVOKER ile create edilirse, view tablolara erişimi kendisini çağıran kullanıcının haklarıyla erişecektir. Invoker yerine DEFINER yazılırsa view tablolara kendisini create edenin haklarıyla çağıracaktır.

 

NOT-2: WITH CHECK OPTION eklenirse view update edilirken set edilen değer view oluşturan sql şartının dışında olmasını engelemiş olur.

 

NOT-3: CHECK TABLE <view_name> ; ile view geçerliğini kontrol edilebilir.

NOT-4: CREATE OR REPLACE VIEW ; view varsa onu değiştirir yoksa yenisini oluşturur.

 

ALGORITHM :

                MERGE ve TEMP TABLE verilebilir.

TEMP TABLE : view ‘i geçici bir tabloda oluşturur.

MERGE: View çağırılırken view’in where şartıyla view’i oluşturan SQL’in where’ini birleştirip tek bir sql çalıştırıyor. Önerilen ALGORITHM’a parametresinin kullanılmaması.

 

 

  1. BACKUP AND RECOVERY :
  2. FULL BACKUP: mysqldump veya işletim sistemi snapshot alınarak yapılabilir.
  3. INCREMENTAL BACKUP: Haftada bir full backup alıp sonraki günlerde değişen dataların backup’ı alınır.
    Örnek :
    create database mars;

 

create table t1(i int(10) not null auto_increment,

j int default 108,

primary key(i)) engine=MyISAM;

 

create table t2(i int(10) not null auto_increment,

j int default 108,

primary key(i)) engine=InnoDB;

 

NOT : — my.ini içinde

[mysqld]

log

log-bin

—- satırları yazılmalı ki binnary log alınsın————-

 

— create table t3 like world.city;

 

insert into mars.t1(j) values (1),(2),(3),(4);

insert into mars.t2(j) values (11),(12),(13),(14);

 

1-      full backup;

shell>mysqldump —flush-logs -uroot -proot mars > c:/temp/mars.2010.sql

 

insert into mars.t1(j) values (121),(233),(323),(324);

update mars set j=99;

 

2-      incremental backup için;

  1. mysql>flush logs;
  2. *bin.00* dosyasını başka bir yere kopyala.

 

3-      backup’tan geri dönüş.

                                                          iii.      full backup’tan dönüş yap:

shell>mysqldump -uroot -proot mars < c:/temp/mars.2010.sql

  1. incremental backup’tan dönüş:

posittion number veya başlangıç bitiş zamanı verilebilir.

  1. dosya içine bakmak için;
    shell>mysqlbinlog c:\opt64\mysql\data\godel1-bin.000014

 

  1. geri dönüş için;
  2. shell>mysqlbinlog c:\opt64\mysql\data\godel1-bin.000014 | mysql -uroot -root

 

  1. istenirse start-posittion,start-time,stop-time verilebilir.
    shell>mysqlbinlog —start-time=”2010-10-10 11:00” c:\opt64\mysql\data\godel1-bin.000014 | mysql -uroot -root

 

godel1-bin.000014 dosyasının isimlendirilmesi;

makinaadi-bin.xxx

xxx = mysql>flush logs;  sonra kendisi otomatikman arttırıyor.

 

  1. INTRODUCTION TO PERFORMANCE TUNING:
  2. EXPLAIN : Select’in neden yavaş çalıştığını anlamak için kullanılır.
    mysql>explain SELECT * FROM Country WHERE Name = ‘France’;
  3. SONUCUN YORUMLANMASI: query’inin maliyeti explain sonuclarının rows değerlerinin çarpımı kadardır.
  4. type : all ise FULL table scan yapmış olur.
  5. rows: erişilen kayıt sayısı

 

  1. PROCEDURE ANALYSE() : tablodaki kayıtlar ile tablo yapısının ne kadar uyuştuğunu gösterir.
    örnek:
    SELECT * FROM CountryLanguage PROCEDURE ANALYSE(10,256)\G;
     
  2. Key_buffer_size  : db’ büyükse bu değer ne kadar büyük olursa o kadar iyi. MyIsam  için geçerli. Değeri belirlemek için *.myi dosylarının boyutları toplamına bakılabilir.
    ini dosyasında ;
    [mysqld]
    key_buffer_size = 64M
  3. Show status like ‘%inno%’ ; ile innodb için geçerli olacak olan parametrelere bakıp, my.ini içine yazılmalı. 

Qcachce_hits/@@Queries oranı 1 ne kadar yakınsa cache o kadar çok kullandığını ve iyi performans aldığını gösterir.