<?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>Leoman's blog &#187; mysql</title>
	<atom:link href="http://leoman.gen.tr/tag/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://leoman.gen.tr</link>
	<description>bi blög</description>
	<lastBuildDate>Mon, 28 Feb 2011 06:55:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Debian üzerinden MySQL back-end&#8217;e sahip Bind yapılandırmak</title>
		<link>http://leoman.gen.tr/2010/06/debian-uzerinden-mysql-back-ende-sahip-bind-yapilandirmak/</link>
		<comments>http://leoman.gen.tr/2010/06/debian-uzerinden-mysql-back-ende-sahip-bind-yapilandirmak/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 17:14:26 +0000</pubDate>
		<dc:creator>leoman</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Sistem Yönetimi]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://leoman.gen.tr/?p=168</guid>
		<description><![CDATA[Dağıtık projelerde genellikle yaşanılan sıkıtılardan biri kullanmış olduğunuz yazılımların yapıları gereği bir API&#8217;ye sahip olmamasından kaynaklanmaktadır. Bununla beraber yazılımların izin verdiği derece alt arayüzler ve genellikle ek yazılımlar üreterek çözümler geliştirilir. Örneğin multi node&#8217;dan oluşan bir web-host farm&#8217;ında her noktadan gelecek değişilikleri bind üzerinde güncellemek/eklemek istiyorsunuz. Bunun için ya bir veritabanı üzerinden çalışan bir queue [...]]]></description>
			<content:encoded><![CDATA[<p>Dağıtık projelerde genellikle yaşanılan sıkıtılardan biri kullanmış olduğunuz yazılımların yapıları gereği bir API&#8217;ye sahip olmamasından kaynaklanmaktadır. Bununla beraber yazılımların izin verdiği derece alt arayüzler ve genellikle ek yazılımlar üreterek çözümler geliştirilir.</p>
<p>Örneğin multi node&#8217;dan oluşan bir web-host farm&#8217;ında her noktadan gelecek değişilikleri bind üzerinde güncellemek/eklemek istiyorsunuz. Bunun için ya bir veritabanı üzerinden çalışan bir queue mantığı ile yönetmeniz ya da bu işi yapan bir RPC Interface ile gerçekleştirmeniz gerekecektir.</p>
<p>Bunun yerine diğer bir seçenek ise Bind&#8217;ın config dosyaları üzerinde değişiklik yapmaktan ziyade daha pratik bir uygulamaile host detay kayıtlarının MySQL üzerinde tutulduğu ve anlık olarak buradan değiştirildiği bir DNS sunucuya sahip olmak olabilir.</p>
<p>Bunun için sourceforge üzerinde yayınlan <a href="http://mysql-bind.sourceforge.net/">mysql-bind</a> adlı projeyi kullanabiliriz. Debian bir sistem üzerinde yapmamız gereken adımlar şu adımlardan oluşmaktadır;</p>
<p>İşleme gerekli paketlerin yüklenmesi ile başlayalım;</p>
<p><code lang="bash">cd /usr/src<br />
apt-get install mysql-server libmysqlclient15-dev<br />
apt-get install build-essential<br />
apt-get install libssl-dev libtool libdb-dev libldap2-dev libxml2-dev libcap2-dev hardening-wrapper libkrb5-dev debhelper fakeroot bison</code></p>
<p>Bu işlem sırasında MySQL size bir root parolası soracaktır. Belirlemiş olduğunuz bu parola tüm MySQL yönetimsel işlemlerinde kullanılacağından sağlam ve unutmayacağınız bir parola vermeniz gerekmektedir.</p>
<p>Bundan bir sonraki adımda bind source ve bind-mysql&#8217;i edinmek;</p>
<p><code lang="bash">apt-get source bind9<br />
wget http://downloads.sourceforge.net/project/mysql-bind/mysql-bind/mysql-bind-0.2%20src/mysql-bind.tar.gz?use_mirror=garr<br />
tar zxf mysql-bind.tar.gz<br />
</code></p>
<p>mysql-bind kodunu bind&#8217;a ekliyoruz;</p>
<p><code lang="bash">cd mysql-bind<br />
cp mysqldb.c ../bind9-9.5.1.dfsg.P3/bin/named/<br />
cp mysqldb.h ../bind9-9.5.1.dfsg.P3/bin/named/include/named/<br />
cd ../bind9-9.5.1.dfsg.P3/<br />
</code></p>
<p>Bind&#8217;a Database driver&#8217;ını ekelemek için gerekli bilgileri MySQL&#8217;den almamız gerekiyor. Bu komutların vermiş olduğu çıktıları bir kenara not etmemiz gerekmektedir.</p>
<p><code lang="bash">mysql_config --cflags<br />
mysql_config --libs<br />
cd ../bind9-9.5.1.dfsg.P3/<br />
nano bin/named/Makefile.in<br />
</code></p>
<p>Açılan dosyamız içerisinde DBDRIVER_OBJS yazan satıra gitmemiz gerekiyor. Bu satırda yer alan değişkenleri aşağıdaki gibi doldurmamız gerekiyor;</p>
<p><code lang="c"><br />
DBDRIVER_OBJS =<br />
DBDRIVER_SRCS =<br />
DBDRIVER_INCLUDES =<br />
DBDRIVER_LIBS =</code></p>
<p><code lang="c"><br />
DBDRIVER_OBJS = mysqldb.@O@<br />
DBDRIVER_SRCS = mysqldb.c<br />
DBDRIVER_INCLUDES = -I'/usr/include/mysql' //mysql_config --cflags ciktisi<br />
DBDRIVER_LIBS = -L'/usr/lib/mysql' -lmysqlclient //mysql_config --libs ciktisi<br />
</code></p>
<p>dosyayı kaydederek kapatıyoruz.</p>
<p>Bir sonraki aşamada ise bind&#8217;ın MySQL bağlantısını açabilmesini sağlamak için gerekli eklemeleri bin/named/main.c içinde değişiklik yapmamız gerekiyor.</p>
<p><code lang="bash"><br />
nano bin/named/main.c<br />
</code></p>
<p>Dosya içerisinde öncelikle mysqldb header dosyasının dahil olmasını ardından ns_server_create fonksiyonunun çağırıldığı satırın öncesine mysqldb_init(); ekleyerek veritabanı bağlantısının yapılmasını, ns_server_destroy fonsksiyonundan hemen sonraki satırda mysqldb_clear(); ile açılan bağlantının kapatılmasını sağlamamız gerekiyor.</p>
<p><code lang="c">#include <dns/view.h><br />
/*<br />
*<br />
*<br />
*/</p>
<p>#include <dst/result.h></p>
<p>#include "bin/named/include/named/mysqldb.h"</p>
<p>/*<br />
*<br />
*<br />
*/</p>
<p>#endif</p>
<p>mysqldb_init();<br />
ns_server_create(ns_g_mctx, &amp;ns_g_server);<br />
}</p>
<p>/*<br />
*<br />
*<br />
*<br />
*/</p>
<p>destroy_managers();</p>
<p>ns_server_destroy(&#038;ns_g_server);<br />
mysqldb_clear();</p>
<p>ns_builtin_deinit();<br />
</code></p>
<p>
Artık hazırlamış olduğumuz yapılandırmayı bir debian paketi haline getirebilir ve oluşturduğumuz paketleri yükleyebiliriz.
</p>
<p><code lang="bash"><br />
dpkg-buildpackage -rfakeroot -b<br />
cd ..<br />
dpkg -i *.deb<br />
</code></p>
<p>Bu işlemden sonra bind&#8217;ı durdurarak MySQL üzerinde gerekli kullanıcı ve tablolaları yaratıroyuruz;</p>
<p><code lang="bash"><br />
/etc/init.d/bind stop<br />
mysql -u root -p<br />
</code></p>
<p><code lang="sql"><br />
CREATE DATABASE dns;<br />
CREATE USER 'dnsuser'@'localhost' IDENTIFIED BY 'password';<br />
GRANT SELECT ON dns.* TO 'dnsuser'@'localhost';</p>
<p>CREATE TABLE mydomains (<br />
name varchar(255) default NULL,<br />
ttl int(11) default NULL,<br />
rdtype varchar(255) default NULL,<br />
rdata varchar(255) default NULL<br />
) TYPE=MyISAM;</p>
<p>INSERT INTO mydomains VALUES ('mydomain.com', 259200, 'SOA', 'mydomain.com. www.mydomain.com. 200309181 28800 7200 86400 28800');<br />
INSERT INTO mydomains VALUES ('mydomain.com', 259200, 'NS', 'ns0.mydomain.com.');<br />
INSERT INTO mydomains VALUES ('mydomain.com', 259200, 'NS', 'ns1.mydomain.com.');<br />
INSERT INTO mydomains VALUES ('mydomain.com', 259200, 'MX', '10 mail.mydomain.com.');<br />
INSERT INTO mydomains VALUES ('ns0.mydomain.com', 259200, 'A', '192.168.1.1');<br />
INSERT INTO mydomains VALUES ('ns1mydomain.com', 259200, 'A', '192.168.1.1');<br />
INSERT INTO mydomains VALUES ('www.mydomain.com', 259200, 'A', '192.168.1.1');<br />
INSERT INTO mydomains VALUES ('mydomain.com', 259200, 'A', '192.168.1.1');<br />
</code></p>
<p>
Hem kullanacağımız veritabanı hem de örnek bir domain için gerekli kayıtları oluşturmuş olduk. Artık sadece named.conf&#8217;a bu domain&#8217;i belirterek bind&#8217;ı başlatmamız yeterli olacaktır.
</p>
<p><code lang="bash"><br />
zone "mydomain.com" {<br />
type master;<br />
notify no;<br />
database "mysqldb dns mydomains localhost dnsuser password";<br />
};<br />
</code></p>
<p>Konsoldan nslookup ile sorguladığınızda dns sunucunuzun verdiği sonuçları kontrol edebilirsiniz;</p>
<p><code lang="bash"><br />
&gt;nslookup<br />
&gt;server 127.0.0.1<br />
Default server: 127.0.0.1<br />
Address: 127.0.0.1#53<br />
&gt;www.mydomain.com<br />
Server:         127.0.0.1<br />
Address:        127.0.0.1#53</code></p>
<p>Non-authoritative answer:<br />
Name:   www.mydomain.com<br />
Address: 192.168.1.1<br />
</code></p>
<p>
Ve işte artık zone kayıtlarını MySQL üzerinde tutan bir bind sunucuya sahip durumdayız.</p>
<p><strong>Not: </strong></p>
<ul>
<li>Boot sırasında MySQL sunucunun bind'tan önce başlamak zorunda olduğunu unutmayınız.</li>
<li>Çıkabilecek bind açıklarına karşı bind updatelerini kesinlikle takip etmenizi öneririm.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://leoman.gen.tr/2010/06/debian-uzerinden-mysql-back-ende-sahip-bind-yapilandirmak/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL&#8217;de karakter seti problemi yoktur!</title>
		<link>http://leoman.gen.tr/2009/06/mysqlde-karakter-seti-problemi-yoktur/</link>
		<comments>http://leoman.gen.tr/2009/06/mysqlde-karakter-seti-problemi-yoktur/#comments</comments>
		<pubDate>Wed, 10 Jun 2009 16:44:57 +0000</pubDate>
		<dc:creator>leoman</dc:creator>
				<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Sistem Yönetimi]]></category>
		<category><![CDATA[charset]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[nasıl]]></category>
		<category><![CDATA[problem]]></category>

		<guid isPermaLink="false">http://leoman.gen.tr/?p=64</guid>
		<description><![CDATA[Bir çok insan tarafından şu sözleri duyuyorum;  &#8220;MySQL&#8217;de veritabanı aktarınca karakter problemi çıkıyor.&#8221;, &#8220;MySQL&#8217;de karakter seti problemi var.&#8221; Hayır efendim MySQL&#8217;de karakter seti problemi yoktur, MySQL&#8217;in huyunu suyunu bilmeyen insan vardır. MySQL veritabanı çalışmasında iki tane farklı karakter seti kullanır. Bunlardan birincisi veritabanı motoruna (database engine; MyISAM, InnoDB) verilir. İkincil olarak bağlantı karakter setidir ve [...]]]></description>
			<content:encoded><![CDATA[<p>Bir çok insan tarafından şu sözleri duyuyorum;  &#8220;MySQL&#8217;de veritabanı aktarınca karakter problemi çıkıyor.&#8221;, &#8220;MySQL&#8217;de karakter seti problemi var.&#8221;</p>
<p>Hayır efendim MySQL&#8217;de karakter seti problemi yoktur, MySQL&#8217;in huyunu suyunu bilmeyen insan vardır.</p>
<p>MySQL veritabanı çalışmasında iki tane farklı karakter seti kullanır. Bunlardan birincisi veritabanı motoruna (database engine; MyISAM, InnoDB) verilir. İkincil olarak bağlantı karakter setidir ve MySQL Client&#8217;a verilir.</p>
<p>Öntanımlı MySQL kurulumlarında (Örneğin; Distro repolarından, cPanel, Plesk, vb. hosting otomasyon yazılımları ile)  bağlantı ve veritabanı karakter seti latin1 olarak gelmektedir.</p>
<p>En sık yapılan hatayı şöyle basit bir hatadır. Kişi gider veritabanını UTF-8 olarak yaratır. Sonra PHP ile sadece bağlanır ve sürekli veri yazar fakat bu veriyi yazdıran zat-ı muhterem bu sunucuya bağlantı sırasında MySQL Client&#8217;ın kullandığı karakter seti merak etmez. Bunu irdelemediği için de UTF-8 veritabanına Latin1 ile bağlanır ve verileri böyle yazar. Sonuç! absürt karakterlere sahip bir veritabanı.</p>
<p>Ne yapıyormuşuz demek ki, veritabanını istediğimiz karakter seti ile yaratıyormuşuz, daha sonra bağlanırken de veritabanının sahip olduğu karakter seti ile bağlanıyormuşuz. Evet tam olarak böyle.</p>
<p>Mesela UTF-8 bir veritabanı yarattığımızı varsayalım. Buna bağlanırken kesinlikle şunu yapmıyoruz;<br />
<code lang="php"><br />
mysql_connect("server","kullanici","sifre");<br />
mysql_select_db("veritabani");<br />
mysql_query("insert into tablo ('a','b') values ('ÇÖPĞÖÜĞÜ','İŞÜĞÜMÖMÖM')");<br />
</code><br />
Bunun yerine; bağlantıdan hemen sonra bir seferlik;<br />
<code lang="php"><br />
mysql_connect("server","kullanici","sifre");<br />
mysql_select_db("veritabani");<br />
mysql_query("SET NAMES UTF8");<br />
mysql_query("SET CHARACTER SET UTF8");</p>
<p>mysql_query("insert into tablo ('a','b') values ('ÇÖPĞÖÜĞÜ','İŞÜĞÜMÖMÖM')");<br />
</code><br />
durumu MySQL&#8217;e bildiriyoruz.</p>
<p>Tabi ki bir projede 50 yerde bağlantı kuranlar bu noktada OOP&#8217;nin neden varolduğunu anlayabilirler.</p>
<p>- &#8220;Ee bilmem ne SQL Server bunu otomatik seçiyormuş&#8221;.</p>
<p>- Peki multi collation olan bu sistemde farklı farklı tablolar için ne yapmayı düşünüyorsun? diye sormazlar mı kişiye.</p>
<p>Önemli olan nasıl yediğin değil, o yoğurdu yemek!</p>
]]></content:encoded>
			<wfw:commentRss>http://leoman.gen.tr/2009/06/mysqlde-karakter-seti-problemi-yoktur/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

