MySQL Hızlı Giriş


Aslında oracle DBA'yim. Fakat çalıştığım kurum için bir sorun izleme "issue Tracking" aracı araştırıken, MySQL firması tarafından yazılan Eventum'u keşfettim. Eventum PHP tabanlı yazılım sorunları izleme aracıdır.



Eventum, doğal olarak MySQL veritabanı kullanıyor. Bu yüzden MySql'e hızlı bir giriş yapmam gerekti. Bu sırada öğrendiklerimi sizinle de paylaşmak istedim.



Öncelikle Apache+PHP+MySql paketini tek seferde zahmetsizce kurabilmek için AppServ yazılımını indirdim ve kurdum. AppServ'i, bu üç pakete ihtiyacı olan herkese tavsiye ediyorum.



Artık MySQL'e gelebiliriz.



MySQL, GPL tabanlı bir veritabanı yönetim sistemidir. MySQL AB firması tarafından üretilmektedir. Bu firma, MySql'in GPL tabanlı (ücretsiz) ve ticari sürümlerini (ücretli) sunmaktadır. GPL bir yazılım üzerinden geliştirdiğimiz herşey de GPL olmaktadır. Bunu istemeyen kurumlar ticari sürümü kullanmayı tercih etmelidirler. Ticari sürümle birlikte destek de almış olurlar.


MySQL windows üzerinde servis olarak kurulmakta. Çalışan uygulamanın ismi mysqld-nt. Dinlediği port 3306. Veritabanı ile çalışabilmek için birkaç araç da gelmekte


  • Mysql: Oracle'in sqlplus benzeri bir araçtır. Veritabanına bağlanıp SQL cümleleri çalıştırabiliriz.
  • mysqldump:mysql DB'in yedeğini almakta kullanılır.
  • mysqlimport: mysql DB'in içine dışarıdaki bir metin dosyadan veri almak için kullanılır.
  • mysqladmin: admin işlemleri yapmak için kullanılır.
  • MySql administrator: Grafik tabanlı kullanım içindir ve ayrıca indiemniz gerekiyor ..


MySql aracının kullanımı ve MySQL'e bağlanmak.




C:\>mysql


mysql: Character set 'latin5' is not a compiled character set and is not specified in the 'C:\mysql\\share\charsets\Index.xml' file




gördüğümüz gibi ilk bağlantı başarısız. MySQL'i kurarken latin5 (ISO 8859P9) karakter seti ile kurdum. Hata mesajında yer alan dizin C:\mysql\\share\charsets\Index.xml' yanlış. Sanırım elle konfigürasyon gekiyor. MySQL, konfigürasyon dosyası my.ini'dir. Burada birkaç bölüm mevcut.


  • [client] : Bu kısımda tüm istemci yazılımların kullanacağı ayarlar var.
  • [mysql]: Bu kısımda sadece mysql aracının kullanacağı ayarlar var.
  • [mysqld]: Sadece mysqld DB sunucu servisinin kullanacağı ayarlar var.


Yapmamız gereken, doğru konfigürasyon Index.xml dosyası için yolu istemci grubunda belirtmek.




[client]


character-sets-dir="C:\AppServ/MySQL/share/charsets/"




(Umarım bölü ve ters bölü işaretlerine dikkat edersiniz..)


Şimdi de servisi tekrar kapatıp açalım (Bilgisayarım > Yönet > Servisler > MySQL)




C:\>mysql


ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)




Yine olmadı. mysql komutu yanına kullanıcı adı, parola ve host (mysql servisinin çalıştığı makine) bilgilerini de vermemiz gerekiyor.


MySQL 2 tip parametre kabul ediyor: Uzun ve kısa parametreler. Uzun parametreler -- ile belirlenirken, kısa parametreler - ile belirtiliyor. Üç önemli parametre var. --host (veya -h), --user (veya -u) ve --password (veya -p)


  • --user=root veya -u root
  • --host=172.16.0.95 veya -h 172.16.0.95
  • --passwordSifre veya -pSifre (Burada Sifre parametreye bitişik yazılmalı/boşluk olmamalı. Eğer Sifre yazılmazsa MySQL soracaktır)




C:\>mysql --user=root --password


Enter password: ******


Welcome to the MySQL monitor. Commands end with ; or \g.


Your MySQL connection id is 2 to server version: 5.0.27-community-nt-log





Type 'help;' or '\h' for help. Type '\c' to clear the buffer.





mysql>




Sanırım bağlanmayı başardık. --host parametresini kullanmadım. Çünkü zaten mysql benim makinede (localhost) kurulu.


Bu arada MySQL içerisinde en yetkili kullanıcı root kullanıcısıdır. (Oracle sys kullanıcısı gibi..)


MySQL içerisinde farklı DB'ler oluşturulabilir. Mesela muhasebe ve personel için farklı veritabanları tutmak istersiniz. MySql'de veritabanı, Oracle'daki şemaya karşılık geliyor. Şimdide mevcut DB'leri görelim.


mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| eventum            |

| mysql              |

| phpmyadmin         |

| test               |

+--------------------+

5 rows in set (0.08 sec)


DB'ler MySQL\data dizini altında klasörler olarak bulunmakta. Her tablo ve index de bu klasörler altında dosya olarak tutulmakta. Dosya uzantıları ve anlamları şöyle:


  • *.frm: Veri sözlüğü (data dictionary) yapıları. Tablo hakkında bilgiler tutarlar.
  • *.MYD: tablo verileri
  • *.MYI: index bilgisi




Bir veritabanı altına geçmek için use komutunu kullanıyoruz.

mysql> use eventum; 

Database changed 

mysql> show tables;

+-----------------------------------+

| Tables_in_eventum                 |

+-----------------------------------+

| eventum_columns_to_display        |

| eventum_custom_field              |

| eventum_custom_field_option       |

| eventum_custom_filter             |

| eventum_customer_account_manager  |

| eventum_customer_note             |

| eventum_email_account             |

| eventum_email_draft               |

...



Veritabanı içindeki tabloları görmek için show tables komutunu kullanırız. İstersek tablo adı önüne DB simini koyarak da DB belirtebiliriz. Böylece use komutunu kullanmadan bir DB altındaki tabloya erişebiliriz.


mysql> select * from EVENTUM.eventum_custom_filter;


status komutu ile birçok veriyi görüntüleyebiliriz..



mysql> status

--------------

mysql  Ver 14.12 Distrib 5.0.27, for Win32 (ia32)



Connection id:          3

Current database:       mysql

Current user:           root@localhost

SSL:                    Not in use

Using delimiter:        ;

Server version:         5.0.27-community-nt-log

Protocol version:       10

Connection:             localhost via TCP/IP

Server characterset:    latin5

Db     characterset:    latin5

Client characterset:    latin5

Conn.  characterset:    latin5

TCP port:               3306

Uptime:                 18 min 57 sec



Threads: 1  Questions: 17  Slow queries: 0  Opens: 16  

Flush tables: 1  Open tables: 10  Queries per second avg: 0.015

--------------




Yedekleme ve Kurtarma


mysqldump ile DB yedeği, sql dosya olarak alınabilir. Bu dosyayı Source komutu ile çalıştırarak geri kurtarma yapabiliriz.

C:\>mysqldump --user=root --password phpmyadmin> phpmyadmin.sql

Enter password: ******




Bu noktada phpmyadmin DB'inin yedeğini phpmyadmin.sql dosyasına almış olduk.

Şimdi de bir felaket oluşturalım..

mysql> drop database phpmyadmin;
Query OK, 7 rows affected (0.01 sec)

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| eventum            |

| mysql              |

| test               |

+--------------------+

4 rows in set (0.00 sec)




Şimdi de kurtarma yapamalım...



mysql> create database phpmyadmin;
mysql> use phpmyadmin;
mysql> source phpmyadmin.sql;


MySQL root parolasını kurtarmak..


Eğer root parolasını unutmuşsak şu şekilde kurtarabiliriz.

  1. MySql servisini durdur
  2. net stop mysql 
  3. mysql-init.txt dosyasını aşağıdaki satırı içerecek şekilde oluştur.
  4. SET PASSWORD FOR 'root'@'localhost' = PASSWORD('YeniParola')
    
  5. komut satırı aç ve şu şekilde mysqld-nt'yi çalıştır.
  6. Başlat > Run > cmd
    C:\> mysqld-nt --init-file=C:\mysql-init.txt
    


Gözlemlerim...


  • MySQL'in veritabanlarını dizin, tabloları dosya olarak tutması oldukça garip geldi. Bu dosyaları notepad ile açıp verileri rahatlıkla görebildim! Oracle'da ise şema ve nesneleri dbf uzantılı dosyalarda tutuluyor. Ve içerisindeki verilerde metin düzenleyici le görülemiyor
  • MySql'de storage engine'ler (MyISAM, innoDB..) var. MyISAm, select ağırlıklı işlemler için oldukça hızlı ve varsayılan olarak geliyor. Fakat Transaction mekanizmalarını içermiyor ! yani bu storage Engine'i kullanan tablolar üzerinde update yaparken işlem kesilirse, rollback (değişikliklerin geri alınması) olmuyor. Transaction mekanizması isteniyorsa, daha yavaş olan innoDB kullanılmalı!

Yorumlar

Bu blogdaki popüler yayınlar

create Virtual Machines in VMware with ansible

Yüksek Hizmet Sürekliliği (High Availability)