<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Supporting Open Source weblog: Tag mysql</title>
    <link>http://blog.sos.be/articles/tag/mysql?tag=mysql</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>mysql: systeem info opvragen</title>
      <description>&lt;p&gt;&lt;a href="https://blog.sos.be/articles/2007/02/05/mysql-getting-system-info"&gt;English version of this quickref&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Kort overzicht van de meest nuttige &lt;code&gt;show&lt;/code&gt; commando&amp;#8217;s voor het opvragen van systeem informatie:&lt;/p&gt;


&lt;pre&gt;
pager less;

show databases;

show tables;

show create database|table database|table;

show [full] processlist; (\G)

show table status;

show status;
show engine innodb status; (\G)

show privileges;
show grants;

show variables;

show warnings;
show error; 
&lt;/pre&gt;

	&lt;p&gt;&lt;strong&gt;Opmerking:&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;Output voor de &lt;code&gt;show table status&lt;/code&gt;:&lt;/p&gt;


	&lt;p&gt;Voor &lt;strong&gt;innodb&lt;/strong&gt;: InnoDB free: ... geeft de vrije ruimte in de tablespace.&lt;/p&gt;</description>
      <pubDate>Mon, 05 Feb 2007 17:00:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:44384f41-f5a9-4beb-a8ed-c80e7333e6b8</guid>
      <author>Paul Verreth</author>
      <link>http://blog.sos.be/articles/2007/02/05/mysql-systeem-info-opvragen</link>
      <category>quick refs</category>
      <category>mysql</category>
    </item>
    <item>
      <title>mysql: getting system info</title>
      <description>&lt;p&gt;&lt;a href="https://blog.sos.be/articles/2007/02/05/mysql-systeem-info-opvragen"&gt;Nederlandse versie van dit artikel&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Shortlist of the most useful &lt;code&gt;show&lt;/code&gt; command&amp;#8217;s:&lt;/p&gt;


&lt;pre&gt;
pager less;

show databases;

show tables;

show create database|table database|table;

show [full] processlist; (\G)

show table status;

show status;
show engine innodb status; (\G)

show privileges;
show grants;

show variables;

show warnings;
show error; 
&lt;/pre&gt;

	&lt;p&gt;&lt;strong&gt;Attention:&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;Output from &lt;code&gt;show table status&lt;/code&gt;:&lt;/p&gt;


	&lt;p&gt;For the &lt;strong&gt;innodb&lt;/strong&gt; engine: &lt;code&gt;InnoDB free: ...&lt;/code&gt; : free space in the tablespace.&lt;/p&gt;</description>
      <pubDate>Mon, 05 Feb 2007 17:00:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:2b0faf19-d5a5-43e2-b551-bf183adaca60</guid>
      <author>Paul Verreth</author>
      <link>http://blog.sos.be/articles/2007/02/05/mysql-getting-system-info</link>
      <category>quick refs</category>
      <category>mysql</category>
    </item>
    <item>
      <title>Mysql, serial en foreign keys</title>
      <description>&lt;p&gt;Bij het gebruik van foreign keys is het van belang dat beide velden hetzelfde zijn.&lt;/p&gt;


	&lt;p&gt;In mysql is &lt;em&gt;serial&lt;/em&gt; hetzelfde als &lt;em&gt;bigint unsigned not null auto_increment unique&lt;/em&gt;. Het is dan ook belangrijk dat de foreign key een &lt;em&gt;bigint unsigned&lt;/em&gt; is.&lt;/p&gt;&lt;pre&gt;
create table ouder (id serial,

tekst text,

primary key (id)

);
&lt;/pre&gt;

&lt;pre&gt;
create table kind (id int,

tekst text,

ouder_id bigint unsigned,

foreign key (ouder_id) references  ouder (id) );
&lt;/pre&gt;

	&lt;p&gt;&lt;strong&gt;Zoniet&lt;/strong&gt; komt er volgende &lt;strong&gt;foutmelding&lt;/strong&gt;:&lt;/p&gt;


&lt;pre&gt;
ERROR 1005 (HY000): Can't create table 'kind.frm' (errno: 150)
&lt;/pre&gt;

	&lt;p&gt;&lt;strong&gt;Opgelet&lt;/strong&gt;: werkt enkel met &lt;em&gt;innodb&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;Dit is op te lossen met &lt;code&gt;create table dada (... ...) engine=innodb;&lt;/code&gt;, maar beter is &lt;code&gt;default-table-type=innodb&lt;/code&gt; te plaatsen in &lt;code&gt;my.cnf&lt;/code&gt;.&lt;/p&gt;</description>
      <pubDate>Fri, 19 Jan 2007 15:18:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:b4c5fdb5-243f-4a46-9e23-bb7035d20417</guid>
      <author>Paul Verreth</author>
      <link>http://blog.sos.be/articles/2007/01/19/mysql-serial-en-foreign-keys</link>
      <category>tips</category>
      <category>quick refs</category>
      <category>mysql</category>
    </item>
    <item>
      <title>mysql auto_increment of serial</title>
      <description>&lt;p&gt;Sinds de recentse versies van mysql kan je een &lt;em&gt;auto_increment&lt;/em&gt; aanmaken met &lt;code&gt;serial&lt;/code&gt; en hoeft &lt;code&gt;BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE&lt;/code&gt; dus niet meer.&lt;/p&gt;


&lt;pre&gt;
create table probeer (

id serial,

een char(50),

twee char(50));
&lt;/pre&gt;&lt;p&gt;Dat geeft dus:&lt;/p&gt;


&lt;pre&gt;
 describe probeer;

+-------+---------------------+------+-----+---------+----------------+

| Field | Type                | Null | Key | Default | Extra          |

+-------+---------------------+------+-----+---------+----------------+

| id    | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |

| een   | char(50)            | YES  |     | NULL    |                |

| twee  | char(50)            | YES  |     | NULL    |                |

+-------+---------------------+------+-----+---------+----------------+

&lt;/pre&gt;

	&lt;p&gt;De waarde van de laatste kan je opvragen na een insert.&lt;/p&gt;


&lt;pre&gt;
insert into probeer (een,twee) values ('azerty','qwerty');

...

insert into probeer (een,twee) values ('azerty','qwerty');

select last_insert_id();
&lt;/pre&gt;

	&lt;p&gt;Maar &lt;strong&gt;opgelet&lt;/strong&gt;, &lt;code&gt;last_insert_id()&lt;/code&gt; geeft enkel de waarde voor de insert statement die er net aan vooraf gaat. Op deze manier is het dus niet mogelijk om de waarde voor een specifieke tabel te weten te komen.&lt;/p&gt;


	&lt;h4&gt;table status&lt;/h4&gt;


	&lt;p&gt;Hiervoor heb je &lt;code&gt;show table status&lt;/code&gt; nodig.&lt;/p&gt;


&lt;pre&gt;
show table status like 'probeer';
&lt;/pre&gt;

	&lt;p&gt;Hier zal de &lt;code&gt;auto_increment&lt;/code&gt; kolom de waarde geven voor de &lt;strong&gt;volgende&lt;/strong&gt; insert.&lt;/p&gt;


	&lt;h4&gt;auto_increment waarde zetten&lt;/h4&gt;


	&lt;p&gt;Je kan de auto_increment waarde ook expliciet zetten, bij het aanmaken van de tabel, maar ook met alter table:&lt;/p&gt;


&lt;pre&gt;
alter table probeer auto_increment = 100
&lt;/pre&gt;

	&lt;p&gt;Maar &lt;strong&gt;opgelet&lt;/strong&gt;, je kan ze niet kleiner zetten dan de hoogste waarde. Er zal geen foutmelding komen.&lt;/p&gt;


	&lt;h4&gt;auto_increment herschikken&lt;/h4&gt;


	&lt;p&gt;Je kan een &lt;em&gt;auto_increment&lt;/em&gt; herschikken, als er gaten in de reeks zitten bijvoorbeeld, door de kolom te droppen en later terug bij te voegen, maar &lt;strong&gt;opgelet&lt;/strong&gt;, bij &lt;em&gt;foreign keys&lt;/em&gt; zal dat problemen geven!&lt;/p&gt;


&lt;pre&gt;
alter table probeer drop column id;

alter table probeer add column id serial first;
&lt;/pre&gt;

	&lt;h4&gt;auto_increment op nul zetten&lt;/h4&gt;


	&lt;p&gt;In vroegere versies van mysql zou &lt;code&gt;delete from&lt;/code&gt;, de waarde op nul zetten, maar dit is niet meer het geval. Maar met &lt;code&gt;truncate table&lt;/code&gt; gebeurt dit wel.&lt;/p&gt;


	&lt;h4&gt;Extra info met information_schema&lt;/h4&gt;


	&lt;p&gt;Om auto_increment te vergelijken met het aantal rows bijvoorbeeld:&lt;/p&gt;


&lt;pre&gt;
select table_name, auto_increment, table_rows from information_schema.tables where table_schema = 'db' and auto_increment &amp;gt; 1;

| table_name | auto_increment | table_rows |
  tab1            15                   0
  section         23                   20
...
  state           20                   20

&lt;/pre&gt;</description>
      <pubDate>Fri, 19 Jan 2007 14:37:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:c9269b38-2771-42f6-bbc4-bd8636f3de84</guid>
      <author>Paul Verreth</author>
      <link>http://blog.sos.be/articles/2007/01/19/mysql-auto_increment-of-serial</link>
      <category>artikels</category>
      <category>mysql</category>
    </item>
    <item>
      <title>MySQL Activity Report, een database tuning hulpprogramma</title>
      <description>&lt;p&gt;De MySQL Activity report package is een tool die MySQL database administrators toe laat om verschillende database paramaters en variabelen te loggen. Deze rapporten kunnen bijvoorbeeld gebruikt worden voor server monitoring en performance tuning.&lt;/p&gt;&lt;p&gt;De belangrijkste component van het &lt;strong&gt;MySQL Activity Report&lt;/strong&gt; is &lt;strong&gt;mysqlard&lt;/strong&gt;. Deze daemon vraagt de status variabelen van een MySQL server op en stockeert deze in een Round Robin Database.&lt;/p&gt;


	&lt;p&gt;De package bevat verder nog een script om grafieken te maken op basis van de verzamelde gegevens, voorbeeld cron scripts om de grafieken te archiveren en een voorbeeld php script dat deze grafieken toont en automatisch enkele tuning tips geeft.&lt;/p&gt;


	&lt;p&gt;Een voorbeeld van de output van het php script vind je hier. Het voorbeeld is een snapshot van de database server van een klant waar op het niveau van de systeem variabelen al heel wat getuned is op basis van de input van mysqlard. De performantie kan echter nog verbeterd worden door meer indexen aan te maken en ervoor te zorgen dat de queries via deze indexen verlopen.&lt;/p&gt;


	&lt;p&gt;De package wordt verspreid onder de &lt;span class="caps"&gt;GPL&lt;/span&gt;.&lt;/p&gt;


	&lt;h3&gt;Afhankelijkheden&lt;/h3&gt;


	&lt;p&gt;Voor de opslag van de data in &lt;span class="caps"&gt;RRD&lt;/span&gt;&amp;#8217;s wordt gebruik gemaakt van Toby Oetiker&amp;#8217;s rrdtool library en het script om de grafieken te maken gebruikt het rrdtool programma.&lt;/p&gt;


	&lt;p&gt;De home page van rrdtool is : &lt;a href="http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/"&gt;rrdtool&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Het spreekt voor zich dat ook MySQL een afhankelijkheid is. Waarom zou je deze package willen installeren zonder MySQL ? Maar hou er rekening mee dat mysqlard gebruik maakt van de MySQL client library welke niet per se geïnstalleerd hoeft te zijn om MySQL server te draaien.
Download&lt;/p&gt;


	&lt;p&gt;De package kan vanaf deze site gedownload worden. Er is een aparte &lt;a href="/pages/downloads/mysqlar"&gt;download&lt;/a&gt; pagina voorzien waar je steeds de laatste versie van de package kan vinden.&lt;/p&gt;


	&lt;p&gt;Kies het package formaat dat het best past bij je systeem. Je kan kiezen tussen tar.gz, i386 &lt;span class="caps"&gt;RPM&lt;/span&gt; (gemaakt op &lt;a href="http://fedora.redhat.com"&gt;Fedora&lt;/a&gt;) en source &lt;span class="caps"&gt;RPM&lt;/span&gt;.&lt;/p&gt;


	&lt;h3&gt;Installatie&lt;/h3&gt;


	&lt;p&gt;Als je een &lt;span class="caps"&gt;RPM&lt;/span&gt; gebaseerde i386 distributie gebruikt, bijvoorbeeld Redhat, Fedora, Mandrake of SuSE, volstaat het om de binaire &lt;span class="caps"&gt;RPM&lt;/span&gt; te downloaden en vervolgens te installeren met het rpm commando of de grafische tool die je meestal gebruikt.&lt;/p&gt;


	&lt;p&gt;Om ervoor te zorgen dat de daemon opstart bij een reboot hoef je enkel&lt;/p&gt;


&lt;pre&gt;
chkconfig --level 345 mysqlard on
&lt;/pre&gt;

	&lt;p&gt;uit te voeren. Let er wel op dat mysqlard opstart nadat MySQL gestart is, de daemon kan een restart van MySQL verdragen, maar het is wel nodig dat MySQL werkt bij de start van mysqlard.&lt;/p&gt;


	&lt;p&gt;Als je een &lt;span class="caps"&gt;RPM&lt;/span&gt; systeem hebt met een andere architectuur of indien je problemen hebt met de op Fedora aangemaakte binaire &lt;span class="caps"&gt;RPM&lt;/span&gt; kan je ook de source &lt;span class="caps"&gt;RPM&lt;/span&gt; downloaden en deze hercompileren met de&amp;#8212;rebuild optie van rpm of rpmbuild.&lt;/p&gt;


	&lt;p&gt;Let er wel op dat je dan de MySQL development packages nodig hebt, mysql-devel-3.xx-1.&lt;/p&gt;


	&lt;p&gt;Voor diegenen die geen &lt;span class="caps"&gt;RPM&lt;/span&gt; gebaseerd systeem gebruiken is er ook een tarball beschikbaar. Om via deze weg te installeren moet de, in Open Source kringen weliswaar, gebruikelijke configure &amp;#8211; make &amp;#8211; make install cyclus doorlopen worden. Als voorbeeld hieronder de commando&amp;#8217;s zoals die gebruikt werden om de rpms te bouwen.&lt;/p&gt;


&lt;pre&gt;
tar xzvf myslqard-1.0.0.tar.gz
cd mysqlard-1.0.0
./configure --prefix=/usr --sysconfdir=/etc --datadir=/var/lib
make
make install
&lt;/pre&gt;

	&lt;p&gt;Na de installatie vind je in datadir (in het voorbeeld /var/lib/mysqlard) een mysqlard.server script dat je aan je opstartsequentie dient toe te voegen (/etc/rc.d/ of /etc/rc.local afhankelijk van je distro). Verder vind je hier nog de voorbeeld cron en php scripts.&lt;/p&gt;


	&lt;h3&gt;Configuratie&lt;/h3&gt;


	&lt;p&gt;De configuratie gebeurt via de config file (normaal gezien /etc/mysqlard.cnf). Aan de hand van de commentaar die je daar vindt zou dit moeten lukken. De standaard installatie zou echter voor de meesten OK moeten zijn.&lt;/p&gt;


	&lt;h3&gt;Beveiliging&lt;/h3&gt;


	&lt;p&gt;Standaard probeert de Activity Report Daemon anoniem te connecteren. Indien dat niet mogelijk is bij jouw MySQL server, kan je de daemon ook met een user en/of paswoord laten connecteren.&lt;/p&gt;


	&lt;p&gt;Als gebruiker die de data opvraagt bij de MySQL server gebruik je best een aparte gebruiker die enkel &lt;span class="caps"&gt;USAGE&lt;/span&gt; permissies heeft op MySQL en geen enkele permissie op de databases. Als je van deze configuratie gebruik maat hoef je nergens plaintext paswoorden op te slaan. Als je de Activity Report Daemon op de MySQL server laat lopen kan je deze gebruiker aanmaken met&lt;/p&gt;


&lt;pre&gt;
GRANT USAGE ON *.* TO mysqlar@localhost;
&lt;/pre&gt;

	&lt;p&gt;in een mysql shell.&lt;/p&gt;


	&lt;p&gt;Als je de daemon op een andere dan de MySQL host laat lopen, gebruik dan de hostname of het IP adres van die host in plaats van localhost.&lt;/p&gt;


	&lt;p&gt;Als je niet anoniem connecteert naar de MySQL server maar met de gebruiker &lt;strong&gt;mysqlar&lt;/strong&gt; zoals hiervoor beschreven, moet je de opstartscript, bijvoorbeeld /etc/init.d/mysqlard, nog aanpassen zodat de daemon met deze gebruiker opgestart wordt. Zoek naar de lijn&lt;/p&gt;


&lt;pre&gt;
${MYSQLARD} --step=${step} --datadir=${datadir}
&lt;/pre&gt;

	&lt;p&gt;en vervang dit door&lt;/p&gt;


&lt;pre&gt;
${MYSQLARD} --step=${step} --datadir=${datadir} --user=mysqlar
&lt;/pre&gt;

	&lt;p&gt;als je de user uit het voorbeeld gebruikt hebt.&lt;/p&gt;


	&lt;p&gt;Als je de daemon niet als root wil laten lopen kan je een gelockte user aanmaken op systeemniveau om de daemon te laten lopen. In dat geval moet je het daemon opstartscript wijzigen. De eerder vermelde lijn uit het opstartscript wordt dan&lt;/p&gt;


&lt;pre&gt;
su - marduser -c "${MYSQLARD} --step=${step} --datadir=${datadir} --user=mysqlar" 
&lt;/pre&gt;

	&lt;p&gt;In ieder geval zou de mogelijke schade ten gevolge van het gebruik van de root account beperkt moeten zijn aangezien de daemon geen bestanden aanmaakt, bestanden leest, netwerk connecties aanvaardt, enz &amp;#8230;&lt;/p&gt;


	&lt;p&gt;Maar zoals een collega van me pleegt te zeggen :&amp;#8221;Het is niet omdat je paranoïde bent, dat je niet gevolgd wordt.&amp;#8221;&lt;/p&gt;


	&lt;h3&gt;Bugs en andere problemen&lt;/h3&gt;


	&lt;p&gt;Neem gerust contact met me op als er zich problemen voordoen, maar kijk eerst eens in de &lt;a href="/pages/mysqlar/faq"&gt;&lt;span class="caps"&gt;FAQ&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Thu, 18 Jan 2007 15:20:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:cfbe120f-2f51-4ea7-962e-90eaf52c13fa</guid>
      <author>Paul Verreth</author>
      <link>http://blog.sos.be/articles/2007/01/18/mysql-activity-report-een-database-tuning-hulpprogramma</link>
      <category>artikels</category>
      <category>mysql</category>
    </item>
  </channel>
</rss>
