MySQL – Building from Source

MySQL ist eines der am weitesten verbreiteten relationale-Datenbanksystem. Anwendung findet diese am häufigsten in “LAMP”-Strukturen bzw. dynamischen Webseiten.

MySQL wird mit einer sogenannten Dual-License ausgeliefert. Es gibt ihn in der kostenpflichtigen Enterprise-Version und in der kostenfreien Community-Version. Als Fork exestiert MariaDB und Drizzle.

Der MySQL-Server wird auf einem Raspberry Pi compiliert was Stunden dauern kann.

Beim compilieren gehe ich wie in der Anleitung von mysql.com vor.

Compilieren:

groupadd mysql
useradd -r -g mysql mysql
tar zxvf mysql-VERSION.tar.gz
cd mysql-VERSION
mkdir mysql
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/mysql -DENABLED_PROFILING=0 -DFEATURE_SET=small -DDEFAULT_CHARSET=utf8 -DWITH_EXTRA_CHARSETS=none -DWITH_SSL=system -DWITH_UNIT_TESTS=0 -DWITH_ZLIB=system -DMYSQL_DATADIR=/mysql/data -DSYSCONFDIR=/etc/mysql
make
make install DESTDIR="/mysql"
chown -R mysql /mysql
chgrp -R mysql /mysql
cd /mysql
cp share/mysql_system_tables.sql share/mysql_system_tables.sql.orig

Editiere die Datei “share/mysql_system_tables.sql” und kommentiere Zeile 101 bis 129 aus. Andernfalls wird “mysql_install_db” versuchen InnoDB-Tabellen anzulegen obwohl diese engine nicht exestiert bzw. deaktiviert ist.
http://bugs.mysql.com/bug.php?id=68438

Anschliessend geht es weiter mit:

scripts/mysql_install_db --user=mysql
chown -R root .
chown -R mysql data

Das Startskript kopieren und Dienst aktivieren:

cp support-files/mysql.server /etc/init.d/mysql
update-rc.d mysql defaults (für Debian)
chkconfig --add mysql (centos / RedHat)
chkconfig --level 345 mysql on (centos / RedHat)
service mysql start

Meine my.cnf angepasst an die Bedürfnisse eines Raspberry Pi:

[client]
#password       = your_password
port            = 3306
socket          = /tmp/mysql.sock

[mysqld]
user            = mysql
port            = 3306
socket          = /tmp/mysql.sock
basedir         = /mysql
datadir         = /mysql/data
tmpdir          = /tmp
lc-messages-dir = /mysql/share/mysql
skip-external-locking
key_buffer_size = 16K
max_allowed_packet = 1M
table_open_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 64K

default-storage-engine = MyISAM
default-tmp-storage-engine = MyISAM
skip-innodb
#skip-networking
server-id       = 1

# wenn InnoDB aktiv hat sich dies als speicherfreundlich erwiesen
#innodb_buffer_pool_size = 4M # 16
#innodb_additional_mem_pool_size = 1M # 2
#innodb_log_file_size = 2M # 5
#innodb_log_buffer_size = 2M # 8
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M

[mysqlhotcopy]
interactive-timeout

[mysql_install_db]
default-storage-engine = MyISAM
default-tmp-storage-engine = MyISAM
skip-innodb