Oct 05 2011

mysqldump: do not forget to routines!

Tag: MySQLJens @ 23:45

For creating MySQL backups you can easily use utility mysqldump. However, this utility don’t dump stored procedures and functions by default. With using parameter --routines, stored routines (procedures and functions created by CREATE PROCEDURE and CREATE FUNCTION) will be included into database dump. This behavior of mysqldump is quite confusing, because TRIGGERS are included in database dump by default.

So, if you are using stored procedures and functions, do not forget to update your commands like this:

mysqldump --routines [other parameters] > [database dump file]

For more information, see mysqldump manual pages :

Mar 02 2010

Compiling SysBench on Debian Lenny

Tag: Debian,English,HW Tunning,Linux,MySQLJens @ 23:00

SysBench is a system performance benchmark primarily written for MySQL server benchmarking. In actual version 0.4.12, SysBench supports different benchmark modes: file I/O performance, CPU and scheduler performance, memory allocation and transfer speed, threads implementation performance and database server performance. It’s widely used on Linux machines, especially for identifying bottlenecks on database servers (with using file I/O performance and MySQL database support).

There are no exists pre-compiled binary package on current stable Debian (Lenny). If you want to use SysBench on this version, there are at least two different options:

  1. use pre-compiled package from unstable (Squeeze) version,
  2. compile itself from source SysBench package.

With the first option, there are two problems, why it is not a good idea: 1) mixing stable and unstable packages and 2) unstable Debian package don’t contains last version of SysBench (currently contains version 0.4.10-1).

In compilation SysBench from source, they may occurs some problems:

  • Wrong machine/OS detection in compile configuration phase:
    # ./configure
    checking build system type... Invalid configuration `x86_64-unknown-linux-': machine `x86_64-unknown-linux' not recognized
    configure: error: /bin/sh config/config.sub x86_64-unknown-linux- failed
  • Unreachable binary mysql_configor undetectable location of MySQL libraries, which are required for SysBench MySQL support:
    ERROR: cannot find MySQL libraries. If you want to compile with MySQL support,
           you must either specify file locations explicitly using
           --with-mysql-includes and --with-mysql-libs options, or make sure path to
           mysql_config is listed in your PATH environment variable. If you want to
           disable MySQL support, use --without-mysql option.
    This could be easy solved with installing libmysqlclient15-dev debian package.
  • libtoolerror in compilation progress
    # make
    ... some lines cropped ...
    ../libtool: line 838: X--tag=CC: command not found
    ../libtool: line 871: libtool: ignoring unknown tag : command not found
    ../libtool: line 838: X--mode=link: command not found
    ../libtool: line 1004: *** Warning: inferring the mode of operation is deprecated.: command not found
    ../libtool: line 1005: *** Future versions of Libtool will require --mode=MODE be specified.: command not found
    ../libtool: line 2231: X-g: command not found
    ../libtool: line 2231: X-O2: command not found
    ../libtool: line 1951: X-L/usr/lib/mysql: No such file or directory
    ../libtool: line 2400: Xsysbench: command not found
    ../libtool: line 2405: X: command not found
    ../libtool: line 2412: Xsysbench: command not found
    ../libtool: line 2420: mkdir /.libs: No such file or directory
    ../libtool: line 2547: X-lmysqlclient_r: command not found
    ../libtool: line 2547: X-lrt: command not found
    ../libtool: line 2547: X-lm: command not found
    ../libtool: line 2629: X-L/root/sysbench-0.4.12/sysbench: No such file or directory
    ../libtool: line 2547: X-lmysqlclient_r: command not found
    ../libtool: line 2547: X-lrt: command not found
    ../libtool: line 2547: X-lm: command not found
    ../libtool: line 2629: X-L/root/sysbench-0.4.12/sysbench: No such file or directory
    ../libtool: line 2547: X-lmysqlclient_r: command not found
    ../libtool: line 2547: X-lrt: command not found
    ../libtool: line 2547: X-lm: command not found
    ../libtool: line 5162: Xgcc -pthread "" "" -o @OUTPUT@ sysbench.o sb_timer.o sb_options.o sb_logger.o db_driver.o  tests/fileio/libsbfileio.a tests/threads/libsbthreads.a tests/memory/libsbmemory.a tests/cpu/libsbcpu.a tests/oltp/libsboltp.a tests/mutex/libsbmutex.a drivers/mysql/libsbmysql.a -L/root/sysbench-0.4.12/sysbench -lmysqlclient_r -lrt -lm: No such file or directory
    ../libtool: line 5163: Xgcc -pthread "" "" -o @OUTPUT@ sysbench.o sb_timer.o sb_options.o sb_logger.o db_driver.o  tests/fileio/libsbfileio.a tests/threads/libsbthreads.a tests/memory/libsbmemory.a tests/cpu/libsbcpu.a tests/oltp/libsboltp.a tests/mutex/libsbmutex.a drivers/mysql/libsbmysql.a -L/root/sysbench-0.4.12/sysbench -lmysqlclient_r -lrt -lm: No such file or directory
    ../libtool: line 5168: X: command not found
    ../libtool: line 5172: : command not found
    ... some lines cropped ...

Compilation step-by-step

Prerequisites: gcc, make and automake for compilation, mysql-server and libmysqlclient15-dev for MySQL support.

# apt-get install gcc make automake mysql-server libmysqlclient15-dev

Obtaining source code (actual version may differ) and extract archive:

# wget http://downloads.sourceforge.net/project/sysbench/sysbench/0.4.12/sysbench-0.4.12.tar.gz
# tar xfz sysbench-0.4.12.tar.gz
# cd sysbench-0.4.12

Fixing wrong machine/OS detection in configuration phase: edit file config/config.sub and before line line 312 (or line, where is comment: # Object if more than one company name word.) add following lines (with respect your machine/distro, in our case x86_64-unknown-linux; ensured from error message).


Fixing libtool error via replacing ranlib in file configure.ca, at line 75 (change AC_PROG_LIBTOOL to AC_PROG_RANLIB) and recreate all automake utilities with autogen:

# sed -i configure.ac -e 's/AC_PROG_LIBTOOL/AC_PROG_RANLIB/'
# ./autogen.sh

Now, you should run classical compilation progress:

make install

That’s all, sysbench binary is created in sysbench directory (sysbench/sysbench), you can copy it into some PATH folder and use it as you wish:

# cp sysbench/sysbench /usr/bin/sysbench

Some useful links

Feb 10 2010

Linux application repositories from Goole

Tag: Debian,LinuxJens @ 09:30

Sorry, this entry is only available in Czech.

Jan 10 2010

Built-in Exception changes in PHP 5.3

Tag: English,PHPJens @ 23:00

What really changes in built-in Exception class in PHP 5.3?

It is useful to use Java like nesting exceptions in PHP. In following example, we catch data insert exception (in class which is inherited from Zend_Db_Table) and throws own defined (Jens_Db_Exception) exception. We have still full information about previous (Zend_Db_Exception) exception.

try {
catch ( Zend_Db_Exception $e ) {
    throw new Jens_Db_Exception('Insert failed'0$e);

In PHP 5.2, we can use simple extension of built-in Exception to provide functionality described above:

class Jens_Exception extends Exception
     * @var Exception
    private $previous;

     * @param string $message
     * @param int $code
     * @param Exception $previous
    public function __construct($message$code 0Exception $previous null)

        if ( !is_null($previous) )
            $this->previous $previous;

     * @return Exception
    public function getPrevious()
        return $this->previous;

Jan 08 2010

Ceny pevných disků po novém roce

Tag: HW Tunning,ZprávičkyJens @ 01:30

Pokud někdo odložil nákup nového disku na “po vánocích” či dokonce “po novém roce”, tak by ho mohla zajímat následující tabulka. Jsou v ní uvedeny ceny přepočítané ceny disků na jejich kapacitu — tedy, kolik korun českých zaplatíte za 1GB kapacity (desetinný údaj v tabulce tedy udává Kč/1GB).

kapacita HDD 3.5″ (7200) HDD 3.5″ (5400) HDD 2.5″ (5400) USB 3.5″ (7200) USB 2.5″ (5400)
320 GB 2.99 3.85 5.22
500 GB 2.24 2.28 3.95 3.63 4.70
640 GB 2.16 2.07 3.73 4.30
750 GB 2.55 2.18 4.62 2.49 4.68
1000 GB 2.19 2.05 5.07 2.40 4.79
1500 GB 2.04 1.76 2.17
2000 GB 3.36 2.13 2.23

Disky jsem rozdělil do pěti kategorií:

  1. HDD 3.5″ (7200): interní 3.5″ pevný disk, SATA 2, 7200 otáček
  2. HDD 3.5″ (5400): interní 3.5″ pevný disk, SATA 2, 5400 otáček, úsporný (zde lze zvolit ještě levnější kousek od výrobce Samsung a dostanete se na bezkonkurenční cenu 1.55 Kč/1 GB)
  3. HDD 2.5″ (5400): interní 3.5″ pevný disk, SATA 1/2, 5400 otáček, do notebooku
  4. USB 3.5″ (7200): externí 3.5″ pevný disk, USB 2.0, 7200 otáček, přenosný (vlastní zdroj)
  5. USB 2.5″ (5400): externí 2.5″ pevný disk, USB 2.0, 5400/5200 otáček, ultra přenosný (napájení z USB)

A jak to dopadlo?

  • Vítězem v kategorii cena/kapacita se jednoznačně stává “zelený”, interní 3.5″ disk s kapacitou 1.5TB.
  • V kategorii výkon/kapacita je dobrou koupí rychlý interní, 3.5″ disk s kapacitou 1.5TB.
  • A v kategorii přenosných disků opět vede disk, s kapacitou 1.5TB a o rozměru 3.5″. Pokud zvažuje nákup opravdu kapesního disku, šáhněte po tom s kapacitou 640GB.

Vítězství dnes tedy patří kapacitě 1.5TB … Všechny disky jsou od výrobce Western Digital, ceny jsou přebrány z eshopu Alfacomp (platné k 8.1.2010). Pozn.: 1000GB = 1TB.

Nov 23 2009

MySQL: Hromadná kontrola tabulek

Tag: Debian,MySQLJens @ 10:00

V aktuální old-stable (Etch) a vyšších verzí debianu se při spouštění MySQL 5.x automaticky provádí kontrola tabulek (CHECK TABLE) a případně i oprava (REPAIR TABLE) poškozených tabulek. Toto má nastarosti skript /etc/mysql/debian-start a funkce check_for_crashed_tables (definovaná v /usr/share/mysql/debian-start.inc.sh). Občas je ale potřeba explicitně prověřit všechny databáze a tabulky, to lze nejjednodušeji udělat z příkazové řádku pomocí utility mysqlcheck:

/usr/bin/mysqlcheck --defaults-file=/etc/mysql/debian.cnf --verbose --all-databases

Konfigurační soubor /etc/mysql/debian.cnf je přístupný pouze pro roota (tedy výše zmíněný příkaz lze spustit pouze pod rootem) a jsou v něm uloženy autentizační údaje pro systémový učet Debianu (debian-sys-maint) do MySQL.

Nov 10 2009

PHP: break a goto řídící stuktury

Tag: PHPJens @ 23:50

Zase jsem se dnes naučil něco nového o PHP. Věděli jste, že klíčové slovo break může mít číselný argument? Já se přiznám že jsme to netušil a nikdy mě to ani nenapadlo. Kolega v práci to zřejmě běžně používá, takže díky Pauci za objev :) A jak to celé funguje a na co to je? Volitelný celočíselný argument udává, z jaké hloubky zanoření v řídící struktuře má vyskočit, implicitní je 1, podívejte se na příklad:

$i = 0;
while (++$i) {
    switch ($i) {
    case 5:
        echo "At 5<br />n";
        break 1;  /* vyskoci pouze ze switch. */
    case 10:
        echo "At 10; quitting<br />n";
        break 2;  /* vyskoci ze switch a while. */

Více přímo v manuálu PHP.

Další zajímavostí je řídící struktura goto. Ta je nově přidána od PHP 5.3, osobně si myslím ze goto je čisté zlo, ale určitě existuje případ, kdy se může hodit. Co mě ale zaujalo nejvíce, přímo v manuálové stránce PHP je naprosto překvapivě umístěn obrázek (s tím jsem se v manuálu PHP nikdy nesetkal), který je navíc pojatý jako komiks a zřejmě vyjadřuje názor autora(ů) manuálové stránky na přidání struktury goto do jazyka :)


Zdroj obrázku: xkcd.

Oct 01 2009

Jak zjistit verzi Debianu? – lsb_release!

Tag: DebianJens @ 10:36

Jak nejjednodušeji zjistit, jakou verzi Debianu či Ubuntu zrovna používáte, případně jaká verze Linuxu je použita na systému, kde jste se zrovna přihlásili? Určite se dá nají nějaký ten vhodný objekt v /etc/ kde to vyčtete, ale tato informace (například v /etc/issue) není vždy úplně přesná či úplná. Řešením je příkaz lsb_release (Linux Standard Base and Distribution information):

franta:~# lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 5.0.2 (lenny)
Release:        5.0.2
Codename:       lenny

Tuto utilitu obsahuje balíček lsb-release a tedy nemusí být vždy součástí dané instalace, často však bývá standardní součástí systému. Nicméně, pokud se podíváte hlouběji pod kapotu (cat /usr/share/pyshared/lsb_release.py), tak zjistíte že se jedná pouze o Python, který prochází různé soubory (např. /etc/debian_version) a detekuje z nich verzi.

Aug 26 2009

Robtex: Informace o doméná a doménových jménech

Tag: WebJens @ 22:00

Dnes jsem náhodou narazil na velmi zajímavý on-line nástroj, který nahradí spousty linuxových příkazů (whois, nslookup, host), chcete-li vybádat nějakou IP adresu nebo chcete-li získat informace o nějaké doméně a s ní svázané subdomény, emailové servery a podobně. Má velmi výstižný název swiss army knife internet tool. Do horního pole “hostname, IP or AS” jen zadáte IP nebo doménu a už se jen kocháte, co lze rychle a efektivně zjistit jedním kliknutím, zkuste třeba http://www.robtex.com/dns/seznam.cz.html.

Aug 25 2009

Jak vypnout personalizované vyhledávání v Googlu

Tag: SEO,WebJens @ 21:20

Personalizované vyhledávání v Googlu je mnohdy dosti problematické a vrací “až moc personalizovaně chytré” výsledky, které buď nejsou relevantní a nebo v tu chvíli nežádoucí. Nejjednoduším způsobem jak toto personalizované vyhledávaní vypnout je připad URL parametr pws=0, tedy ideálně na konec přidat vašeho URL dotazu přidat &pws=0. Jistě, existuje i klikací řešení vypnutí, ale než to člověk najde a nastaví, tak přidání parametru do URL je mnohem rychlejší, navíc nezáleží na tom zda je člověk přihlášen či nikoliv. Více o parametru pws přímo na blogu Googlu.

Jinak další zajímavostí, která nepřímo souvisí s předchozím tématem je i nový vyhledávací engine Caffeine (najdete ho na adrese http://www2.sandbox.google.com/), který Google nedávno pustil do testovacího provozu, rozhodně stojí zato vyzkoušet pozice a relevance vašich oblíbených frází a zkusit porovnat s aktuálními výsledky. Více se dozvíte v oznámení Help test some next-generation infrastructure přímo na blogu Googlu.

Next Page »