<?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>Deec.it &#187; MySQL</title>
	<atom:link href="http://www.deec.it/category/lamp/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.deec.it</link>
	<description>Le Guide Pratiche Dell&#039;Informatica</description>
	<lastBuildDate>Sun, 04 Sep 2011 16:52:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>MySQL Tuning</title>
		<link>http://www.deec.it/2010/02/06/mysql-tuning/</link>
		<comments>http://www.deec.it/2010/02/06/mysql-tuning/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 22:00:38 +0000</pubDate>
		<dc:creator>Luca</dc:creator>
				<category><![CDATA[How-to]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[mysql tuning]]></category>
		<category><![CDATA[ottimizzare mysql]]></category>
		<category><![CDATA[performance mysql]]></category>

		<guid isPermaLink="false">http://www.deec.it/?p=1666</guid>
		<description><![CDATA[



Con l&#8217;installazione di default la configurazione del servizio mysql viene impostata ad un livello &#8220;standard&#8221; che va piu&#8217; o meno bene su tutti i server.
In questo articolo vedremo come ottimizzare il valore associato alle variabili presenti nella configurazione, ottimizzandola in base alla memoria e all&#8217;hardware disponibile sul nostro server.
key_buffer_size
Indica la quantita&#8217; di indici (i file [...]]]></description>
			<content:encoded><![CDATA[<!-- AdSense Now! V1.77 -->
<!-- Post[count: 3] -->
<div class="adsense adsense-leadin" style="text-align:center;margin: 12px;"><script type="text/javascript"><!--
google_ad_client = "pub-5841373120371067";
/* 468x60, creato 22/09/09 M&amp;P */
google_ad_slot = "8731175604";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div><p>Con l&#8217;installazione di default la configurazione del servizio mysql viene impostata ad un livello &#8220;standard&#8221; che va piu&#8217; o meno bene su tutti i server.<br />
In questo articolo vedremo come ottimizzare il valore associato alle variabili presenti nella configurazione, ottimizzandola in base alla memoria e all&#8217;hardware disponibile sul nostro server.</p>
<p><strong>key_buffer_size</strong></p>
<p>Indica la quantita&#8217; di indici (i file con estensione MYI) delle tabelle di tipo MYISAM mantenuti in memoria.<br />
L&#8217;ideale sarebbe quello di poter contenere in RAM tutti i file di questo tipo.<br />
Il valore attribuito a questa variabile non deve superare la meta&#8217; di tutta la RAM dedicata al servizio mysqld.<br />
Se non potete mettere in memoria tutti i file MYI potrete fare questa ottimizzazione:</p>
<p>Accedete nella console di mysql ed eseguite questa query</p>
<blockquote><p>show status like &#8216;%key_read%&#8217;;</p></blockquote>
<p>Dividete il valore di key_read_requests per key_read;<br />
Il risultato deve essere maggiore di 100.</p>
<p>Si imposta nella sezione [mysql] ad es.</p>
<blockquote><p>[mysqld]<br />
key_buffer_size = 64M</p></blockquote>
<p><strong>table_cache</strong></p>
<p>Quando mysql accede ad una tabella, la carica in cache. La migliore delle situazioni sarebbe quella di avere una cache talmente grande da contenere<br />
tutte le tabelle aperte in un dato momento.<br />
Per verificare quante tabelle sono aperte in un determinato istante eseguiamo questa query</p>
<blockquote><p>show status like &#8216;open_tables&#8217;;</p></blockquote>
<p>Analizzando questo valore nel tempo, possiamo valutare i picchi massimi</p>
<p>Possiamo verificare anche quante tabelle sono state aperte dall&#8217;esecuzione del servizio mysql</p>
<blockquote><p>show status like &#8216;opened_tables&#8217;;</p></blockquote>
<p>Avremo modo cosi&#8217; di capire se open_tables e&#8217; &#8220;attendibile&#8221; oppure momentaneamente superiore/inferiore alla media.</p>
<p>Si imposta nella sezione [mysql] ad es.</p>
<p>[mysqld]<br />
table_cache  = NUMERO</p>
<p><strong>thread_concurrency</strong></p>
<p>Questa variabile limita il numero di thread avviati simultaneamente. Il valore da impostare e&#8217; questo</p>
<p>2 * (numero di CPU)</p>
<p>Si imposta nella sezione [mysql] ad es.</p>
<p>[mysqld]<br />
thread_concurrency  = 4</p>
<p><strong>read_rnd_buffer_size</strong></p>
<p>Viene utilizzata a seguito di una query che prevede un ordinamento delle righe, il classico ORDER BY per intenderci.<br />
E&#8217; consigliabile impostare 1Kb per ogni MB di memoria destinata al servizio mysqld.</p>
<p>Si imposta nella sezione [mysql] ad es.</p>
<p>[mysqld]</p>
<p>read_rnd_buffer_size = 256k</p>
<p><strong>tmp_table_size</strong></p>
<p>Il valore associato a questa variabile indica la dimensione massima delle tabelle temporanee create in memoria.<br />
Si riferisce alle tabelle di tipo MyIsam e quando e&#8217; insufficente la tabella verra&#8217; creata sul disco, con conseguente perdita di performance.<br />
Eseguendo questo comando</p>
<blockquote><p>mysqladmin -uroot -pPASSWORD processlist -i1</p></blockquote>
<p>si puo&#8217; verificare se ci sono tabelle temporanee gestite lentamente. Se dovesse essere questo il caso, e&#8217; necessario (memoria permettendo) aumentare tmp_table_size</p>
<p>Si imposta nella sezione [mysql] ad es.</p>
<p>[mysqld]</p>
<p>tmp_table_size = 96M</p>
<p><strong>innodb_buffer_pool_size</strong></p>
<p>Come tmp_table_size ma per le tabelle di tipo InnoDB. Si puo&#8217; impostare questo valore pari al 70/80% della memoria dedicata al servizio mysql</p>
<p><strong>skip-innodb</strong></p>
<p>Se non state utilizzando tabelle di tipo innodb, aggiungete questa direttiva nella sezione [mysqld] della configurazione del servizio</p>
<p><strong>Utilizzare la cache per le query</strong></p>
<p>Per abilitare la cache sulle query impostare</p>
<blockquote><p>query-cache-type = 1</p>
<p>query-cache-size = 16777216</p>
<p>(questo valore e&#8217; espresso in byte)</p></blockquote>
<p>Adesso nella console di mysql eseguite questo:</p>
<blockquote><p>show status like &#8216;%qcache%&#8217;;</p></blockquote>
<p>e guardate il valore di</p>
<blockquote><p>Qcache_free_memory<br />
Qcache_lowmem_prunes</p></blockquote>
<p><em>Qcache_free_memory</em> indica la memoria disponibile che potra&#8217; essere ancora utilizzata per la cache.<br />
Il valore di <em>Qcache_lowmem_prunes</em> viene aumentato ogni qualvolta che viene rimossa una query dalla cache. Se vedete aumentare questo valore molto rapidamente, dovrete aumentare query-cache-size.</p>
<p><em>N.B. query_cache_limit indica la dimensione massima del risultato di una query. Se viene superato quella query non sara&#8217; inserita nella cache</em></p>
<p>Per ripulire la cache bastera&#8217; eseguire questo comando dalla console di mysql</p>
<blockquote><p>RESET QUERY CACHE</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.deec.it/2010/02/06/mysql-tuning/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mysql: Illegal mix of collations</title>
		<link>http://www.deec.it/2009/11/15/mysql-illegal-mix-of-collations/</link>
		<comments>http://www.deec.it/2009/11/15/mysql-illegal-mix-of-collations/#comments</comments>
		<pubDate>Sat, 14 Nov 2009 22:45:04 +0000</pubDate>
		<dc:creator>loade</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[collations]]></category>
		<category><![CDATA[Illegal mix of collations]]></category>
		<category><![CDATA[latin1_bin]]></category>
		<category><![CDATA[latin1_general_ci]]></category>

		<guid isPermaLink="false">http://www.deec.it/?p=2111</guid>
		<description><![CDATA[Un errore che può capitare, quando si effettuano query su due db o due tabelle con una collations differente, è il seguente:
ERROR 1267 (HY000): Illegal mix of collations (latin1_general_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation &#8216;=&#8217;
Questo errore indica che i due campi su cui stiamo effettuando la query hanno una collations differente e non compatibile. Facciamo qualche [...]]]></description>
			<content:encoded><![CDATA[<p>Un errore che può capitare, quando si effettuano query su due db o due tabelle con una collations differente, è il seguente:</p>
<blockquote><p>ERROR 1267 (HY000): Illegal mix of collations (latin1_general_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation &#8216;=&#8217;</p></blockquote>
<p>Questo errore indica che i due campi su cui stiamo effettuando la query hanno una collations differente e non compatibile. Facciamo qualche esempio ecco la nostra tabella:</p>
<blockquote><p>show create table a;</p>
<p>CREATE TABLE `a` (<br />
`campo1` varchar(64) character set latin1 collate latin1_bin NOT NULL default &#8221;<br />
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |</p>
<p>show create table b;</p>
<p>CREATE TABLE `b` (<br />
`campo2` varchar(255) NOT NULL default &#8221;<br />
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |</p></blockquote>
<p>La tabella b non avendo alcuna collations impostata, prenderà quella di default, ovvero:</p>
<blockquote><p>collate latin1_general_ci</p></blockquote>
<p>Ora se andiamo a fare una query che preleva i dati da entrambe le tabelle, otterremo il seguente errore:</p>
<blockquote><p>SELECT *  FROM a,b WHERE campo1 = campo2;</p>
<p>ERROR 1267 (HY000): Illegal mix of collations (latin1_general_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation &#8216;=&#8217;</p></blockquote>
<p>Ora per risolvere il problema forziamo la collate  <strong>latin1_bin</strong> in <strong>latin1_general_ci:</strong></p>
<blockquote><p>ALTER TABLE a character set latin1 collate latin1_general_ci , modify column campo1 varchar(64) character set latin1 collate latin1_general_ci  NOT NULL;</p></blockquote>
<p>A questo punto lo show create table ci mostrerà la nuova collate impostata per il campo campo1 e la query che prima ci restituiva l&#8217;errore ora sarà eseguita correttamente.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.deec.it/2009/11/15/mysql-illegal-mix-of-collations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Abilitare le connessioni da remoto con MySQL server</title>
		<link>http://www.deec.it/2009/09/11/connessioni-da-remoto-con-mysql/</link>
		<comments>http://www.deec.it/2009/09/11/connessioni-da-remoto-con-mysql/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 23:10:34 +0000</pubDate>
		<dc:creator>Luca</dc:creator>
				<category><![CDATA[How-to]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[bind-address]]></category>
		<category><![CDATA[my.cnf]]></category>

		<guid isPermaLink="false">http://www.deec.it/?p=341</guid>
		<description><![CDATA[Nelle distribuzioni linux il servizio MySQL e&#8217; configurato di default per non accettare connessioni da host esterni. Ma come fare per abilitare la connessione da remoto? La procedura e&#8217; molto semplice ed proposta di seguito:
1) Bisogna accedere al server via ssh con utente root e commentare (semplicemente anteponendo il carattere # ad inizio riga) la [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-423" title="mysql" src="http://www.deec.it/wp-content/uploads/2009/09/mysql.jpg" alt="mysql" width="160" height="93" />Nelle distribuzioni linux il servizio MySQL e&#8217; configurato di default per non accettare connessioni da host esterni. Ma come fare per abilitare la connessione da remoto? La procedura e&#8217; molto semplice ed proposta di seguito:</p>
<p>1) Bisogna accedere al server via ssh con utente root e commentare (semplicemente anteponendo il carattere # ad inizio riga) la direttiva &#8216;bind-address&#8217; dalla configurazione del servizio (probabilmente /etc/mysql/my.cnf oppure /etc/my.cnf)</p>
<p>2) Supponendo di voler utilizzare un utente preesistente chiamato &#8220;IlTuoUtente&#8221;, accedendo al database &#8216;mysql&#8217; dovrete impostare il valore &#8216;%&#8217; nel campo host della tabella user.<br />
Cosi&#8217; facendo l&#8217;utente puo&#8217; collegarsi sia da localhost che da remoto. Questo e&#8217; il comando che dovrete digitare:</p>
<blockquote><p>update users set host = &#8216;%&#8217; where user = &#8216;IlTuoUtente&#8217;;</p></blockquote>
<p>3)  La stessa stessa operazione dovra&#8217; essere effettuata per la tabella &#8216;db&#8217;:</p>
<blockquote><p>update db set host = &#8216;%&#8217; where user = &#8216;IlTuoUtente&#8217;;</p></blockquote>
<p>4) Non vi rimane che riavviare il servizio mysql (con il comando &#8216;/etc/init.d/mysql restart&#8217;)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.deec.it/2009/09/11/connessioni-da-remoto-con-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Backup e restore di database MySql</title>
		<link>http://www.deec.it/2009/08/26/backup-e-restore-di-database-mysql/</link>
		<comments>http://www.deec.it/2009/08/26/backup-e-restore-di-database-mysql/#comments</comments>
		<pubDate>Wed, 26 Aug 2009 07:45:03 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[Lamp]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[mysqldump]]></category>
		<category><![CDATA[restore]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://www.deec.it/?p=122</guid>
		<description><![CDATA[Per eseguire il backup  di un database mysql basta eseguire da console il seguente comando:
mysqldump nome_database -u nome_utente -p &#62; dump.sql
Se il database di cui si vuole effettuare il backup si trova su una macchina esterna sulla quale è possibile connetters si deve aggiungere il parametro dell’ host (-h)
mysqldump nome_database -h host(ip o hostname) -u [...]]]></description>
			<content:encoded><![CDATA[<p>Per eseguire il backup  di un database mysql basta eseguire da console il seguente comando:</p>
<blockquote><p><code>mysqldump nome_database -u nome_utente -p &gt; dump.sql</code></p></blockquote>
<p>Se il database di cui si vuole effettuare il backup si trova su una macchina esterna sulla quale è possibile connetters si deve aggiungere il parametro dell’ host (-h)</p>
<blockquote><p><code>mysqldump nome_database -h host(ip o hostname) -u nome_utente -p &gt; dump.sql</code></p></blockquote>
<p>Una volta che si ha a disposizione il backup del database se si deve fare il restore il comando da eseguire è il seguente:</p>
<blockquote><p><code>mysql &lt; dump.sql -u nomeutente -p</code></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.deec.it/2009/08/26/backup-e-restore-di-database-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shell script per fare un backup incrementale del database MySQL</title>
		<link>http://www.deec.it/2009/08/23/shell-script-per-fare-un-backup-incrementale-del-database/</link>
		<comments>http://www.deec.it/2009/08/23/shell-script-per-fare-un-backup-incrementale-del-database/#comments</comments>
		<pubDate>Sun, 23 Aug 2009 09:30:16 +0000</pubDate>
		<dc:creator>Luca</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Programmazione e scripting]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[mysqldump]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://www.deec.it/?p=56</guid>
		<description><![CDATA[Questo script puo&#8217; essere eseguito tramite il cron di sistema per fare un backup incrementale di un database. Nel nostro esempio verra fatto un dump del databse chiamato DATABASE_UNO e una copia di una sola tabella del database DATABASE_DUE. Tutti i backup piu&#8217; vecchi di 3 mesi verranno cancellati:

#!/bin/bash
DATA=`/bin/date +&#8221;Giorno_%d-%m-%y_Ora_%H-%M&#8221;`
/usr/bin/mysqldump -uUTENTE -pPASSWORD DATABASE_UNO &#62; /var/backupdb/DATABASE_UNO_$DATA.sql
/usr/bin/mysqldump [...]]]></description>
			<content:encoded><![CDATA[<p>Questo script puo&#8217; essere eseguito tramite il cron di sistema per fare un backup incrementale di un database. Nel nostro esempio verra fatto un dump del databse chiamato DATABASE_UNO e una copia di una sola tabella del database DATABASE_DUE. Tutti i backup piu&#8217; vecchi di 3 mesi verranno cancellati:</p>
<blockquote><p>
#!/bin/bash</p>
<p>DATA=`/bin/date +&#8221;Giorno_%d-%m-%y_Ora_%H-%M&#8221;`</p>
<p>/usr/bin/mysqldump -uUTENTE -pPASSWORD DATABASE_UNO &gt; /var/backupdb/DATABASE_UNO_$DATA.sql<br />
/usr/bin/mysqldump -uUTENTE -pPASSWORD DATABASE_DUE TABELLA &gt; /var/backupdb/TABELLA_$DATA.sql</p>
<p>chmod 600 /var/backupdb/ -R</p>
<p>/usr/bin/find /var/backupdb/ -type f -mtime +93 -exec rm -f {} \;</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.deec.it/2009/08/23/shell-script-per-fare-un-backup-incrementale-del-database/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Password di MySQL dimenticata</title>
		<link>http://www.deec.it/2009/08/22/password-di-mysql-dimenticata/</link>
		<comments>http://www.deec.it/2009/08/22/password-di-mysql-dimenticata/#comments</comments>
		<pubDate>Sat, 22 Aug 2009 14:42:36 +0000</pubDate>
		<dc:creator>Luca</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[flush privileges]]></category>
		<category><![CDATA[mysql restart]]></category>
		<category><![CDATA[mysqld_safe]]></category>
		<category><![CDATA[password]]></category>
		<category><![CDATA[skip-grant-tables]]></category>

		<guid isPermaLink="false">http://www.deec.it/?p=5</guid>
		<description><![CDATA[Avete dimenticato la password impostata per l&#8217;utente &#8220;root&#8221; di MySQL?&#8230; Nessun problema!
Basta accedere via ssh sul server dove e&#8217; in esecuzione mysqld ed eseguire questa procedura:
1) Fermare il servizio in esecuzione
/etc/init.d/mysql stop
2) Avviare il mysql server con l&#8217;opzione &#8211;skip-grant-tables
mysqld_safe &#8211;skip-grant-tables &#38;
3) Connettersi al database in questo modo
mysql -u root
4) Digitare questi comandi
mysql&#62; use mysql;
mysql&#62; update [...]]]></description>
			<content:encoded><![CDATA[<p>Avete dimenticato la password impostata per l&#8217;utente &#8220;root&#8221; di MySQL?&#8230; Nessun problema!<br />
Basta accedere via ssh sul server dove e&#8217; in esecuzione mysqld ed eseguire questa procedura:</p>
<p>1) Fermare il servizio in esecuzione</p>
<blockquote><p>/etc/init.d/mysql stop</p></blockquote>
<p>2) Avviare il mysql server con l&#8217;opzione &#8211;skip-grant-tables</p>
<blockquote><p>mysqld_safe &#8211;skip-grant-tables &amp;</p></blockquote>
<p>3) Connettersi al database in questo modo</p>
<blockquote><p>mysql -u root</p></blockquote>
<p>4) Digitare questi comandi</p>
<blockquote><p>mysql&gt; use mysql;<br />
mysql&gt; update user set password=PASSWORD(&#8217;LaTuaNuovaPassword&#8217;) where User=&#8217;root&#8217;;<br />
mysql&gt; flush privileges;<br />
mysql&gt; quit</p></blockquote>
<p>Adesso non vi rimane che riavviare il servizio (/etc/init.d/mysql restart)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.deec.it/2009/08/22/password-di-mysql-dimenticata/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

