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.
- MySql servisini durdur
- mysql-init.txt dosyasını aşağıdaki satırı içerecek şekilde oluştur.
- komut satırı aç ve şu şekilde mysqld-nt'yi çalıştır.
net stop mysql
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('YeniParola')
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
Yorum Gönder