42
TÜRKİYE LINUX KULLANICILARI DERNEĞİ MySQL VERİTABANI SUNUCUSU SEMİNERİ Doruk Fişek [email protected] http://seminer.linux.org.tr

MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

  • Upload
    others

  • View
    23

  • Download
    0

Embed Size (px)

Citation preview

Page 1: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

TÜRKİYE LINUX KULLANICILARI DERNEĞİ

MySQL VERİTABANI SUNUCUSU SEMİNERİ

Doruk Fişek

[email protected]

http://seminer.linux.org.tr

Page 2: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

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çimdesaklar.

SQL adı verilen, veritabanlarına erişmek içinkullanılan en yaygın ve standart dil ile işlemleryapıyor.

Çifte lisanslı bir yazılımdır. Hem Genel KamuLisansı'na (GPL) sahip özgür bir yazılım, hem deGPL'in kısıtladığı alanlarda kullanmak isteyenler içinayrı 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ştirilenhenüz alfa olan sürümü 5.0.2

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 3: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

MySQL AB NEDİR?MySQL AB, MySQL kurucuları ve ana geliştiricileritarafından oluşturulan ve yürütülen bir ticari firma.'AB', İsveç dilinde Ltd.Şti., Inc., GmbH gibi kısaltmalarakarşılık gelen kelime.

Firmanın ticari gelirinin önemli bir kısmı MySQL'igeliş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 finanseediyor, firma MySQL üzerine verdiği ticarihizmetlerden para kazanıyor. Bir ticari GPL yazılımgeliştirme modeli örneği.

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 4: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

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ığı sonucunavarınca, mSQL ile aynı programlama arayüzüne (API)sahip yeni bir SQL arayüzü yazmışlar. mSQL API'sininseçilmesinin nedeni piyasadaki kodların kolaylıklakendi veritabanlarına aktarılabilmesi.

"My"SQL isminin nereden geldiği tam olarakbilinmiyor. MySQL'den önce de ekip kendi yazdıklarıaraçlara "my" takısını ekliyordu. Öte yandan MySQL'inyaratıcısı Michael "Monty" Widenius'un kızının adı daMy.

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 önerininarasından yazılımın geliştiricileri tarafından seçildi.Sakila, Afrika'da Swaziland'de konuşulan yerel dildenalınma bir kelime.

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 5: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

Neden MySQL?Çok hızlı, güvenilir ve kullanımı kolay.

MySQL'e Python'dan Java'ya kadar birçokprogramlama 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ş biryazılım yelpazesi bulunuyor.

Özellikle internet ortamında önem kazanan, çokesnek ve güçlü bir kullanıcı erişimkısıtlama/yetkilendirme sistemine sahip.

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 6: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

MySQL'in Bazı ÖzellikleriUnix 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 tablotiplerini destekliyor.

Tabloların kontrolü, optimizasyonu ve tamiri hızlı birbiçimde yapılabiliyor.

Windows için ODBC desteği var, ODBC 2.5 komutlarıtamamen destekleniyor.

Farklı karakter setlerini (iso8859-9, ...) ve onlara göresıralama yapılmasını destekliyor, farklı dillerde hatamesajları verebiliyor.

Özellikle internet ortamında önem kazanan, çokesnek ve güçlü bir kullanıcı erişimkısıtlama/yetkilendirme sistemine sahip.

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 7: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

MySQL'in EksikleriOracle SQL'de kullanılan SELECT ... INTO table ...komutunu desteklemiyor. Ancak Ansi SQL'de hemenhemen 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 sistemiolduğu için ihtiyaç duyulmuyor.

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 8: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

MySQL ve Diğer Veritabanı SunucularıMySQL gelişimi sırasında, veritabanı sunucularınınyılların birikimi "gelenek"lerinin önemli bir kısmını yoksaymıştır. "Olmazsa olmaz" denilen birçok özelliğin,aslında birçok durumda önemli olmadığını ortayakoymuştur.

MySQL çeşitli "pratik" çözümler için geliştirilirken,diğer veritabanı sunucuları akademik düzeyde belirlikurallar ve "veritabanı bilimi" ışığında geliştirilirler.

Veritabanı uygulamalarının %80'inin, SQLözelliklerinin sadece %20'lik bir kısmına gerekduyduğu ilkesi çerçevesinde geliştirilir.

MySQL size farklı tablo tipleri ve işleme türleri ileesneklik sağlar.

Eğer teknik olarak 'basit' bir projeniz varsa, MySQLsizin 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.

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 9: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

Atomik İşlem / TransactionMySQL 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 kararverebilir. Seçimler tablo bazında yapılabilir.

Transaction'lı tablo ile atomik işlemle çalışan tabloarasındaki en büyük fark performans konusundaoluşur. Transactionlı tablolar çalışırken daha fazlabellek, daha fazla disk alanı ve daha fazla işlemcigücü harcar.

Eğer uygulamalarınız kritik durumlarda COMMITyapmaya değil de, ROLLBACK yapmaya göreyazıldıysa transaction kullanmak daha elverişliolabilir.

Ç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 problemleriLOCK TABLES, INSERT DELAYED ve benzeriyöntemlerle çözülebilir.

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 10: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

MySQL Tablo TipleriMySQL, iki farklı tür tablo yapısını destekler :

Transaction Tabloları :- InnoDB- Berkeley DB

Atomik İşlem Tabloları :- MyISAM- HEAP- MERGE- ISAM

Tablo tipleri, her tablo için farklı seçilebilir. Bir veritabanında iki ya da daha fazlatablo tipini bir arada kullanabilirsiniz.

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 11: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

MySQL Tablo TipleriInnoDB

%100 ACID uyumlu, commit, rollback ve göçmedenkurtarma özelliklerine sahip bir tablo yapısını sizesağlar.

Satır seviyesinde kilitleme kullanır, Oracle-stilikilit leme 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 kenditampon 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ündenoluşabilir.

InnoDB, MySQL'in standart transaction destekli tablotipidir.

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 12: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

MySQL Tablo TipleriMyISAM : MyISAM, MySQL'in "klasik" tablo tipidir.Çok hızlı, az kaynak harcayan ve verimli çalışmak içintasarlanmıştır.

MERGE : Birden fazla eş MyISAM tablosunun tek birtablo gibi kullanılması için kullanılır. Özellikle çokbüyük tabloların daha hızlı tarama yapılabilmesi içinküçük eş tablolara bölunmesi durumunda işe yararlar.

HEAP : Hashlenmiş indeksler kullanırlar ve tüm verilerbellekte tutulur. Bu nedenle çok hızlı çalışırlar amaMySQL kapandığında tüm verileri kaybedersiniz.Geçici tablolar için çok yararlıdırlar.

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 13: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

Auto_incrementAuto_increment özelliği, yeni satırlar için biricik birdeğer oluşturmak için kullanılabilir.

Yeni satır girilirken auto_increment kolonunaherhangi bir değer girilmediği takdirde, kolondabulunan en yüksek değerin bir fazlası otomatik olarakatanacaktır.

last_insert_id() SQL fonksiyonu ile, son girilen satıraotomatik olarak atanan değerin ne olduğu alınabilir.

Bir tabloda sadece bir kolon auto_incrementözelliğine sahip olabilir.

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 14: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

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 kadargitmek zorunda kalır. Indeksler sayesinde rasgeletarama 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 fulltextisimli özel bir indeks tipi kullanılabilir.

Bir tabloda en fazla 32 kolonda indeks oluşturulabilir.

Bir indeks birden fazla kolonu kapsayacak şekilde deyapılabilir. Bir indeks en fazla 15 kolonu kapsayabilir.Çoklu indeks, içerdiği kolonları kapsayan ANDişlemleri sırasında kullanılır.

MySQL'in indeksi kullanması tablonun %30'undanfazlasına erişmesini gerektirecekse, o zaman MySQLvar olmasına karşın indeksi kullanmamayı tercihedecektir. Çünkü böyle bir sorguda, sıralı aramayapmak büyük olasılıkla rasgele aramadan daha hızlıolacaktır.

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 15: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

Indekslerin Kullanıldığı SorgularWHERE 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

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 16: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

Tüm Metinde Arama (Full-text Search)Tabloda indeks olarak ayarlandığı kolon(lar)da doğaldil araması yapar. Tıpkı bir arama motoru gibi ilgilimetinleri kelimelere ayırarak indeks oluşturur. Aramayapılan metinler ne kadar büyük olursa, o kadarverimli çalışır.

Tüm metinde arama özelliği sadece MyISAM tablotipinde kullanılabilir. Standart bir indeks gibi, tabloyaratılırken ya da daha sonra oluşturulabilir.

FULLTEXT indeksleri; CHAR, VARCHAR ya daTEXT/BLOB veri tipleri için kullanılabilir.

Tüm metinde arama MATCH() fonksiyonu ilegerçekleştirilir.

FULLTEXT indeks, alanın tamamına uygulanmakzorundadır. Sadece belirli bir kısmına yapılamaz.

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 17: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

Sorgu Cache'i (Query Cache)MySQL, bir kullanıcı tarafından yapılan bir SELECTsorgusunun metnini ve sorgunun sonucunu cache'ler.Aynı sorgu tekrar yapıldığında ise veritabanındatarama yapmak yerine cache'deki veriyi kullanıcıyagönderir.

Cache, bayat veri göndermez. Bir tablogüncellendiğinde, o tabloda yapılmış olan tümsorgular cache'ten silinir.

Verilerin çok fazla okunduğu ancak nadirengüncellendiği uygulamalarda büyük kazanç sağlar.

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 18: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

ReplikasyonTek yönlü replikasyon, hem sistemin sağlamlığını hemde hızını arttırmak için kullanılabilir.

Sağlamlık için, iki sisteminiz olabilir ve ana sunucudaproblem çıktığında yedek olana geçebilirsiniz.

Hız için ise, güncelleme içermeyen sorguları yedeksunucuya yönlendirebilirsiniz.

Veritaban(lar)ının birkaç farklı fiziksel mekandabulunması gerekiyorsa, replikasyon ile verilerin sürekligüncel olması sağlanabilir.

Replikasyon sırasında dikkat edilmesi gereken enönemli nokta, tüm güncelleme işlemlerinin anasunucuda yapılmasıdır. Aksi takdirde dikkatliolunmadığında veri kaybına yol açılabilir.

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 19: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

MySQL KURULUMUKaynak kodlarından Türkçe sıraya dizme desteği ile

derlemek için,tar -zxf /root/mysql-4.0.22.tar.gzcd mysql-4.0.22./configure --prefix=/usr/local/mysql --with-charset=latin5makemake installcp /usr/local/mysql/share/mysql/mysql.server /usr/local/mysql/bin/usr/local/mysql/bin/mysql_install_dbgroupadd mysqluseradd -g mysql mysqlchown -R root /usr/local/mysqlchown -R mysql /usr/local/mysql/varchgrp -R mysql /usr/local/mysql/usr/local/mysql/bin/mysql.server startcd ..rm -rf mysql-4.0.22

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 20: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

phpMyAdminhttp://www.phpmyadmin.net

phpMyAdmin, özellikle MySQL'in web-veritabanıçözümlerde kullanımında her geçen gün defactostandart haline gelen yönetim arayüzüdür.

Web üzerinden çalıştığı için bir ek istemci programaihtiyaç duymaksızın, herhangi bir bilgisayardanuzaktaki MySQL sunucuyu yönetilebilir.

"Root" olarak tüm bir MySQL sunucusunuyönetebileceğiniz gibi sadece belirli bir veritabanınıda yönetebilirsiniz. phpMyAdmin hangi kullanıcı ismiile veritabanına bağlanırsa, onun haklarına sahip olur.

Birden fazla MySQL sunucusunu da, her birinin kendiayarları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;

Page 21: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

veritabanı/tablo yaratma; kullanıcıaçma/yetkilendirme; kısacası aklınıza gelen her şeyiphpMyAdmin ile SQL komutlarına ihtiyaçduymaksızın yapabilirsiniz.

Veritabanının içeriğini SQL komutlarından oluşan birdosyaya boşaltabilir, daha sonra o dosyadanveritabanını istediğiniz başka herhangi bir sunucudaoluşturabilirsiniz.

Bu hazır tanımlanmış işlemlerin dışında her tür SQLkomutunu kendiniz yazarak çalıştırabilir,phpMyAdmin'i tam bir SQL istemcisi gibikullanabilirsiniz.

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 22: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

MySQL Query Browserhttp://www.mysql.com/products/querybrowser/

SQL sorgularınızı kolayca oluşturmak, uygulamak veanaliz etmek için bir görsel araç.

SQL sorgularınızı görsel araçların yanı sıra ellekodlayarak da oluşturabilirsiniz.

Sorgu tarihçesi sayesinde daha önce yaptığınızsorgulara 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 gibidüzenleyebilirsiniz.

Veritabanlarınızda yer alan tabloları oluşturabilir,değiştirebilir ve silebilirsiniz.

Page 23: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

Seçilen nesneler, parametreler ve fonksiyonlar içinayrıntılı yardım bölümleri bulunuyor.

Hem Linux hem Windows sürümleri bulunuyor.

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 24: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

MySQL Administratorhttp://www.mysql.com/products/administrator/

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örselbir 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ınincelenmesi ve optimize edilebilmesi

Page 25: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

Hem Linux hem Windows sürümleri bulunuyor.

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 26: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

Diğer Grafik ArayüzlerMySQLYog -- http://www.webyog.com/

MySQLFront -- http://www.mysqlfront.de

QtMyAdminhttp://mion.elka.pw.edu.pl/~mjankows/qtmyadmin/

Mascon -- http://www.scibit.com

DBManager -- http://www.dbtools.com.br/EN/

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 27: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

MySQL'DE KULLANICILAR veYETKİLENDİRME

MySQL'de tüm kullanıcılar ve yetkileri, "mysql" isimlibir veritabanında tutulur.

Bir kullanıcı iki parçadan oluşur :kullanici_ismi@bilgisayar_ismi (hostname). Bu ikiliyiMySQL tek bir kullanıcı olarak algılar. Yaniahmet@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 yetkiseviyesi için mysql isimli veritabanında birer tablobulunur.

Hiyerarşik olarak bu tablolar en genelden özele doğrutanımlama yapar.

User tablosu : Bağlanan kullanıcının sunucuyabağlanma hakkı olup olmadığını kontrol eder. Eğererişim hakkı varsa, kullanıcı tabloda kendisi içinbelirtilen yetkilere sahip olur.

Db tablosu : Hangi kullanıcıların hangi veritabanlarınahangi bilgisayarlardan ulaşabileceğini belirler. Eğerkullanı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, ancakveritabanları 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ıniçindeki kolonlara erişimi düzenler.

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 28: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

MySQL'DE KULLANICILAR veYETKİLENDİRME

mysql veritabanı | |

user | |

db | |

tables_priv | |

columns_priv

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

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 29: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

MySQL'DE KULLANICILAR veYETKİ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 enfazlasorgu sayısı

Max_updates : Bir saat içinde yapılabilecek en fazlagüncelleme sorgusu sayısı

Max_connections : Bir saat içinde yapılabilecek enfazla bağlantı sayısı

Page 30: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

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 komutunuMySQL sunucusuna göndermeniz gerekir.

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 31: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

MySQL için Güvenlik ÖnerileriRoot kullanıcısına bir şifre tanımladığınıza emin olun,MySQL standart kurulumunda size root kullanıcısınabir ş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 birprogram bağlantı kuracaksa (çoğu web-veritabanıuygulamasında olduğu gibi), TCP/IP servisini kapatın(--skip-networking). Aynı bilgisayardaki web sunucuMySQL'e bağlanmak için zaten çok daha hızlı olanunix soketlerini kullanacaktır.

MySQL'in sembolik linklenmiş tabloları kullanmasınaizin 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ğiile ayarlayabilirsiniz. Böylece bir kullanıcı herhangi birnedenle çok fazla bağlantı açtığında (programındakibir hata veya saldırı amacıyla), MySQL zor durumdakalmayacaktır.

"process" yetkisini kullanıcılara vermeyin. Kendihalinde 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 takdirdeMySQL kullanıcısının hakları ile sunucunuzdakidiledikleri 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. Ozaman 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.

Page 32: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

Veritabanı dosyalarının bulunduğu dizine (orn./usr/local/mysql/var) sadece mysql kullanıcısınınokuma/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 sisteminiiptal ederek çalışmasına ve tüm kullanıcılarınveritabanlarına tam erişime sahip olmasına yol açar.

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 33: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

MySQL Sunucu için Performans İpuçlarıMySQL'in hangi opsiyonlar ile çalışmakta olduğuSHOW VARIABLES komutu ile görülebilir.

MySQL'in optimizasyon ayarları my.cnf dosyasındanyapı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 dinamikderlenmiş 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

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 34: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

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 veuygulanan sorguların kayıtları (makinaismi.log)

Binary Log : Veritabanında tutulan bilgilerde değişiklikyapan tüm sorguların kayıtları -- replikasyon için dekullanılır (makinaismi-bin*)

Slow Log : Belirli bir süreden daha uzun süren ve/yaindeks kullanmayan sorguların kayıtları (makinaismi-slow.log)

Ayrıntılı bilgi :http://dev.mysql.com/doc/en/Log_Files.html

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 35: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

MySQL'in YedeklenmesiSunucu seviyesinde yedeklemeVeri dizininin (ör: /usr/local/mysql/var) toplucayedeklenmesi. Bu dizin MySQL veritabanları,kullanıcıları ve log dosyalarını içerir.- mysqlhotcopy

SQL seviyesinde yedeklemeVeritabanlarının SQL komutlarından oluşan bir metindosyası olarak yedeğinin alınması (sqldump)- mysqldump- mysqlimport

BACKUP TABLE / RESTORE TABLE

Ayrıntılı bilgi :http://www.mysql.com/doc/en/Backup.html

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 36: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

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çin

Diğ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++/

...

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 37: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

MySQL Programlamaiçin Performans İpuçları

Sorguda LIKE '%string%' gibi bir ifade kullanıldığında,eğer string 3 karakterden daha uzun ise, MySQL özelbir algoritma kullanarak daha hızlı arama yapar.

Tablolar üzerinde yaptığınız sorguların, yaptığınızindeksleri kullandığına emin olun. EXPLAINkomutuyla yaptığınız herhangi bir SELECT sorgusuile ilgili ayrıntılı bilgi alabilirsiniz.

Sık güncellenen MyISAM tablolarında tablo kitlemeproblemlerinden kaçınmak için karmaşık SELECTsorguları kullanmamaya özen gösterin.

Çok güncelleme yapılan tablolarda, VARCHAR veBLOB/TEXT dinamik boylu veri tipleri kullanılmazsaperformans artışı sağlanır.

Bir tablodaki satırların sıralamasını ALTER TABLEkomutuyla değiştirebilirsiniz. Eğer bir tablodan süreklibelirli bir sıraya göre veri alıyorsanız, özellikle büyükgüncellemelerden sonra tablodaki satırları uygunbiç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 MySQLdaha az veri ayrıştıracak (parse) ve veriyi daha hızlıveritabanına girecektir.

Web üzerinden yazılım geliştirirken, resimleriveritabanında tutmak yerine resim dosyası olarakdosya sisteminde tutup, veritabanına sadece resminnerede 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

Page 38: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

saklamanızın da bir anlamı yoktur.

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 39: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

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 çoksayıda sonuç alabilme

Her bağlantı için istemcinin zaman diliminibelirtebilmesi

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 veritipleri

HEAP tabloları için BTREE indeksleme

Replikasyonun SSL tünellenebilmesi

INSERT ... ON DUPLICATE KEY UPDATE ... sözdizimi sayesinde birincil (primary) ya da biricik(unique) bir alanda aynı veriye sahip başka kayıtvarsa, yeni bir kayıt ekle(yeme)mek yerine mevcutverinin güncellenmesi

GROUP_CONCAT() fonksiyonuyla gruplanan satırlarüzerinde daha fazla esneklik

Sunucu bazlı HELP komutu. SQL sorgusu olarakgönderildiğinden herhangi bir istemciden erişilebilir.

CREATE TABLE tbl_name2 LIKE tbl_name1 sözdizimi ile yapısal olarak aynı ikinci bir tabloyaratabilme

MyISAM tabloları için birçok ince ayar yapılabilen yenianahtar cache'i.

Page 40: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

SHOW WARNINGS ve SHOW ERRORS ifadeleri

... (ve niceleri)

4.0 sürümünden 4.1'e geçiş sırasında dikkat edilmesigerekenlerhttp://dev.mysql.com/doc/mysql/en/Upgrading-from-4.0.html

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 41: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

SQL KAYNAKLARIIntroduction to SQLhttp://rootus.org/docs/Programming/SQL-Tutor/

Database Normalizationhttp://www.devshed.com/Server_Side/MySQL/Normal

Veri Modelleme

DIAhttp://www.lysator.liu.se/~alla/dia/dia.html

TediaSqlhttp://tedia2sql.tigris.org

Data Architecthttp://www.thekompany.com/products/dataarchitect/

DeZignhttp://www.datanamic.com

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])

Page 42: MySQL VERİTABANI SUNUCUSU SEMİNERİ …MySQL'in Bazı Özellikleri Unix türevlerinden Amiga'ya kadar birçok farklı platformda çalışabiliyor. Birden fazla CPU ile kolaylıkla

KAYNAKLARTürkçe Linux Dokümanlarıhttp://www.belgeler.org

Türkiye Linux E-Posta Listelerihttp://liste.linux.org.tr MySQL'in El Kitabı

http://dev.mysql.com/doc/en/(elektronik ortamda)

MySQL makaleleri ve sunumlarıhttp://dev.mysql.com/tech-resources/

MySQL ile ilgili çeşitli anlatımlarhttp://www.devshed.com/Server_Side/MySQL/

Planet MySQLhttp://www.planetmysql.org/

MySQL Veritabanı Sunucusu - Doruk Fişek ([email protected])