PDA

Orijinalini görmek için tıklayınız : Mysql Dersleri


SaNaL FaNi
19-08-2008, 00:01
MySQL NEDİR?


Bir (ilişkisel) veritabanı yönetim sistemidir.
Tüm verileri tek bir ambara yığmak yerine farklı tablolarda ve veritabanlarında düzenli bir biçimde saklar.
SQL adı verilen, veritabanlarına erişmek için kullanılan en yaygın ve standart dil ile işlemler yapıyor.
Çifte lisanslı bir yazılımdır. Hem Genel Kamu Lisansı'na (GPL) sahip özgür bir yazılım, hem de GPL'in kısıtladığı alanlarda kullanmak isteyenler için ayrı bir lisansa sahiptir.
MySQL AB isimli (eski ismi TCX) bir İsveç firması tarafından geliştiriliyor.
MySQL'in son kararlı sürümü 4.1.7, yeni geliştirilen henüz alfa olan sürümü 5.0.2

SaNaL FaNi
19-08-2008, 00:02
MySQL AB NEDİR?

MySQL AB, MySQL kurucuları ve ana geliştiricileri tarafından oluşturulan ve yürütülen bir ticari firma. 'AB', İsveç dilinde Ltd.Şti., Inc., GmbH gibi kısaltmalara karşılık gelen kelime.
Firmanın ticari gelirinin önemli bir kısmı MySQL'i geliştirmeye harcanıyor.
Tüm MySQL geliştiricileri, MySQL firmasının birer ücretli çalışanı. Birçok ülkede çalışanı olan bir kuruluş.
MySQL yazılımı ilk baştan beri kendi kendini finanse ediyor, firma MySQL üzerine verdiği ticari hizmetlerden para kazanıyor. Bir ticari GPL yazılım geliştirme modeli örneği.

SaNaL FaNi
19-08-2008, 00:02
MySQL'İN GELİŞİMİ


İlk başta mSQL ile tablolarına kendi hızlı yordamları (ISAM) ile bağlanmak için işe girişmişler.
mSQL'in yeterince hızlı ve esnek olmadığı sonucuna varınca, mSQL ile aynı programlama arayüzüne (API) sahip yeni bir SQL arayüzü yazmışlar. mSQL API'sinin seçilmesinin nedeni piyasadaki kodların kolaylıkla kendi veritabanlarına aktarılabilmesi.
"My"SQL isminin nereden geldiği tam olarak bilinmiyor. MySQL'den önce de ekip kendi yazdıkları araçlara "my" takısını ekliyordu. Öte yandan MySQL'in yaratıcısı Michael "Monty" Widenius'un kızının adı da My.
MySQL'in sembolü olan yunusun adı 'Sakila'. İsim, dünya çapında yapılan 'Yunusa isim verin' yarışmasının sonucunda, gelen birçok önerinin arasından yazılımın geliştiricileri tarafından seçildi. Sakila, Afrika'da Swaziland'de konuşulan yerel dilden alınma bir kelime.

SaNaL FaNi
19-08-2008, 00:02
Neden MySQL?


Çok hızlı, güvenilir ve kullanımı kolay.
MySQL'e Python'dan Java'ya kadar birçok programlama dili ile erişilebilir.
Apache ve PHP ile beraber web-veritabanı uygulamalarında çok yaygın olarak kullanılır. Apache-PHP-MySQL üçlüsü için hazırlanmış çok geniş bir yazılım yelpazesi bulunuyor.
Özellikle internet ortamında önem kazanan, çok esnek ve güçlü bir kullanıcı erişim kısıtlama/yetkilendirme sistemine sahip.

SaNaL FaNi
19-08-2008, 00:03
MySQL'in Bazı Özellikleri


Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor.
Birden fazla CPU ile kolaylıkla çalışabiliyor.
60000'in üzerinde tablo, 5 milyarın üzerinde satır ile çalıştığı söylenen MySQL sistemler bulunuyor.
Transaction ve/ya atomik işlem kullanan çeşitli tablo tiplerini destekliyor.
Tabloların kontrolü, optimizasyonu ve tamiri hızlı bir biçimde yapılabiliyor.
Windows için ODBC desteği var, ODBC 2.5 komutları tamamen destekleniyor.
Farklı karakter setlerini (iso8859-9, ...) ve onlara göre sıralama yapılmasını destekliyor, farklı dillerde hata mesajları verebiliyor.
Özellikle internet ortamında önem kazanan, çok esnek ve güçlü bir kullanıcı erişim kısıtlama/yetkilendirme sistemine sahip.

SaNaL FaNi
19-08-2008, 00:03
MySQL'in Eksikleri


Oracle SQL'de kullanılan SELECT ... INTO table ... komutunu desteklemiyor. Ancak Ansi SQL'de hemen hemen aynı işi gören INSERT INTO ... SELECT ... mevcut.
Stored procedure / trigger desteği bulunmuyor.
Kullanıcı kısıtlamak için kullanılan "view" özelliği yok. Ancak MySQL'in gelişmiş bir erişim kısıtlama sistemi olduğu için ihtiyaç duyulmuyor.

SaNaL FaNi
19-08-2008, 00:03
MySQL ve Diğer Veritabanı Sunucuları


MySQL gelişimi sırasında, veritabanı sunucularının yılların birikimi "gelenek"lerinin önemli bir kısmını yok saymıştır. "Olmazsa olmaz" denilen birçok özelliğin, aslında birçok durumda önemli olmadığını ortaya koymuştur.
MySQL çeşitli "pratik" çözümler için geliştirilirken, diğer veritabanı sunucuları akademik düzeyde belirli kurallar ve "veritabanı bilimi" ışığında geliştirilirler.
Veritabanı uygulamalarının %80'inin, SQL özelliklerinin sadece %20'lik bir kısmına gerek duyduğu ilkesi çerçevesinde geliştirilir.
MySQL size farklı tablo tipleri ve işleme türleri ile esneklik sağlar.
Eğer teknik olarak 'basit' bir projeniz varsa, MySQL sizin için biçilmiş kaftan olabilir.
Eğer teknik olarak 'karmaşık' bir projeniz varsa, geleneksel veritabanı sunucularında yer alan gelişmiş özelliklere ihtiyaç duyabilirsiniz.

SaNaL FaNi
19-08-2008, 00:03
Atomik İşlem / Transaction


MySQL her iki tür işlemi de desteklediği için kullanıcı, uygulamasında atomik işlemlerin hızına mı transaction özelliklerine mi ihtiyacı olduğuna karar verebilir. Seçimler tablo bazında yapılabilir.
Transaction'lı tablo ile atomik işlemle çalışan tablo arasındaki en büyük fark performans konusunda oluşur. Transactionlı tablolar çalışırken daha fazla bellek, daha fazla disk alanı ve daha fazla işlemci gücü harcar.
Eğer uygulamalarınız kritik durumlarda COMMIT yapmaya değil de, ROLLBACK yapmaya göre yazıldıysa transaction kullanmak daha elverişli olabilir.
Çoğunlukla kritik transactionla çalışan güncellemeler, atomik olarak çalışacak şekilde tekrar yazılabilir. Transactionların çözdüğü tüm bütünlük problemleri LOCK TABLES, INSERT DELAYED ve benzeri yöntemlerle çözülebilir.

SaNaL FaNi
19-08-2008, 00:04
MySQL Tablo Tipleri

MySQL, iki farklı tür tablo yapısını destekler :
Transaction Tabloları :
- InnoDB
- Berkeley DB
Atomik İşlem Tabloları :
- MyISAM
- HEAP
- MERGE
- ISAMTablo tipleri, her tablo için farklı seçilebilir. Bir veritabanında iki ya da daha fazla tablo tipini bir arada kullanabilirsiniz.

SaNaL FaNi
19-08-2008, 00:04
MySQL Tablo Tipleri

InnoDB
%100 ACID uyumlu, commit, rollback ve göçmeden kurtarma özelliklerine sahip bir tablo yapısını size sağlar.
Satır seviyesinde kilitleme kullanır, Oracle-stili kilitleme olmaksızın SELECT işlemleri yapılmasını destekler.
Yabancı anahtar kısıtlamalarına uyar.
Veri ve indeksleri ana bellekte cache'lemek için kendi tampon havuzu vardır.
Tabloları ve indeksleri tablo alanı olarak tanımladığı sanal ciltte tutar.
Bir tablo alanı birçok dosya ya da disk bölümünden oluşabilir.
InnoDB, MySQL'in standart transaction destekli tablo tipidir.

SaNaL FaNi
19-08-2008, 00:04
MySQL Tablo Tipleri


MyISAM : MyISAM, MySQL'in "klasik" tablo tipidir. Çok hızlı, az kaynak harcayan ve verimli çalışmak için tasarlanmıştır.
MERGE : Birden fazla eş MyISAM tablosunun tek bir tablo gibi kullanılması için kullanılır. Özellikle çok büyük tabloların daha hızlı tarama yapılabilmesi için küçük eş tablolara bölunmesi durumunda işe yararlar.
HEAP : Hashlenmiş indeksler kullanırlar ve tüm veriler bellekte tutulur. Bu nedenle çok hızlı çalışırlar ama MySQL kapandığında tüm verileri kaybedersiniz. Geçici tablolar için çok yararlıdırlar.

SaNaL FaNi
19-08-2008, 00:05
Auto_increment


Auto_increment özelliği, yeni satırlar için biricik bir değer oluşturmak için kullanılabilir.
Yeni satır girilirken auto_increment kolonuna herhangi bir değer girilmediği takdirde, kolonda bulunan en yüksek değerin bir fazlası otomatik olarak atanacaktır.
last_insert_id() SQL fonksiyonu ile, son girilen satıra otomatik olarak atanan değerin ne olduğu alınabilir.
Bir tabloda sadece bir kolon auto_increment özelliğine sahip olabilir.

SaNaL FaNi
19-08-2008, 00:05
Indeksler


İndeksler, belirli bir değeri olan satırları daha hızlı bulmak için kullanılırlar.
İndeks olmazsa, MySQL birinci kayıttan başlayarak, ilgili kayıtları bulana kadar tablonun sonuna kadar gitmek zorunda kalır. Indeksler sayesinde rasgele tarama yapılabilir.
İstenirse, kolonun tamamı değil sadece belirli bir kısmı da indekslenebilir.
Text/Blob tipi alanların tamamı değil sadece bir kısmı indekslenebilir.
Text/Blob alanların tamamını indekslemek için fulltext isimli özel bir indeks tipi kullanılabilir.
Bir tabloda en fazla 32 kolonda indeks oluşturulabilir.
Bir indeks birden fazla kolonu kapsayacak şekilde de yapılabilir. Bir indeks en fazla 15 kolonu kapsayabilir. Çoklu indeks, içerdiği kolonları kapsayan AND işlemleri sırasında kullanılır.
MySQL'in indeksi kullanması tablonun %30'undan fazlasına erişmesini gerektirecekse, o zaman MySQL var olmasına karşın indeksi kullanmamayı tercih edecektir. Çünkü böyle bir sorguda, sıralı arama yapmak büyük olasılıkla rasgele aramadan daha hızlı olacaktır.

SaNaL FaNi
19-08-2008, 00:06
Indekslerin Kullanıldığı Sorgular


WHERE ifadesine uyan satırları hızlıca bulmak
Belirli bir kolonun MAX() ve MIN() değerlerini bulmak
Sıralama ve gruplama işlemleri
Join işlemleri için diğer tablolardan satırları almak
Wildcard ile başlamayan LIKE ifadelerinde

SaNaL FaNi
19-08-2008, 00:06
Tüm Metinde Arama (Full-text Search)


Tabloda indeks olarak ayarlandığı kolon(lar)da doğal dil araması yapar. Tıpkı bir arama motoru gibi ilgili metinleri kelimelere ayırarak indeks oluşturur. Arama yapılan metinler ne kadar büyük olursa, o kadar verimli çalışır.
Tüm metinde arama özelliği sadece MyISAM tablo tipinde kullanılabilir. Standart bir indeks gibi, tablo yaratılırken ya da daha sonra oluşturulabilir.
FULLTEXT indeksleri; CHAR, VARCHAR ya da TEXT/BLOB veri tipleri için kullanılabilir.
Tüm metinde arama MATCH() fonksiyonu ile gerçekleştirilir.
FULLTEXT indeks, alanın tamamına uygulanmak zorundadır. Sadece belirli bir kısmına yapılamaz.

SaNaL FaNi
19-08-2008, 00:06
Sorgu Cache'i (Query Cache)


MySQL, bir kullanıcı tarafından yapılan bir SELECT sorgusunun metnini ve sorgunun sonucunu cache'ler. Aynı sorgu tekrar yapıldığında ise veritabanında tarama yapmak yerine cache'deki veriyi kullanıcıya gönderir.
Cache, bayat veri göndermez. Bir tablo güncellendiğinde, o tabloda yapılmış olan tüm sorgular cache'ten silinir.
Verilerin çok fazla okunduğu ancak nadiren güncellendiği uygulamalarda büyük kazanç sağlar.

SaNaL FaNi
19-08-2008, 00:06
Replikasyon


Tek yönlü replikasyon, hem sistemin sağlamlığını hem de hızını arttırmak için kullanılabilir.
Sağlamlık için, iki sisteminiz olabilir ve ana sunucuda problem çıktığında yedek olana geçebilirsiniz.
Hız için ise, güncelleme içermeyen sorguları yedek sunucuya yönlendirebilirsiniz.
Veritaban(lar)ının birkaç farklı fiziksel mekanda bulunması gerekiyorsa, replikasyon ile verilerin sürekli güncel olması sağlanabilir.
Replikasyon sırasında dikkat edilmesi gereken en önemli nokta, tüm güncelleme işlemlerinin ana sunucuda yapılmasıdır. Aksi takdirde dikkatli olunmadığında veri kaybına yol açılabilir

SaNaL FaNi
19-08-2008, 00:07
MySQL KURULUMU

Kaynak kodlarından Türkçe sıraya dizme desteği ile derlemek için,


tar -zxf /root/mysql-4.0.22.tar.gz
cd mysql-4.0.22
./configure --prefix=/usr/local/mysql --with-charset=latin5
make
make install
cp /usr/local/mysql/share/mysql/mysql.server /usr/local/mysql/bin
/usr/local/mysql/bin/mysql_install_db
groupadd mysql
useradd -g mysql mysql
chown -R root /usr/local/mysql
chown -R mysql /usr/local/mysql/var
chgrp -R mysql /usr/local/mysql
/usr/local/mysql/bin/mysql.server start
cd ..
rm -rf mysql-4.0.22

SaNaL FaNi
19-08-2008, 00:07
phpMyAdmin
http://www.phpmyadmin.net


http://seminer.linux.org.tr/seminer-notlari/mysql/phpmyadmin.jpg

phpMyAdmin, özellikle MySQL'in web-veritabanı çözümlerde kullanımında her geçen gün defacto standart haline gelen yönetim arayüzüdür.
Web üzerinden çalıştığı için bir ek istemci programa ihtiyaç duymaksızın, herhangi bir bilgisayardan uzaktaki MySQL sunucuyu yönetilebilir.
"Root" olarak tüm bir MySQL sunucusunu yönetebileceğiniz gibi sadece belirli bir veritabanını da yönetebilirsiniz. phpMyAdmin hangi kullanıcı ismi ile veritabanına bağlanırsa, onun haklarına sahip olur.
Birden fazla MySQL sunucusunu da, her birinin kendi ayarlarıyla tek bir phpMyAdmin ile yönetebilirsiniz.
Türkçe de dahil olmak üzere 45+ dilde kullanılabilir.
Her türlü kayıt ekleme, silme, değiştirme; veritabanı/tablo yaratma; kullanıcı açma/yetkilendirme; kısacası aklınıza gelen her şeyi phpMyAdmin ile SQL komutlarına ihtiyaç duymaksızın yapabilirsiniz.
Veritabanının içeriğini SQL komutlarından oluşan bir dosyaya boşaltabilir, daha sonra o dosyadan veritabanını istediğiniz başka herhangi bir sunucuda oluşturabilirsiniz.
Bu hazır tanımlanmış işlemlerin dışında her tür SQL komutunu kendiniz yazarak çalıştırabilir, phpMyAdmin'i tam bir SQL istemcisi gibi kullanabilirsiniz.

SaNaL FaNi
19-08-2008, 00:08
MySQL Query Browser
http://www.mysql.com/products/querybrowser/

http://seminer.linux.org.tr/seminer-notlari/mysql/querybrowser.png

SQL sorgularınızı kolayca oluşturmak, uygulamak ve analiz etmek için bir görsel araç.
SQL sorgularınızı görsel araçların yanı sıra elle kodlayarak da oluşturabilirsiniz.
Sorgu tarihçesi sayesinde daha önce yaptığınız sorgulara kolaylıkla ulaşabilirsiniz.
Birden fazla sorgu sonucuna farklı sekmelerden (tab) ulaşabilir ve onları karşılaştırabilirsiniz.
Sorgu sonuçlarını bir hesap tablosunun hücreleri gibi düzenleyebilirsiniz.
Veritabanlarınızda yer alan tabloları oluşturabilir, değiştirebilir ve silebilirsiniz.
Seçilen nesneler, parametreler ve fonksiyonlar için ayrıntılı yardım bölümleri bulunuyor.
Hem Linux hem Windows sürümleri bulunuyor.

SaNaL FaNi
19-08-2008, 00:09
MySQL Administrator
http://www.mysql.com/products/administrator/

http://seminer.linux.org.tr/seminer-notlari/mysql/administrator.png

MySQL veritabanı sunucusunun yönetimi ve bakımı için bir grafik arayüz.
Komut satırından yapabileceğiniz tüm işlemleri görsel bir ortamda sunar.
Kullanıcı yönetimi
MySQL sunucusunun dinamik olarak sağlık :-) durumunun izlenebilmesi
Yedekleme ve yedeklerden geri yükleme
Sunucu kayıtlarının (log) incelenmesi
Sunucunun optimizasyonu
Sunucuda yer alan tüm veritabanı ve tabloların incelenmesi ve optimize edilebilmesi
Hem Linux hem Windows sürümleri bulunuyor.

SaNaL FaNi
19-08-2008, 00:09
Diğer Grafik Arayüzler


MySQLYog -- http://www.webyog.com/
MySQLFront -- http://www.mysqlfront.de
QtMyAdmin
http://mion.elka.pw.edu.pl/~mjankows/qtmyadmin/
Mascon -- http://www.scibit.com
DBManager -- http://www.dbtools.com.br/EN/

SaNaL FaNi
19-08-2008, 00:09
MySQL'DE KULLANICILAR ve YETKİLENDİRME


MySQL'de tüm kullanıcılar ve yetkileri, "mysql" isimli bir veritabanında tutulur.
Bir kullanıcı iki parçadan oluşur : kullanici_ismi@bilgisayar_ismi (hostname). Bu ikiliyi MySQL tek bir kullanıcı olarak algılar. Yani ahmet@localhost ile ahmet@penguen aynı kullanıcılar değildir (localhost ve penguen aynı makinalar olsa dahi).
Bir kullanıcının 4 yetki seviyesi vardır. Her yetki seviyesi için mysql isimli veritabanında birer tablo bulunur.
Hiyerarşik olarak bu tablolar en genelden özele doğru tanımlama yapar.
User tablosu : Bağlanan kullanıcının sunucuya bağlanma hakkı olup olmadığını kontrol eder. Eğer erişim hakkı varsa, kullanıcı tabloda kendisi için belirtilen yetkilere sahip olur.
Db tablosu : Hangi kullanıcıların hangi veritabanlarına hangi bilgisayarlardan ulaşabileceğini belirler. Eğer kullanıcının ilgili veritabanına erişim hakkı varsa, tabloda kendisi için belirtilen yetkilere sahip olur.
Tables_priv tablosu : Aynı db tablosu gibi çalışır, ancak veritabanları yerine içindeki tablolara erişimi düzenler.
Columns_priv tablosu : Aynı db ve tables_priv tabloları gibi çalışır, ancak veritabanlarının içindeki tabloların içindeki kolonlara erişimi düzenler.

SaNaL FaNi
19-08-2008, 00:09
MySQL'DE KULLANICILAR ve YETKİLENDİRME

mysql veritabanı
|
|
user
|
|
db
|
|
tables_priv
|
|
columns_priv




Yetki tabloları ve mysql isimli veritabanı, normal MySQL veritabanları gibi çalışır. INSERT, UPDATE, DELETE gibi standart sql komutları ile tıpkı herhangi bir veritabanı üzerinde işlem yapıyor gibi kullanıcı tanımları yapabilirsiniz.

SaNaL FaNi
19-08-2008, 00:10
MySQL'DE KULLANICILAR ve YETKİLENDİRME

Kullanıcılara Verilebilen Yetkiler


Select_priv : Kayıtları okuma
Insert_priv : Kayıt ekleme
Update_priv : Kayıt değiştirme/güncelleme
Delete_priv : Kayıt silme
Create_priv : Veritabanı/tablo yaratma
Drop_priv : Veritabanı/tablo kaldırma
Reload_priv : MySQL'i yeniden başlatma
Shutdown_priv : MySQL'i kapatma
Process_priv : MySQL'de çalışan işlemleri takip etme
File_priv : Sunucudan dosya okuyup / yazma
Grant_priv : Başka kullanıcılara yetki verme
Index_priv : Indeks yaratma, değiştirme, silme
Alter_priv : Tablo ya da veritabanının yapısını değiştirme
Show_db_priv : Veritabanı listeleme
Lock_tables_priv : Tablo kitleme
Max_questions : Bir saat içinde yapılabilecek enfazla sorgu sayısı
Max_updates : Bir saat içinde yapılabilecek en fazla güncelleme sorgusu sayısı
Max_connections : Bir saat içinde yapılabilecek en fazla bağlantı sayısıMySQL'in kullanıcı tablolarında herhangi bir değişiklik yaptığınız zaman, değişikliklerin aktif hale gelebilmesi için FLUSH PRIVILEGES komutunu MySQL sunucusuna göndermeniz gerekir.

SaNaL FaNi
19-08-2008, 00:10
MySQL için Güvenlik Önerileri


Root kullanıcısına bir şifre tanımladığınıza emin olun, MySQL standart kurulumunda size root kullanıcısına bir şifre vermenizi söyler ama buna sizi zorlamaz.
MySQL sunucusunu root olarak çalıştırmayın.
Eğer MySQL'le sadece kendi çalıştığı sunucudan bir program bağlantı kuracaksa (çoğu web-veritabanı uygulamasında olduğu gibi), TCP/IP servisini kapatın (--skip-networking). Aynı bilgisayardaki web sunucu MySQL'e bağlanmak için zaten çok daha hızlı olan unix soketlerini kullanacaktır.
MySQL'in sembolik linklenmiş tabloları kullanmasına izin vermeyin (--skip-symlink seçeneği).
Tek bir kullanıcının kurabileceği en fazla bağlantı sayısını mysqld'nin max_user_connections seçeneği ile ayarlayabilirsiniz. Böylece bir kullanıcı herhangi bir nedenle çok fazla bağlantı açtığında (programındaki bir hata veya saldırı amacıyla), MySQL zor durumda kalmayacaktır.
"process" yetkisini kullanıcılara vermeyin. Kendi halinde bir kullanıcının veritabanının o anda yaptığı sorguların neler olduğuna öğrenmeye ihtiyacı olmaması gerekir.
"file" yetkisini kullanıcılara vermeyin. Aksi takdirde MySQL kullanıcısının hakları ile sunucunuzdaki diledikleri yere yazabilir ve okuyabilirler.
MySQL sunucunuzun kullandığı DNS'in yanıltılması olasılığına karşı; erişim kısıtlamaları tanımlarken, bilgisayar ismi yerine IP numarası kullanabilirsiniz. O zaman MySQL'i --skip-name-resolve seçeneği ile çalıştırarak sadece IP numaraları ile çalışmasını ve hiç DNS kullanmamasını sağlayabilirsiniz.
Veritabanı dosyalarının bulunduğu dizine (orn. /usr/local/mysql/var) sadece mysql kullanıcısının okuma/yazma hakkı olduğundan emin olun.
MySQL'i sakın --skip-grant-tables seçeneği ile çalıştırmayın. Bu, MySQL'in yetkilendirme sistemini iptal ederek çalışmasına ve tüm kullanıcıların veritabanlarına tam erişime sahip olmasına yol açar.

SaNaL FaNi
19-08-2008, 00:10
MySQL Sunucu için Performans İpuçları


MySQL'in hangi opsiyonlar ile çalışmakta olduğu SHOW VARIABLES komutu ile görülebilir.
MySQL'in optimizasyon ayarları my.cnf dosyasından yapılıyor. Örnek ayar dosyaları mevcut.
my-huge.cnf -- bellek = 1-2 GB
my-large.cnf -- bellek = 512 MB
my-medium.cnf -- bellek = 128 MB
my-small.cnf -- bellek < 64 MB
Unix soketleri yerine TCP/IP üzerinden bağlanılırsa %7.5 daha yavaş çalışır
İstemci ile sunucunun farklı bilgisayarlarda olması durumunda, 100 mbit ethernet bağlantılarında bile %8-11 daha yavaş bağlanılır
MySQL, kurulum sırasında statik yerine dinamik derlenmiş ise %13 daha yavaş çalışır
Diske verilerin SSL ile şifrelenmiş olarak yazılması %55 performans kaybına yol açar
Ayrıntılı bilgi : http://dev.mysql.com/doc/en/Optimising_the_Server.html

SaNaL FaNi
19-08-2008, 00:10
MySQL Log Dosyaları


Error Log : MySQL sunucusu başlatılırken, durdurulurken ya da çalışırken oluşan hata kayıtları (makinaismi.err)
Query Log : Sunucuya yapılan tüm bağlantıların ve uygulanan sorguların kayıtları (makinaismi.log)
Binary Log : Veritabanında tutulan bilgilerde değişiklik yapan tüm sorguların kayıtları -- replikasyon için de kullanılır (makinaismi-bin*)
Slow Log : Belirli bir süreden daha uzun süren ve/ya indeks kullanmayan sorguların kayıtları (makinaismi-slow.log)
Ayrıntılı bilgi :
http://dev.mysql.com/doc/en/Log_Files.html

SaNaL FaNi
19-08-2008, 00:11
MySQL'in Yedeklenmesi


Sunucu seviyesinde yedekleme
Veri dizininin (ör: /usr/local/mysql/var) topluca yedeklenmesi. Bu dizin MySQL veritabanları, kullanıcıları ve log dosyalarını içerir.
- mysqlhotcopy
SQL seviyesinde yedekleme
Veritabanlarının SQL komutlarından oluşan bir metin dosyası olarak yedeğinin alınması (sqldump)
- mysqldump
- mysqlimport
BACKUP TABLE / RESTORE TABLE
Ayrıntılı bilgi :
http://www.mysql.com/doc/en/Backup.html

SaNaL FaNi
19-08-2008, 00:11
Programlama Arayüzleri (API)

Resmi API'ler

C API'si MySQL kaynak kodu ile beraber geliyor.
Connector/ODBC - ODBC sürücüleri
Connector/J - Java'dan bağlanmak için
Connector/Net - .NET'ten bağlanmak içinDiğer API'ler

PHP API'si PHP programlama dili ile beraber geliyor.
http://www.php.net
Perl için DBI/DBD modülleri
http://search.cpan.org/dist/DBI/
Python için MySQL-Python
http://sourceforge.net/projects/mysql-python/
Ruby için MySQL-Ruby
http://www.tmtm.org/en/mysql/ruby/
Tcl için Tcl-SQL
http://sourceforge.net/projects/tcl-sql/
C++ için MySQL++ (C API'sine wrapper)
http://tangentsoft.net/mysql++/

SaNaL FaNi
19-08-2008, 00:11
MySQL Programlama
için Performans İpuçları


Sorguda LIKE '%string%' gibi bir ifade kullanıldığında, eğer string 3 karakterden daha uzun ise, MySQL özel bir algoritma kullanarak daha hızlı arama yapar.
Tablolar üzerinde yaptığınız sorguların, yaptığınız indeksleri kullandığına emin olun. EXPLAIN komutuyla yaptığınız herhangi bir SELECT sorgusu ile ilgili ayrıntılı bilgi alabilirsiniz.
Sık güncellenen MyISAM tablolarında tablo kitleme problemlerinden kaçınmak için karmaşık SELECT sorguları kullanmamaya özen gösterin.
Çok güncelleme yapılan tablolarda, VARCHAR ve BLOB/TEXT dinamik boylu veri tipleri kullanılmazsa performans artışı sağlanır.
Bir tablodaki satırların sıralamasını ALTER TABLE komutuyla değiştirebilirsiniz. Eğer bir tablodan sürekli belirli bir sıraya göre veri alıyorsanız, özellikle büyük güncellemelerden sonra tablodaki satırları uygun biçimde sıralamak performansı arttıracaktır.
Alanların öntanımlı değerleri olmasının avantajını kullanın. Gireceğiniz veri öntanımlı değerle aynı ise, özel olarak belirtmenize gerek yoktur. Böylece MySQL daha az veri ayrıştıracak (parse) ve veriyi daha hızlı veritabanına girecektir.
Web üzerinden yazılım geliştirirken, resimleri veritabanında tutmak yerine resim dosyası olarak dosya sisteminde tutup, veritabanına sadece resmin nerede olduğunun bilgisini yerleştirmeyi tercih edin. Bir web sunucusu dosya cache'leme konusunda, veritabanı bilgisi cache'lemekten daha başarılıdır. MySQL'in resim üzerinde arama yapma ve benzeri özellikleri olmadığından, pratikte resmi veritabanında saklamanızın da bir anlamı yoktur.

SaNaL FaNi
19-08-2008, 00:12
MySQL 4.1'in Yenilikleri


İçiçe sorgular
Daha hızlı bir istemci/sunucu protokolü
Bir çağrıda çok sayıda sorgu gönderebilme ve çok sayıda sonuç alabilme
Her bağlantı için istemcinin zaman dilimini belirtebilmesi
UTF-8 ve UCS-2 desteği
Tablo ve kolon isimleri de artık UTF8 olarak saklanıyor
Veritabanı, tablo, kolon bazlı dil seçimi
Coğrafi verilen saklanması için OpenGIS uzaysal veri tipleri
HEAP tabloları için BTREE indeksleme
Replikasyonun SSL tünellenebilmesi
INSERT ... ON DUPLICATE KEY UPDATE ... söz dizimi sayesinde birincil (primary) ya da biricik (unique) bir alanda aynı veriye sahip başka kayıt varsa, yeni bir kayıt ekle(yeme)mek yerine mevcut verinin güncellenmesi
GROUP_CONCAT() fonksiyonuyla gruplanan satırlar üzerinde daha fazla esneklik
Sunucu bazlı HELP komutu. SQL sorgusu olarak gönderildiğinden herhangi bir istemciden erişilebilir.
CREATE TABLE tbl_name2 LIKE tbl_name1 söz dizimi ile yapısal olarak aynı ikinci bir tablo yaratabilme
MyISAM tabloları için birçok ince ayar yapılabilen yeni anahtar cache'i.
SHOW WARNINGS ve SHOW ERRORS ifadeleri
... (ve niceleri)
4.0 sürümünden 4.1'e geçiş sırasında dikkat edilmesi gerekenler
http://dev.mysql.com/doc/mysql/en/Upgrading-from-4.0.html

SaNaL FaNi
19-08-2008, 00:12
SQL KAYNAKLARI


Introduction to SQL
http://rootus.org/docs/Programming/SQL-Tutor/
Database Normalization
http://www.devshed.com/Server_Side/MySQL/NormalVeri Modelleme
DIA
http://www.lysator.liu.se/~alla/dia/dia.html
TediaSql
http://tedia2sql.tigris.org
Data Architect
http://www.thekompany.com/products/dataarchitect/
DeZign
http://www.datanamic.com