<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Dubluve.net &#187; Mysql</title>
	<atom:link href="http://dubluve.net/category/database/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://dubluve.net</link>
	<description>Biz de yazılımcıyız</description>
	<lastBuildDate>Sat, 19 May 2012 18:29:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Manager of pid-file quit without updating[FAILED] hatasi</title>
		<link>http://dubluve.net/2012/04/20/manager-of-pid-file-quit-without-updatingfailed-hatasi/</link>
		<comments>http://dubluve.net/2012/04/20/manager-of-pid-file-quit-without-updatingfailed-hatasi/#comments</comments>
		<pubDate>Fri, 20 Apr 2012 21:12:18 +0000</pubDate>
		<dc:creator>Emre Macit</dc:creator>
				<category><![CDATA[Mysql]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysql pid-file error]]></category>
		<category><![CDATA[pid-file]]></category>

		<guid isPermaLink="false">http://dubluve.net/?p=1233</guid>
		<description><![CDATA[Eğer Starting MySQL&#8230;.Manager of pid-file quit without updating[FAILED] hatası alıyorsanız, muhtemelen bir sebepten ötürü mysqlinizi durdurmuşsunuz, ama sonra bir daha başlatamamışsınız demektir. Benim de hata şöyle başıma geldi. Bazı sitelerimiz yaklaşık 2 dakikadır açılmıyordu. Server a Ssh&#8217;tan giriş yapabildim, ve kontrol edebildim. Makina&#8217;da load yoktu. (2-3 civarındaydı.) ben de serviceleri yeniden başlatarak bir rahatlama sağlayabileceğimi [...]]]></description>
			<content:encoded><![CDATA[<p>Eğer Starting MySQL&#8230;.Manager of pid-file quit without updating[FAILED] hatası alıyorsanız, muhtemelen bir sebepten ötürü mysqlinizi durdurmuşsunuz, ama sonra bir daha başlatamamışsınız demektir.</p>
<p>Benim de hata şöyle başıma geldi. Bazı sitelerimiz  yaklaşık 2 dakikadır açılmıyordu. Server a Ssh&#8217;tan giriş yapabildim, ve kontrol edebildim. Makina&#8217;da load yoktu. (2-3 civarındaydı.) </p>
<p>ben de serviceleri yeniden başlatarak bir rahatlama sağlayabileceğimi düşündüm. Servisleri durdurdum fakat, mysqli başlatamadım. Başlıkta belirttiğim hatayı verdi. Daha sonra diskte yer kalmadığını gördük. Pid dosyasını da güncelleyemiyordu haliyle.</p>
<h3>Çözüm</h3>
<p>Diskte bir miktar yer açtıktan sonra mysql sıkıntısız bir şekilde başladı. Ah bu loglar yok mu&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://dubluve.net/2012/04/20/manager-of-pid-file-quit-without-updatingfailed-hatasi/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mysql Tablo id&#8217;leri Sıralamak ve Yeniden Dizmek (reorder primary_key)</title>
		<link>http://dubluve.net/2012/03/18/mysql-table-id-leri-siralamak-ve-yeniden-dizmek-reorder-primary_key/</link>
		<comments>http://dubluve.net/2012/03/18/mysql-table-id-leri-siralamak-ve-yeniden-dizmek-reorder-primary_key/#comments</comments>
		<pubDate>Sat, 17 Mar 2012 22:35:37 +0000</pubDate>
		<dc:creator>Emre Macit</dc:creator>
				<category><![CDATA[Mysql]]></category>
		<category><![CDATA[@count]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysql tablo]]></category>
		<category><![CDATA[reorder]]></category>
		<category><![CDATA[reorder a table]]></category>
		<category><![CDATA[reorder id]]></category>
		<category><![CDATA[reorder primary key]]></category>
		<category><![CDATA[tabloyu yeniden sıralamak]]></category>

		<guid isPermaLink="false">http://dubluve.net/?p=1025</guid>
		<description><![CDATA[tablo1 tablosu; id ve label adlı 2 sütundan oluşuyor ve id primary key auto increment mevcut. insert into tablo1 values(11,'ahmet'),(3,'mahmut'),(4,'muharrem'),(5,'sedat'),(1,'emre'); Şeklinde bir komut ile satırlarınızı olutşturduysanız, SELECT * FROM tablo1; komutu çalıştırdığınızda order by komutu kullanmazsanız, sonuçlar aşağıdaki gibi ekleme sıranıza göre gelecektir. id label 11 ahmet 3 mahmut 4 muharrem 5 sedat 1 emre [...]]]></description>
			<content:encoded><![CDATA[<p><strong>tablo1</strong> tablosu; <strong>id</strong> ve <strong>label</strong> adlı 2 sütundan oluşuyor ve <strong>id</strong> primary key auto increment mevcut.</p>
<pre class="php">insert into tablo1 values(11,'ahmet'),(3,'mahmut'),(4,'muharrem'),(5,'sedat'),(1,'emre');</pre>
<p>Şeklinde bir komut ile satırlarınızı olutşturduysanız,</p>
<pre class="php">SELECT * FROM tablo1;</pre>
<p>komutu çalıştırdığınızda order by komutu kullanmazsanız, sonuçlar aşağıdaki gibi ekleme sıranıza göre gelecektir.</p>
<pre class="php">id      label
11	ahmet
3	mahmut
4	muharrem
5	sedat
1	emre</pre>
<p>Bu tabloda</p>
<pre class="php">ALTER TABLE tablo1 ORDER BY id ASC;</pre>
<p>komutunu çalıştırırsanız, yeni</p>
<pre class="php">Select * from tablo1;</pre>
<p>komutunuzun sonucu şöyle olur:</p>
<pre class="php">id	label
1	emre
3	mahmut
4	muharrem
5	sedat
11	ahmet</pre>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
İnsanlar yukarıda yazdığımla şu yazdığımı birbirine karıştırıyor.<br />
<strong>Şimdi ayrı bir konu olduğunu belirterek;</strong> bu satırların id lerini de tekrar sıraya dizmek istiyorsak şöyle yapabiliriz.</p>
<pre class="php">SET @count = 0;
UPDATE `tablo1` SET `id` = @count:= @count + 1;</pre>
<p>Sonuçlar:</p>
<pre class="php">Select * from tablo1;</pre>
<p>Sonuçlar :</p>
<pre class="php">id      label
1	emre
2	mahmut
3	muharrem
4	sedat
5	ahmet</pre>
<p>şeklinde görüldüğü gibi tablo id&#8217;lere göre sıraya dizilmiş bir şekilde olacaktır.</p>
<p>Bu konuyla ilgili araştırıyorsanız (neden araştırdığınızı siz biliyorsunuz zaten, benim bunu uygulama derdim; düzenli olması ve en önemlisi bu veritabanını kullanan herkes için bir standart oturtmak istememdi), en mantıklısı ilk yaptığımdan sonra 2. yaptığımı uygulamaktır. Böylece hem satırlar default eklenme sırasına göre değil de , ilgili id&#8217;ye göre sıralanmış olacaktır. Daha sonra da , bu idleri de 1 den başlayacak şekilde tekraradan dizmiş olacağız.</p>
<p>Yani bahsetmiş olduğum 2 olayı komutu birlikte kullanınca, artık idleri 1 den ardışık bir şekilde devam eden bir tablonuz olmuş oalcaktır. Özellikle ayar tablolarınızın arada sırada primary_key alanında böyle bir güzelleştirme yaparsınız diye düşündük.. <img src='http://dubluve.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://dubluve.net/2012/03/18/mysql-table-id-leri-siralamak-ve-yeniden-dizmek-reorder-primary_key/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>mysql ortalama (avg) fonksiyonu</title>
		<link>http://dubluve.net/2012/02/28/mysql-ortalama-avg-fonksiyonu/</link>
		<comments>http://dubluve.net/2012/02/28/mysql-ortalama-avg-fonksiyonu/#comments</comments>
		<pubDate>Tue, 28 Feb 2012 14:44:18 +0000</pubDate>
		<dc:creator>Emre Macit</dc:creator>
				<category><![CDATA[Mysql]]></category>
		<category><![CDATA[avg]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysql avg]]></category>
		<category><![CDATA[mysql ortalama]]></category>
		<category><![CDATA[mysql ortalama bulmak]]></category>

		<guid isPermaLink="false">http://dubluve.net/?p=942</guid>
		<description><![CDATA[Çok basit bir konu olan ortalama alma, mysql içinde tek bir fonksiyon (avg fonksiyonu) ile yapılabilmektedir. Her veritabanında muhtemelen vardır zaten. Aklımızda bulunsun, aranınca da bulunsun.. Örnek : Bir blogumuz olsun ve içinde yazılarımıza puan verenlerin tutulduğu bir sütunumuz olsun. select avg(point) from posts; point sütunundaki değerin ortalamasını almak manasına gelmektedir. query yapılan tablodaki sorgu [...]]]></description>
			<content:encoded><![CDATA[<p>Çok basit bir konu olan ortalama alma, mysql içinde tek bir fonksiyon (avg fonksiyonu) ile yapılabilmektedir. Her veritabanında muhtemelen vardır zaten. Aklımızda bulunsun, aranınca da bulunsun..</p>
<p>Örnek :<br />
Bir blogumuz olsun ve içinde yazılarımıza puan verenlerin tutulduğu bir sütunumuz olsun.</p>
<pre class="php">select avg(point) from posts;</pre>
<p>point sütunundaki değerin ortalamasını almak manasına gelmektedir. query yapılan tablodaki sorgu sonucu için ilgili sütunun ortalamasını döndürür.</p>
]]></content:encoded>
			<wfw:commentRss>http://dubluve.net/2012/02/28/mysql-ortalama-avg-fonksiyonu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mysql &#8220;Got error 28 from storage engine&#8221; Hatası</title>
		<link>http://dubluve.net/2012/02/17/mysql-got-error-28-from-storage-engine-hatasi/</link>
		<comments>http://dubluve.net/2012/02/17/mysql-got-error-28-from-storage-engine-hatasi/#comments</comments>
		<pubDate>Fri, 17 Feb 2012 12:42:43 +0000</pubDate>
		<dc:creator>Emre Macit</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mysql]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysql error 28]]></category>
		<category><![CDATA[storage engine error]]></category>

		<guid isPermaLink="false">http://dubluve.net/?p=894</guid>
		<description><![CDATA[Mysql ile çalışan bir sisteminizde &#8220;Got error 28 from storage engine&#8220; hatası alıyorsanız eğer, harddiskinizde işlem yapacak en ufak bir yer kalmamış demektir. Basit bir select sorgusunda bile (diske bir şey yazılmıyor zannediyorsanız, mysql-cache açıksa bunu cachelemek için diske yazar) bu hatayı alabilirsiniz. Diskinizde bir miktar yer açarsanız yani kısaca mysql için çalışma alanı oluşturabilirseniz, [...]]]></description>
			<content:encoded><![CDATA[<p>Mysql ile çalışan bir sisteminizde <em>&#8220;<strong>Got error 28 from storage engine</strong>&#8220;</em> hatası alıyorsanız eğer, harddiskinizde işlem yapacak en ufak bir yer kalmamış demektir.<br />
Basit bir <strong>select</strong> sorgusunda bile (diske bir şey yazılmıyor zannediyorsanız, mysql-cache açıksa bunu cachelemek için diske yazar) bu hatayı alabilirsiniz.</p>
<p>Diskinizde bir miktar yer açarsanız yani kısaca mysql için çalışma alanı oluşturabilirseniz, problem çözülecektir. Genelde <strong>tmp</strong> klasörü içindekiler silinebilir.</p>
<p>Ama doğrudan problem bu klasörün dolması demek değildir, diskinizin dolmasından dolayıdır. Amaçsızca bir şeyler silmeyiniz <img src='http://dubluve.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://dubluve.net/2012/02/17/mysql-got-error-28-from-storage-engine-hatasi/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>En Kolay Linux &#8211; Turnkey Linux</title>
		<link>http://dubluve.net/2012/02/06/en-kolay-linux-turnkey-linux/</link>
		<comments>http://dubluve.net/2012/02/06/en-kolay-linux-turnkey-linux/#comments</comments>
		<pubDate>Sun, 05 Feb 2012 22:18:05 +0000</pubDate>
		<dc:creator>Boğaç Aslanyürek</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mysql]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Uygulama]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[kurulum]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[web sunucusu]]></category>

		<guid isPermaLink="false">http://dubluve.net/?p=738</guid>
		<description><![CDATA[Eğer PHP ile web yazılımı geliştirmiş ve ya geliştirme altyapısını merak etmişseniz, mutlaka kendi bilgisayaranıza Ubuntu ve ya herhangi başka bir linux dağıtımı kurup Apache-MySQL-PHP kurulumları yapmayı denemişsinizdir. Bu macera kimi zaman hüsranla ve &#8220;bununla uğraşılmaz&#8221; nidalarıyla, kimi zamansa yorgun gözler ama başarmış olmanın gururu ve bilgi birikimi ile biter. Ben bir zamanlar ikisini de [...]]]></description>
			<content:encoded><![CDATA[<p>Eğer PHP ile web yazılımı geliştirmiş ve ya geliştirme altyapısını merak etmişseniz, mutlaka kendi bilgisayaranıza Ubuntu ve ya herhangi başka bir linux dağıtımı kurup Apache-MySQL-PHP kurulumları yapmayı denemişsinizdir. Bu macera kimi zaman hüsranla ve &#8220;bununla uğraşılmaz&#8221; nidalarıyla, kimi zamansa yorgun gözler ama başarmış olmanın gururu ve bilgi birikimi ile biter. Ben bir zamanlar ikisini de yaşamış ve sonunda kurulum yapmıştım <img src='http://dubluve.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Geçen aylar içerisinde yine bir yazılım geliştirme platformu kurma ihtiyacım doğduğu için, önce kendi bilgisayarıma dual-boot ile xubuntu kurarak, LAMP (Linux Apache MySQL PHP) platformunu kurmaya başladım. Başlarda biraz zorlansam da, takıldığım noktaları eski tecrüblerimden hatırlayarak aşabildim ve Ubuntu&#8217;nun da artık daha kolaylaşmış yapısı sayesinde kurulum yapabildim. Fakat arkadaşım <a title="Arda Başoğlu" href="http://www.ardabasoglu.com" target="_blank">Arda Başoğlu</a>&#8216;nun beni uyarmasıyla, tekerleği tekrar keşfetme hatasına düştüğümü gördüm (bunun için kendisine ayrıca teşekkürler). İhtiyacım olan proje, benzer problemler yaşayan bazı insanların hazırladığı bir proje olan Turnkey Linux ile işte böyle tanıştım.</p>
<p>Turnkey Linux, <strong>belirli bir ihtiyacı karşılayan ufak linux sistemlerinden oluşuyor</strong>. Bu linux sistemlerinde, ihtiyacımız olan platform ile ilgili uygulamalar kurulmuş ve genel ayarları yapılmış şekilde bulunuyor. Ayrıca bu sistemler ister direkt kurulum için ISO formatında, ister sanallaştırma için ODF ve VMDK gibi formatlarda dağıtılıyor. Turnkey Linux projesinde kullanabileceğimiz birçok kategori ve birçok uygulama bulunuyor, örneğin web yazılım geliştirme kategorisinde LAMP, Ruby On Rails, Google App Engine gibi platformları içeren sistemler mevcut. Sadece veritabanına ihtiyaç duyuyorsanız, MySQL ve PostgreSQL veritabanı sistemlerini de indirip kullanabilirsiniz.</p>
<p>Örnek olarak aşağıda LAMP (Linux Apache Mysql PHP) platformunun VirtualBox ile sanal makina olarak Windows işletim sistemine sahip bir makinada kurulmasını anlattım.</p>
<h3>Kurulum</h3>
<p><a title="Turnkey Linux" href="http://www.turnkeylinux.org/">Turnkey Linux anasayfasına</a> girin ve Apps menüsünden Web Development kategorisinde <strong>LAMP Stack</strong> isimli uygulamayı bulun. Detaylarda indirme linklerinden <strong>More Builds(OVF)</strong> linkini tıkladıktan sonra açılan indirme ekranında ismi ovf.zip olarak biten dosyayı indirin. Bir yandan VirtualBox programının son sürümünü Windows işletim sistemi için indirip kurun.</p>
<p>VirtualBox kurulumun yaptıktan sonra indirilen arşiv dosyasını bir klasöre açın. VirtualBox programınd<strong>a File-&gt;Import Appliance</strong> diyerek Appliance Import Wizard&#8217;ı açın. Az önce arşivden çıkarttığınız dosyalardan .ovf formatındaki dosyayı bu ekranda seçin ve devam edin. Sonraki ekranda VirtualBox  bu sistem  için geçerli sanal makina ayarlarını gösterecektir. Bu ayarlardan sadece <strong>Virtual Disk Image </strong>ayarını değiştirmenizi tavsiye ederim, varsayılan olarak  C:\ diskini kullandığı için ve eğer bu diskte yeterli yeriniz yoksa sorun olabilir. Diğer ayarları değiştirmeden Import derseniz yeni sanal makina başlatmaya hazır oluyor.</p>
<p>Oluşan yeni sanal makinayı VirtualBox Manager ekranındaki listeden artık görebilirsiniz. Şimdi bu makinayı başlatmak ve bazı ayarlarını yapmak gerekiyor. Sanal makinayı seçtikten sonra start derseniz sanal makina açılmaya başlayacaktır. Makinamız açılırken  <a title="Turnkey Linux Hub" href="https://hub.turnkeylinux.org/signup/" target="_blank">Turnkey Linux Hub</a> platformu sayfasına gidin ve kayıt olun. Kayıt olmak zorunlu değil,  her bir sanal makina için dinamik DNS hizmetinden faydalanmayı sağlayacağı için kayıt olmanızı tavsiye ederim. Ayrıca eğer isterseniz sanal makinaları Amazon Elastic Cloud (EC2) sisteminde otomatik olarak yedekleme şansınız olacak. Turnkey Linux Hub platformu OpenID desteklediği için Google hesabınızla bile kayıt olabilirsiniz. Kayıt olduktan sonra giriş yaptığınızda User Profile ekranına girin, Login Details sekmesinde API Key alanını göreceksiniz. Bu bilgiyi birazdan kullanacağız.</p>
<p>LAMP platformunu içeren sanal makina  hazır ve root şifresini soruyor olacak. Bu şifreyi çok dikatli seçin, hem zor olsun hem de unutmayın. Sakın 123456 vermeyin <img src='http://dubluve.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Root şifresini ssh ile shell girişi yaptığımızda da kullanacağız. Root şifresini belirledikten sonra MySQL root şifresini soracaktır. Bu şifre için de zor ama unutmayacağınız bir şifre seçin. Root kullanıcısı MySQL sisteminde her şey yetkili tek kullanıcıdır.</p>
<p>Bu iki şifreyi belirledikten sonra sistem az önce belirttiğimiz API Key bilgisi soracaktır. Bu bilgiyi vermek ve ya kayıt olmak zorunda değilsiniz. Eğer API Key bilgisini yazarsanız sonraki ekranda otomatik yedekleme için gerekli shell komutunu gösterecektir, fakat yedekleme sadece Amazon ile gerekli entegrasyonu hesabınızda yaparsanız sağlanıyor. Komutu gösteren ekrandan sonra, <a title="Dinamik DNS" href="http://en.wikipedia.org/wiki/Dynamic_dns" target="_blank">dinamik DNS</a> hizmeti için sizden bir internet adresi isteyecektir. Burada seçeceğimiz adres {sunucumunadresi}.tklapp.com formatında olmak ve daha önce kimsenin seçmediği bir adresi olmak zorunda. Eğer bu şartları sağlıyorsa, bundan sonra internetten bu adresi yazan herhangi birisi makinanıza erişebilecektir. Üstelik IP adresiniz değişse bile, bu adres otomatik olarak sanal makina her başladığında güncellenecektir. Güncelleme yazılımının detaylarına erişmek isterseniz <a href="http://www.turnkeylinux.org/docs/hubdns" target="_blank">şu adresi</a> kontrol edebilirsiniz.</p>
<p>İnternet adresi belirledikten sonra, sistem güvenlik güncellemeleri yapacağını belirtecek ve sizden onay isteyecektir. Güvenlik güncelleştirmelerini geçmeyin ve güncellemelerin bitmesini bekleyin. Güncelleştirmeler de bittiğinde karşınıza gelen ekranda sistemimizde erişebileceğimiz linkleri gösteren bir ekran gelecektir. Gördüğünüz gibi sanal makina ağda kendisini yeni bir istemci olarak göstererek  otomatik olarak farklı bir IP adresi aldı. Şu an sanal makina yerel ağdan artık erişilebilir duruma geldi. Ayrıca ekrandaki linklerde bir yönetim paneli linki de göreceksiniz, bu yönetim paneli daha önce belirlediğiniz root şifresi ile giriş kabul ediyor ve sistemin tüm ayarlarını bu görsel web arayüzü üzerinden de yapabiliyorsunuz. Oldukça rahat değil mi <img src='http://dubluve.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Sanal makinanın  internetten de erişilebilmesi için sadece ona dinamik dns atamak yeterli değil. Ayrıca bazı router ayarları da yapmak gerekiyor. <a href="http://portforward.com/english/routers/port_forwarding/routerindex.htm" target="_blank">Şu adresten</a> router markanızı bulup, 80 portunu <strong>sanal makinanın IP adresine</strong> yönlendirirseniz, internetten de erişilebilir duruma gelecektir. Dikkat edilmesi gereken başka bir nokta da, <strong>sanal makinanıza atadığınız internet adresini yerel ağınızdan denemeyin.</strong> Mesela telefonunuzdan 3G ile internet adresini açmayı deneyin. Eğer yerel ağınızdan denerseniz router sayfasına yönlenirsiniz <img src='http://dubluve.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Bazı Turnkey Linux uygulamaları konusunda  daha detaylı yazıları ileride yazacağım.  Yeni Linux sunucunuz hayırlı olsun !</p>
]]></content:encoded>
			<wfw:commentRss>http://dubluve.net/2012/02/06/en-kolay-linux-turnkey-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mysql Paralı Kullanım (Commercial Version) Protesto ediyorum</title>
		<link>http://dubluve.net/2012/01/31/mysql-parali-kullanim-commercial-version-protesto-ediyorum/</link>
		<comments>http://dubluve.net/2012/01/31/mysql-parali-kullanim-commercial-version-protesto-ediyorum/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 12:38:39 +0000</pubDate>
		<dc:creator>Emre Macit</dc:creator>
				<category><![CDATA[Mysql]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysql commercial]]></category>
		<category><![CDATA[mysql paralı]]></category>
		<category><![CDATA[thread pool]]></category>

		<guid isPermaLink="false">http://dubluve.net/?p=827</guid>
		<description><![CDATA[Bir arkadaşımın demesiyle ifade edeyim. &#8220;Oracle Mysql&#8217;i aldığında ne olacağı az çok belliydi&#8230;&#8221; Evet, dökümantasyonlarındaki aşağıdaki yazı ile mysql&#8217;den ayrılmak için bir sebebim oldu artık. &#8220;The thread pool plugin is a commercial feature. It is not included in MySQL community distributions.&#8221; Gerçekten iyiydi mysql ile aramız. Bizi zorlasa da microsoft mantığından gitmiyordu. Biz kendisini pek [...]]]></description>
			<content:encoded><![CDATA[<p>Bir arkadaşımın demesiyle ifade edeyim. &#8220;Oracle Mysql&#8217;i aldığında ne olacağı az çok belliydi&#8230;&#8221;</p>
<p>Evet, dökümantasyonlarındaki aşağıdaki yazı ile mysql&#8217;den ayrılmak için bir sebebim oldu artık.</p>
<p>&#8220;The thread pool plugin is a commercial feature. It is not included in MySQL community distributions.&#8221;</p>
<p>Gerçekten iyiydi mysql ile aramız. Bizi zorlasa da microsoft mantığından gitmiyordu. Biz kendisini pek bırakmayı düşünmedik, eski projelerimizde de bırakmayı pek düşünemeyiz şimdilik. Fakat, yeni bir şeyler yapacaksak mutlaka alternatifleri daha çok değerlendireceğim ve araştıracağım. Sen de mi Mysql diyor ve acımı sizinle paylaşıyorum.</p>
<p>&nbsp;</p>
<p>Thread pool neymiş ne işe yararmış anlatmıyorum, protesto ediyorum!</p>
]]></content:encoded>
			<wfw:commentRss>http://dubluve.net/2012/01/31/mysql-parali-kullanim-commercial-version-protesto-ediyorum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LEFT JOIN, INNER JOIN kullanımı (examples)</title>
		<link>http://dubluve.net/2012/01/24/left-join-inner-join-example/</link>
		<comments>http://dubluve.net/2012/01/24/left-join-inner-join-example/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 13:26:10 +0000</pubDate>
		<dc:creator>Gökhan Tunçkale</dc:creator>
				<category><![CDATA[Mysql]]></category>
		<category><![CDATA[inner join]]></category>
		<category><![CDATA[inner join null]]></category>
		<category><![CDATA[join]]></category>
		<category><![CDATA[left join]]></category>
		<category><![CDATA[mysql join]]></category>

		<guid isPermaLink="false">http://dubluve.net/?p=817</guid>
		<description><![CDATA[Join kavramı, birden çok tablo ile işlem yaparken, tek query ile çekme, sıralama, filtreleme işlemleri yapabilmemizi sağlar. Örneğimizde 3 adet tablomuz olacak. İlk tablomuzda oyuncu isimleri, ikinci tablomuzda maç isimleri, üçüncü tablomuzda ise kaydedilen goller olacak. (Gol atmayan futbolcu için üçüncü tabloda kayıt tutulmamakta.) Sırasıyla tablolarımızı oluşturup içlerine verileri yerleştirelim. İlki, futbolcu isimlerinin olduğu, &#8216;player&#8216; [...]]]></description>
			<content:encoded><![CDATA[<p>Join kavramı, birden çok tablo ile işlem yaparken, tek query ile çekme, sıralama, filtreleme işlemleri yapabilmemizi sağlar.</p>
<p>Örneğimizde 3 adet tablomuz olacak. İlk tablomuzda oyuncu isimleri, ikinci tablomuzda maç isimleri, üçüncü tablomuzda ise kaydedilen goller olacak. (Gol atmayan futbolcu için üçüncü tabloda kayıt tutulmamakta.)</p>
<p>Sırasıyla tablolarımızı oluşturup içlerine verileri yerleştirelim.</p>
<p>İlki, futbolcu isimlerinin olduğu, &#8216;<strong>player</strong>&#8216; isimli tablo.</p>
<pre>
CREATE TABLE IF NOT EXISTS `player` (
  `player_id` int(11) NOT NULL AUTO_INCREMENT,
  `fullname` text COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`player_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=23 ;

INSERT INTO `player` (`player_id`, `fullname`) VALUES
(1, 'messi'),
(2, 'xavi'),
(3, 'iniesta'),
(4, 'abidal'),
(5, 'puyol'),
(6, 'yaya toure'),
(7, 'david silva'),
(8, 'balotelli'),
(9, 'aguero'),
(10, 'quaresma'),
(11, 'fernandes'),
(12, 'simao'),
(13, 'almeida'),
(14, 'pektemek'),
(15, 'hamit'),
(16, 'alanzinho'),
(17, 'altıntop'),
(18, 'henry'),
(19, 'van persie'),
(20, 'drogba'),
(21, 'lampard'),
(22, 'torres');
</pre>
<pre>
+-----------+---------+------+-----+---------+----------------+
| Field     | Type    | Null | Key | Default | Extra          |
+-----------+---------+------+-----+---------+----------------+
| player_id | int(11) | NO   | PRI | NULL    | auto_increment |
| fullname  | text    | NO   |     | NULL    |                |
+-----------+---------+------+-----+---------+----------------+

mysql&gt; SELECT *
    -&gt; FROM player

+-----------+-------------+
| player_id | fullname    |
+-----------+-------------+
|         1 | messi       |
|         2 | xavi        |
|         3 | iniesta     |
|         4 | abidal      |
|         5 | puyol       |
|         6 | yaya toure  |
|         7 | david silva |
|         8 | balotelli   |
|         9 | aguero      |
|        10 | quaresma    |
|        11 | fernandes   |
|        12 | simao       |
|        13 | almeida     |
|        14 | pektemek    |
|        15 | hamit       |
|        16 | alanzinho   |
|        17 | altıntop    |
|        18 | henry       |
|        19 | van persie  |
|        20 | drogba      |
|        21 | lampard     |
|        22 | torres      |
+-----------+-------------+
</pre>
<p>İkincisi, maçların olduğu &#8216;<strong>matches</strong>&#8216; tablosu;</p>
<pre>

CREATE TABLE IF NOT EXISTS `matches` (
  `match_id` int(11) NOT NULL AUTO_INCREMENT,
  `match_name` text COLLATE utf8_unicode_ci NOT NULL,
  `match_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`match_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=13 ;

INSERT INTO `matches` (`match_id`, `match_name`, `match_date`) VALUES
(1, 'barcelona - city', '2012-01-18 21:37:04'),
(2, 'barcelona - arsenal', '2012-01-18 21:37:11'),
(3, 'barcelona - chelsea', '2012-01-18 21:37:19'),
(4, 'barcelona - beşiktaş', '2012-01-18 21:37:25'),
(5, 'barcelona - trabzon', '2012-01-18 21:37:32'),
(6, 'arsenal - chelsea', '2012-01-18 21:37:45'),
(7, 'arsenal - beşiktaş', '2012-01-18 21:37:51'),
(8, 'arsenal - trabzon', '2012-01-18 21:37:57'),
(9, 'chelsea - beşiktaş', '2012-01-18 21:38:09'),
(10, 'chelsea - trabzon', '2012-01-18 21:38:15'),
(11, 'beşiktaş - trabzon', '2012-01-18 21:38:25');
</pre>
<pre>
+------------+-----------+------+-----+-------------------+----------------+
| Field      | Type      | Null | Key | Default           | Extra          |
+------------+-----------+------+-----+-------------------+----------------+
| match_id   | int(11)   | NO   | PRI | NULL              | auto_increment |
| match_name | text      | NO   |     | NULL              |                |
| match_date | timestamp | NO   |     | CURRENT_TIMESTAMP |                |
+------------+-----------+------+-----+-------------------+----------------+

mysql&gt; SELECT *
    -&gt; FROM matches

+----------+----------------------+---------------------+
| match_id | match_name           | match_date          |
+----------+----------------------+---------------------+
|        1 | barcelona - city     | 2012-01-18 21:37:04 |
|        2 | barcelona - arsenal  | 2012-01-18 21:37:11 |
|        3 | barcelona - chelsea  | 2012-01-18 21:37:19 |
|        4 | barcelona - beşiktaş | 2012-01-18 21:37:25 |
|        5 | barcelona - trabzon  | 2012-01-18 21:37:32 |
|        6 | arsenal - chelsea    | 2012-01-18 21:37:45 |
|        7 | arsenal - beşiktaş   | 2012-01-18 21:37:51 |
|        8 | arsenal - trabzon    | 2012-01-18 21:37:57 |
|        9 | chelsea - beşiktaş   | 2012-01-18 21:38:09 |
|       10 | chelsea - trabzon    | 2012-01-18 21:38:15 |
|       11 | beşiktaş - trabzon   | 2012-01-18 21:38:25 |
+----------+----------------------+---------------------+
</pre>
<p>Son tablomuz, &#8216;<strong>score</strong>&#8216; tablosu, yani &#8216;player&#8217; ve &#8216;matches&#8217; tabloları arasında bağlantı kuracağımız tablo. (p2m)</p>
<pre>

CREATE TABLE IF NOT EXISTS `score` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `player_id` int(11) NOT NULL,
  `match_id` int(11) NOT NULL,
  `goals` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=17 ;

INSERT INTO `score` (`id`, `player_id`, `match_id`, `goals`) VALUES
(1, 1, 1, 2),
(2, 1, 2, 3),
(3, 2, 1, 1),
(4, 2, 5, 5),
(5, 5, 4, 1),
(6, 7, 1, 2),
(7, 10, 4, 2),
(8, 10, 11, 3),
(9, 12, 7, 1),
(10, 18, 2, 1),
(11, 18, 7, 2),
(12, 18, 8, 1),
(13, 20, 3, 1),
(14, 20, 6, 1),
(15, 21, 6, 1),
(16, 22, 10, 2);
</pre>
<pre>

+-----------+---------+------+-----+---------+----------------+
| Field     | Type    | Null | Key | Default | Extra          |
+-----------+---------+------+-----+---------+----------------+
| id        | int(11) | NO   | PRI | NULL    | auto_increment |
| player_id | int(11) | NO   |     | NULL    |                |
| match_id  | int(11) | NO   |     | NULL    |                |
| goals     | int(11) | NO   |     | NULL    |                |
+-----------+---------+------+-----+---------+----------------+

+----+-----------+----------+-------+
| id | player_id | match_id | goals |
+----+-----------+----------+-------+
|  1 |         1 |        1 |     2 |
|  2 |         1 |        2 |     3 |
|  3 |         2 |        1 |     1 |
|  4 |         2 |        5 |     5 |
|  5 |         5 |        4 |     1 |
|  6 |         7 |        1 |     2 |
|  7 |        10 |        4 |     2 |
|  8 |        10 |       11 |     3 |
|  9 |        12 |        7 |     1 |
| 10 |        18 |        2 |     1 |
| 11 |        18 |        7 |     2 |
| 12 |        18 |        8 |     1 |
| 13 |        20 |        3 |     1 |
| 14 |        20 |        6 |     1 |
| 15 |        21 |        6 |     1 |
| 16 |        22 |       10 |     2 |
+----+-----------+----------+-------+
</pre>
<p>Dikkat ederseniz, player tablosu ve score tablosunda ortak &#8216;player_id&#8217; alanı, matches tablosu ve score tablosunda ortak &#8216;match_id&#8217; alanı mevcuttur. Ortak tabloyu kullanarak maçlar ve futbolcularla ilgili çeşitli senaryolar kurup örnek sorgular verelim.</p>
<p>Öncelikle LEFT JOIN ve INNER JOIN arasındaki farkı ortaya koyan bir sorgu yapalım</p>
<pre>
mysql&gt; SELECT *
    -&gt; FROM player p
    -&gt; LEFT JOIN score p2m
    -&gt; ON (p2m.player_id = p.player_id);
</pre>
<p>Bu sorguyu yaptığımızda, açıkca görüldüğü üzere player tablosu ile score tablosu arasında, player_id kullanılarak left join yapılmıştır. Ve sonucu şu şekildedir;</p>
<pre>
+-----------+-------------+------+-----------+----------+-------+
| player_id | fullname    | id   | player_id | match_id | goals |
+-----------+-------------+------+-----------+----------+-------+
|         1 | messi       |    1 |         1 |        1 |     2 |
|         1 | messi       |    2 |         1 |        2 |     3 |
|         2 | xavi        |    3 |         2 |        1 |     1 |
|         2 | xavi        |    4 |         2 |        5 |     5 |
|         3 | iniesta     | NULL |      NULL |     NULL |  NULL |
|         4 | abidal      | NULL |      NULL |     NULL |  NULL |
|         5 | puyol       |    5 |         5 |        4 |     1 |
|         6 | yaya toure  | NULL |      NULL |     NULL |  NULL |
|         7 | david silva |    6 |         7 |        1 |     2 |
|         8 | balotelli   | NULL |      NULL |     NULL |  NULL |
|         9 | aguero      | NULL |      NULL |     NULL |  NULL |
|        10 | quaresma    |    7 |        10 |        4 |     2 |
|        10 | quaresma    |    8 |        10 |       11 |     3 |
|        11 | fernandes   | NULL |      NULL |     NULL |  NULL |
|        12 | simao       |    9 |        12 |        7 |     1 |
|        13 | almeida     | NULL |      NULL |     NULL |  NULL |
|        14 | pektemek    | NULL |      NULL |     NULL |  NULL |
|        15 | hamit       | NULL |      NULL |     NULL |  NULL |
|        16 | alanzinho   | NULL |      NULL |     NULL |  NULL |
|        17 | altıntop    | NULL |      NULL |     NULL |  NULL |
|        18 | henry       |   10 |        18 |        2 |     1 |
|        18 | henry       |   11 |        18 |        7 |     2 |
|        18 | henry       |   12 |        18 |        8 |     1 |
|        19 | van persie  | NULL |      NULL |     NULL |  NULL |
|        20 | drogba      |   13 |        20 |        3 |     1 |
|        20 | drogba      |   14 |        20 |        6 |     1 |
|        21 | lampard     |   15 |        21 |        6 |     1 |
|        22 | torres      |   16 |        22 |       10 |     2 |
+-----------+-------------+------+-----------+----------+-------+
</pre>
<p>Bazı futbolcuların ismi 2 kez geçmiştir (bunlar birden fazla maçta gol atanlar), bazı futbolcuların isimlerinin bulunduğu satırlarda ise diğer değerler NULL olarak gözükmektedir. Inner join yaptığımızda ise sonuç  şöyledir;</p>
<pre>
mysql&gt; SELECT *
    -&gt; FROM player p
    -&gt; INNER JOIN score p2m
    -&gt; ON (p2m.player_id = p.player_id);

+-----------+-------------+----+-----------+----------+-------+
| player_id | fullname    | id | player_id | match_id | goals |
+-----------+-------------+----+-----------+----------+-------+
|         1 | messi       |  1 |         1 |        1 |     2 |
|         1 | messi       |  2 |         1 |        2 |     3 |
|         2 | xavi        |  3 |         2 |        1 |     1 |
|         2 | xavi        |  4 |         2 |        5 |     5 |
|         5 | puyol       |  5 |         5 |        4 |     1 |
|         7 | david silva |  6 |         7 |        1 |     2 |
|        10 | quaresma    |  7 |        10 |        4 |     2 |
|        10 | quaresma    |  8 |        10 |       11 |     3 |
|        12 | simao       |  9 |        12 |        7 |     1 |
|        18 | henry       | 10 |        18 |        2 |     1 |
|        18 | henry       | 11 |        18 |        7 |     2 |
|        18 | henry       | 12 |        18 |        8 |     1 |
|        20 | drogba      | 13 |        20 |        3 |     1 |
|        20 | drogba      | 14 |        20 |        6 |     1 |
|        21 | lampard     | 15 |        21 |        6 |     1 |
|        22 | torres      | 16 |        22 |       10 |     2 |
+-----------+-------------+----+-----------+----------+-------+
</pre>
<p>Açıkca görüldüğü gibi, INNER JOIN kullandığımızda NULL olan rowlar gelmemiştir.</p>
<p>Dikkat etmemiz gereken şey şudur.<br />
Yaptığımız örnekte, gol atmayan futbolcuya hiç bir değer girmedik. Böylece LEFT JOIN yaptığımızda; player tablosundaki player_id, score tablosunda kendi karşılığı olan player_id bulamadığı için row komple NULL olarak döndü. Biz gol atmayan futbolcular için kayıt tutuyor olsaydık, goals sütunu bize 0 (sıfır) olarak dönerdi.</p>
<p>Inner Join kullandığımızda da 0 (sıfır) olan satırlar bize dönerdi. Çünkü NULL değil, sıfır değeri mevcut.</p>
<p>Mesela, henry&#8217;nin hangi maçlar gol attığını bulalım. Öncelikle player tablosundan henry&#8217;i alıp, score tablosuna taşımalıyız (player_id), oradaki değerle de (match_id) matches tablosundan maça ulaşmalıyız. Yani yapmamız gereken sorgu;</p>
<pre>
mysql&gt; SELECT *
    -&gt; FROM player p
    -&gt; LEFT JOIN score p2m
    -&gt; ON (p.player_id = p2m.player_id)
    -&gt; LEFT JOIN matches m
    -&gt; ON (m.match_id = p2m.match_id)
    -&gt; WHERE p.fullname='henry';

+-----------+----------+------+-----------+----------+-------+----------+---------------------+---------------------+
| player_id | fullname | id   | player_id | match_id | goals | match_id | match_name          | match_date          |
+-----------+----------+------+-----------+----------+-------+----------+---------------------+---------------------+
|        18 | henry    |   10 |        18 |        2 |     1 |        2 | barcelona - arsenal | 2012-01-18 21:37:11 |
|        18 | henry    |   11 |        18 |        7 |     2 |        7 | arsenal - beşiktaş  | 2012-01-18 21:37:51 |
|        18 | henry    |   12 |        18 |        8 |     1 |        8 | arsenal - trabzon   | 2012-01-18 21:37:57 |
+-----------+----------+------+-----------+----------+-------+----------+---------------------+---------------------+
</pre>
<p>Hiç gol atılmayan maçları bulalım;</p>
<pre>
mysql&gt; SELECT * FROM matches m
    -&gt; LEFT JOIN score p2m
    -&gt; ON (m.match_id = p2m.match_id)
    -&gt; WHERE p2m.goals IS NULL;

+----------+--------------------+---------------------+------+-----------+----------+-------+
| match_id | match_name         | match_date          | id   | player_id | match_id | goals |
+----------+--------------------+---------------------+------+-----------+----------+-------+
|        9 | chelsea - beşiktaş | 2012-01-18 21:38:09 | NULL |      NULL |     NULL |  NULL |
+----------+--------------------+---------------------+------+-----------+----------+-------+</pre>
<p>(Inner Join kullansaydık NULL olan satıra ulaşamazdık!)</p>
<p>barcelona &#8211; arsenal maçında 1&#8242;den fazla gol atan oyuncuları bulalım;</p>
<pre>
mysql&gt; SELECT * FROM player p
    -&gt; LEFT JOIN score p2m ON (p.player_id = p2m.player_id)
    -&gt; LEFT JOIN matches m ON (m.match_id = p2m.match_id)
    -&gt; WHERE m.match_name='barcelona - arsenal' AND p2m.goals&gt;1;

+-----------+----------+------+-----------+----------+-------+----------+---------------------+---------------------+
| player_id | fullname | id   | player_id | match_id | goals | match_id | match_name          | match_date          |
+-----------+----------+------+-----------+----------+-------+----------+---------------------+---------------------+
|         1 | messi    |    2 |         1 |        2 |     3 |        2 | barcelona - arsenal | 2012-01-18 21:37:11 |
+-----------+----------+------+-----------+----------+-------+----------+---------------------+---------------------+
</pre>
]]></content:encoded>
			<wfw:commentRss>http://dubluve.net/2012/01/24/left-join-inner-join-example/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mysql Replace Komutu (Command)</title>
		<link>http://dubluve.net/2012/01/17/mysql-replace-komutu-command/</link>
		<comments>http://dubluve.net/2012/01/17/mysql-replace-komutu-command/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 10:22:15 +0000</pubDate>
		<dc:creator>Emre Macit</dc:creator>
				<category><![CDATA[Mysql]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysql replace]]></category>
		<category><![CDATA[mysql replace komutu]]></category>
		<category><![CDATA[replace]]></category>

		<guid isPermaLink="false">http://dubluve.net/?p=757</guid>
		<description><![CDATA[Mysqlde bir tablo içindeki verileri değiştirmek istediğinizde, bunu Update ile yaparız. Topluca eski olan verileri yenileriyle değiştirmek istediğimizde ise bunu yapabilmenin yönetimi mysql replace komutunu kullanmaktır. Özellikle encoding ile ilgili problem yaşayanlar Ç harflerini C ile Ğ harflerini G ile değiştirmek isteyebilirler. Bizim karşılaştığımız durum da bu idi zaten. Nitekim kullanımı çok basit, şöyle: UPDATE [...]]]></description>
			<content:encoded><![CDATA[<p>Mysqlde bir tablo içindeki verileri değiştirmek istediğinizde, bunu Update ile yaparız. Topluca eski olan verileri yenileriyle değiştirmek istediğimizde ise bunu yapabilmenin yönetimi mysql replace komutunu kullanmaktır.</p>
<p>Özellikle encoding ile ilgili problem yaşayanlar Ç harflerini C ile Ğ harflerini G ile değiştirmek isteyebilirler. Bizim karşılaştığımız durum da bu idi zaten. Nitekim kullanımı çok basit, şöyle:</p>
<pre class="php">UPDATE tablo SET metin= REPLACE(metin, 'eski','yeni');</pre>
<p>Burada yeni veriyi bir yerden çekmek istiyorsanız da &#8216;yeni&#8217; yazan yere<br />
select querysi yazabilirsiniz. şöyle :</p>
<pre class="php">UPDATE tablo SET metin= REPLACE(metin, 'eski',Select....);</pre>
]]></content:encoded>
			<wfw:commentRss>http://dubluve.net/2012/01/17/mysql-replace-komutu-command/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mysql bellek tablosu (Mysql Memory Table )</title>
		<link>http://dubluve.net/2011/12/13/mysql-bellek-tablosu-mysql-memory-table/</link>
		<comments>http://dubluve.net/2011/12/13/mysql-bellek-tablosu-mysql-memory-table/#comments</comments>
		<pubDate>Tue, 13 Dec 2011 08:37:47 +0000</pubDate>
		<dc:creator>Emre Macit</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Mysql]]></category>
		<category><![CDATA[max_heap_table_size]]></category>
		<category><![CDATA[msyql heap tablo]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysql bellek tablo]]></category>
		<category><![CDATA[mysql heap table]]></category>
		<category><![CDATA[mysql memory table]]></category>
		<category><![CDATA[mysql memory tablo]]></category>

		<guid isPermaLink="false">http://dubluve.net/?p=544</guid>
		<description><![CDATA[Bu tablo Memory (RAM-bellek üzerinde tutulan) depolama motorudur (ENGINE = MEMORY). Indexlerini varsayılan Hash olarak (karma yapı) tutar. Bu da onları, çok hızlı ve geçici tablo çözümlerinde çok başarılı yapar. Tablo bilgileri yine de hard diskte, .frm dosyasıyla tutulur, ama mysql server kapatılıp açıldığında (ya da bir şekilde kapandığında) içindeki bilgiler tamamen yok olur. Tablonun yapısı [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Bu tablo Memory (RAM-bellek üzerinde tutulan) depolama motorudur (<strong>ENGINE = MEMORY</strong>). Indexlerini varsayılan Hash olarak (karma yapı) tutar. Bu da onları, çok hızlı ve geçici tablo çözümlerinde çok başarılı yapar.</p>
<p style="text-align: justify;">Tablo bilgileri yine de hard diskte, .frm dosyasıyla tutulur, ama mysql server kapatılıp açıldığında (ya da bir şekilde kapandığında) içindeki bilgiler tamamen yok olur. Tablonun yapısı silinmez, yeniden create etmeye gerek yoktur.</p>
<p style="text-align: justify;">Aşağıdaki tabloda test adlı bir memory tablosu oluşturuyoruz. Daha sonra İçindeki verileri , log_table adlı bir tablodan istediğimiz sütunlarını istediğimiz şekilde çekip dolduruyoruz. Daha sonra geçici tabloda, ip sütununu <strong>COUNT</strong> ile saydırıp, down sütununu <strong>AVG</strong> ile ortalamasını alıp döndürüyoruz. İşimiz bittikten sonra da, test memory tablosunu siliyoruz.</p>
<pre name="code" class="php">
mysql&gt; CREATE TABLE test ENGINE=MEMORY
    -&gt;     SELECT ip,SUM(downloads) AS down
    -&gt;     FROM log_table GROUP BY ip;
mysql&gt; SELECT COUNT(ip),AVG(down) FROM test;
mysql&gt; DROP TABLE test;</pre>
<p style="text-align: justify;">* Mysql memory tabloları için ramde veriler küçük bloklar halinde tutulur, ve remde yer açma işini dinamik olarak mysql kendi yapar. Bizim yer açmamıza vb gerek yoktur.</p>
<p style="text-align: justify;">* Memory tablosu, hem hash hem de btree şeklinde indexleri destekler. (Bu indexler hakkında detaylı bilgiyi MYSQL Indexes konusu altında aramanız gerekmektedir, indexler başlı başına önemli bir konudur çünkü) )</p>
<p style="text-align: justify;">Aşağıda 2 farklı indexin kullanım oluşturulma biçimi bulunmaktadır.</p>
<pre name="code" class="php">CREATE TABLE test
    (id INT, INDEX USING HASH (id))
    ENGINE = MEMORY;
CREATE TABLE test
    (id INT, INDEX USING BTREE (id))
    ENGINE = MEMORY;</pre>
<p style="text-align: justify;">* Hash index kullanıp da index kullandığınız sütunda çok fazla aynı bilgi varsa, burada insert komutlarınız yavaşlayabilir. Bu durumda Btree indexi kullanmanız işinizi görebilir deniyor, ama Btree de yapısal olarak hash indexlerinden 5-6 kat daha yavaş olduğu biliniyor. Bu sebeple de, küçük bir optimizasyon ile işleminizi halledeiblirsiniz.</p>
<p style="text-align: justify;">Memory tabloları sabit uzunluklu satır depolama formatında çalışır. <strong>VARCHAR</strong> gibi değişken uzunluğu tipleri sabit bir uzunluk ile depolanır.</p>
<p style="text-align: justify;">Memory tabloları <strong>BLOB</strong> veya <strong>TEXT</strong> tipinde kolonlar içeremez. Bu durum zaten düşünüldüğünde memory tablosu kullanma mantığına da aykırıdır.</p>
<p style="text-align: justify;">Memory tablolarının maximum boyutu, max_heap_table_size sistem değişkeni ile belirlenmiştir, bu da varsayılan olarak 16MB tır. Daha büyük veya küçük istendiğinde bu sistem değişkeni düzenlenerek yapılabilir.</p>
<pre name="code" class="php">mysql&gt; SET max_heap_table_size = 1024*1024;
Query OK, 0 rows affected (0.00 sec)

mysql&gt; CREATE TABLE t1 (id INT, UNIQUE(id)) ENGINE = MEMORY;
Query OK, 0 rows affected (0.01 sec)

mysql&gt; SET max_heap_table_size = 1024*1024*2;
Query OK, 0 rows affected (0.00 sec)

mysql&gt; CREATE TABLE t2 (id INT, UNIQUE(id)) ENGINE = MEMORY;
Query OK, 0 rows affected (0.00 sec)</pre>
]]></content:encoded>
			<wfw:commentRss>http://dubluve.net/2011/12/13/mysql-bellek-tablosu-mysql-memory-table/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mysql tablo kopyalama (mysql copy table)</title>
		<link>http://dubluve.net/2011/12/02/mysql-tablo-kopyalama-mysql-copy-table/</link>
		<comments>http://dubluve.net/2011/12/02/mysql-tablo-kopyalama-mysql-copy-table/#comments</comments>
		<pubDate>Fri, 02 Dec 2011 17:19:09 +0000</pubDate>
		<dc:creator>Emre Macit</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Mysql]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysql copy table]]></category>
		<category><![CDATA[mysql table copy]]></category>
		<category><![CDATA[mysql tablo kopyalama]]></category>

		<guid isPermaLink="false">http://dubluve.net/?p=464</guid>
		<description><![CDATA[Bir çok zaman veritabanı üzerinde bir işlem yapacağımızda, mevcut verileri yedekleme ihtiyacı duyuyoruz. (Şu anda da böyle bir şeye ihtiyaç duymuştuk) Basit seviyeli bir şey olmasına rağmen insanın aklına basit çözüm gelemeyebiliyor. Bizim de aklımıza farklı metodlar geldi, sonra googledan en basit çözümü bulduk. Aşağıdaki komut ile bir tabloyu başka bir tabloya kopyala-yapıştır yapmış oluyorsunuz. [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Bir çok zaman veritabanı üzerinde bir işlem yapacağımızda, mevcut verileri yedekleme ihtiyacı duyuyoruz. (Şu anda da böyle bir şeye ihtiyaç duymuştuk)</p>
<p style="text-align: justify;">Basit seviyeli bir şey olmasına rağmen insanın aklına basit çözüm gelemeyebiliyor. Bizim de aklımıza farklı metodlar geldi, sonra googledan en basit çözümü bulduk.</p>
<p style="text-align: justify;">Aşağıdaki komut ile bir tabloyu başka bir tabloya kopyala-yapıştır yapmış oluyorsunuz.</p>
<pre name="code" class="sql">CREATE TABLE yeni_tablo SELECT * FROM eski_tablo</pre>
<p style="text-align: justify;">Tabi içinde milyonlarca veri varsa, sürekli bu işlemi yapmanızı tavsiye edemeyeceğim. Yine de yedekleme hayat kurtarır diyorum.</p>
<p style="text-align: justify;"><strong> ÖNEMLİ NOT </strong> Bu kopyalanan tabloda, ne primary key, ne index, ne unique key, hiç bir şey kopyalanmamış olduyor. Bu sebeple bu yöntemi sadece hızlı yedekleme amaçlı kullanmanızı tavsiye ederim.</p>
]]></content:encoded>
			<wfw:commentRss>http://dubluve.net/2011/12/02/mysql-tablo-kopyalama-mysql-copy-table/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- This Quick Cache file was built for (  dubluve.net/category/database/mysql/feed/ ) in 0.75488 seconds, on May 20th, 2012 at 2:09 am UTC. -->
<!-- This Quick Cache file will automatically expire ( and be re-built automatically ) on May 20th, 2012 at 3:09 am UTC -->
