Több MariaDB kiszolgáló - egyetlen gépen

Folyamatosan visszatérő feladat, hogy egyetlen szerverre telepítsünk több MariaDB kiszolgálót. Mivel az időközönként megjelenő frissítéseket is szeretnénk a lehető legfájdalommentesebb módon telepíteni, kézenfekvő megoldásnak tűnik, hogy a linux rendszerünkhöz biztosított "gyári" csomagokat használjuk fel erre a célra, és ne a forráskódból fordítsuk le magunknak minden egyes kiszolgáló példányt.

Tesztkörnyezetünket jelen esetben egy "kissé" már koros, Fujitsu-Siemens Primergy TX200 S2-es szerver, 2x Intel Xeon@2,8GHz, 3GB RAM biztosítja számunkra. Operációs rendszerként a Debian GNU/Linux 8.2-es (Jessie), adatbázis-kiszolgálóként pedig a MariaDB 10.1.10-es változatát használjuk fel. Az adatbázis-kiszolgálók datadir mappáját egy külön partíción, a /srv/db mappába befűzve helyezzük el. Négy kiszolgáló példányt fogunk felépíteni, amelyek a 3306, 3307, 3308 és 3309-es porton fogadják a kapcsolódó klienseket.

Az első példány telepítése

Az első MariaDB példányt a már megszokott módon fogjuk feltelepíteni. Ha külön nem említem, jelszóként mindenhol a 'Pa$$w0rd' karaktersorozatot használom fel.

apt-get install software-properties-common
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
add-apt-repository 'deb [arch=amd64,i386] http://ftp.bme.hu/pub/mirrors/mariadb/repo/10.1/debian jessie main'
apt-get update
apt-get install mariadb-server

Ellenőrizzük le a kiszolgáló telepítését, futását:

systemctl status mysql

Az eredmény pedig, ha minden rendben van, valami ehhez hasonló lesz:

● mysql.service - LSB: Start and stop the mysql database server daemon
   Loaded: loaded (/etc/init.d/mysql)
   Active: active (running) since Thu 2016-01-07 09:41:30 CET; 2min 32s ago
   CGroup: /system.slice/mysql.service
           ├─5871 /bin/bash /usr/bin/mysqld_safe
           ├─6081 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --skip-log-err...
           └─6082 logger -t mysqld -p daemon.error

Jan 07 09:41:31 jessie /etc/mysql/debian-start[6136]: mysql.time_zone_name                               OK
Jan 07 09:41:31 jessie /etc/mysql/debian-start[6136]: mysql.time_zone_transition                         OK
Jan 07 09:41:31 jessie /etc/mysql/debian-start[6136]: mysql.time_zone_transition_type                    OK
Jan 07 09:41:31 jessie /etc/mysql/debian-start[6136]: mysql.user                                         OK
Jan 07 09:41:31 jessie /etc/mysql/debian-start[6136]: Phase 2/6: Fixing views
Jan 07 09:41:31 jessie /etc/mysql/debian-start[6136]: Processing databases
Jan 07 09:41:31 jessie /etc/mysql/debian-start[6136]: information_schema
Jan 07 09:41:31 jessie /etc/mysql/debian-start[6136]: mysql
Jan 07 09:41:31 jessie /etc/mysql/debian-start[6136]: performance_schema
Jan 07 09:41:31 jessie /etc/mysql/debian-start[6136]: Phase 3/6: Running 'mysql_fix_privilege_tables'

Vagyis az első példányunk köszöni, jól van, és hiba nélkül ellátja feladatait. Helyezzük biztonságba az adatbázis-kiszolgálónkat:

mysql_secure_installation

A válaszok pedig:

Change root password: n
Remove anonymous users: Y
Disallow root login remotely? Y
Remove test database and access to it? Y
Reload privilege tables now? Y

Helyezzük át a datadir mappát a /srv/db/mysql alá:

systemctl stop mysql
mkdir /srv/db/mysql
chown mysql:mysql /srv/db/mysql
mv /var/lib/mysql/* /srv/db/mysql

A /etc/mysql/my.cnf fájlban az alábbi sort:

datadir     = /var/lib/mysql

módosítsuk erre:

datadir     = /srv/db/mysql

Indítsuk el ismét a MariaDB kiszolgálónkat:

systemctl start mysql

Ellenőrizzük le, hogy minden rendben van-e:

systemctl status mysql

Az eredmény:

● mysql.service - LSB: Start and stop the mysql database server daemon
   Loaded: loaded (/etc/init.d/mysql)
   Active: active (running) since Thu 2016-01-07 09:51:23 CET; 31s ago
  Process: 6260 ExecStop=/etc/init.d/mysql stop (code=exited, status=0/SUCCESS)
  Process: 6328 ExecStart=/etc/init.d/mysql start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/mysql.service
           ├─6352 /bin/bash /usr/bin/mysqld_safe
           ├─6562 /usr/sbin/mysqld --basedir=/usr --datadir=/srv/db/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --skip-log-erro...
           └─6563 logger -t mysqld -p daemon.error

Jan 07 09:51:23 jessie mysqld[6563]: 2016-01-07  9:51:23 140121609307904 [Note] InnoDB: Dumping buffer pool(s) not yet started
Jan 07 09:51:23 jessie mysqld[6563]: 2016-01-07  9:51:23 140122376046528 [Note] Plugin 'FEEDBACK' is disabled.
Jan 07 09:51:23 jessie mysqld[6563]: 2016-01-07  9:51:23 140122376046528 [Note] Server socket created on IP: '127.0.0.1'.
Jan 07 09:51:23 jessie mysqld[6563]: 2016-01-07  9:51:23 140122376046528 [Note] Reading of all Master_info entries succeded
Jan 07 09:51:23 jessie mysqld[6563]: 2016-01-07  9:51:23 140122376046528 [Note] Added new Master_info '' to hash table
Jan 07 09:51:23 jessie mysqld[6563]: 2016-01-07  9:51:23 140122376046528 [Note] /usr/sbin/mysqld: ready for connections.
Jan 07 09:51:23 jessie mysqld[6563]: Version: '10.1.10-MariaDB-1~jessie-log'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  ...ribution
Jan 07 09:51:23 jessie mysql[6328]: Starting MariaDB database server: mysqld.
Jan 07 09:51:23 jessie mysql[6328]: Checking for corrupt, not cleanly closed and upgrade needing tables..
Jan 07 09:51:23 jessie /etc/mysql/debian-start[6617]: /usr/bin/mysql_upgrade: the '--basedir' option is always ignored

A /var/log/syslog tanusága szerint pedig:

Jan  7 09:51:22 jessie mysqld_safe: Starting mysqld daemon with databases from /srv/db/mysql
Jan  7 09:51:22 jessie mysqld: 2016-01-07  9:51:22 140122376046528 [Note] /usr/sbin/mysqld (mysqld 10.1.10-MariaDB-1~jessie-log) starting as process 6562 ...
Jan  7 09:51:23 jessie mysqld: 2016-01-07  9:51:23 140122376046528 [Note] InnoDB: Using mutexes to ref count buffer pool pages
Jan  7 09:51:23 jessie mysqld: 2016-01-07  9:51:23 140122376046528 [Note] InnoDB: The InnoDB memory heap is disabled
Jan  7 09:51:23 jessie mysqld: 2016-01-07  9:51:23 140122376046528 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
Jan  7 09:51:23 jessie mysqld: 2016-01-07  9:51:23 140122376046528 [Note] InnoDB: Memory barrier is not used
Jan  7 09:51:23 jessie mysqld: 2016-01-07  9:51:23 140122376046528 [Note] InnoDB: Compressed tables use zlib 1.2.8
Jan  7 09:51:23 jessie mysqld: 2016-01-07  9:51:23 140122376046528 [Note] InnoDB: Using Linux native AIO
Jan  7 09:51:23 jessie mysqld: 2016-01-07  9:51:23 140122376046528 [Note] InnoDB: Using generic crc32 instructions
Jan  7 09:51:23 jessie mysqld: 2016-01-07  9:51:23 140122376046528 [Note] InnoDB: Initializing buffer pool, size = 256.0M
Jan  7 09:51:23 jessie mysqld: 2016-01-07  9:51:23 140122376046528 [Note] InnoDB: Completed initialization of buffer pool
Jan  7 09:51:23 jessie mysqld: 2016-01-07  9:51:23 140122376046528 [Note] InnoDB: Highest supported file format is Barracuda.
Jan  7 09:51:23 jessie mysqld: 2016-01-07  9:51:23 140122376046528 [Note] InnoDB: 128 rollback segment(s) are active.
Jan  7 09:51:23 jessie mysqld: 2016-01-07  9:51:23 140122376046528 [Note] InnoDB: Waiting for purge to start
Jan  7 09:51:23 jessie mysqld: 2016-01-07  9:51:23 140122376046528 [Note] InnoDB:  Percona XtraDB (http://www.percona.com) 5.6.26-76.0 started; log sequence number 1616975
Jan  7 09:51:23 jessie mysqld: 2016-01-07  9:51:23 140121609307904 [Note] InnoDB: Dumping buffer pool(s) not yet started
Jan  7 09:51:23 jessie mysqld: 2016-01-07  9:51:23 140122376046528 [Note] Plugin 'FEEDBACK' is disabled.
Jan  7 09:51:23 jessie mysqld: 2016-01-07  9:51:23 140122376046528 [Note] Server socket created on IP: '127.0.0.1'.
Jan  7 09:51:23 jessie mysqld: 2016-01-07  9:51:23 140122376046528 [Note] Reading of all Master_info entries succeded
Jan  7 09:51:23 jessie mysqld: 2016-01-07  9:51:23 140122376046528 [Note] Added new Master_info '' to hash table
Jan  7 09:51:23 jessie mysqld: 2016-01-07  9:51:23 140122376046528 [Note] /usr/sbin/mysqld: ready for connections.
Jan  7 09:51:23 jessie mysqld: Version: '10.1.10-MariaDB-1~jessie-log'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  mariadb.org binary distribution
Jan  7 09:51:23 jessie mysql[6328]: Starting MariaDB database server: mysqld.
Jan  7 09:51:23 jessie mysql[6328]: Checking for corrupt, not cleanly closed and upgrade needing tables..
Jan  7 09:51:23 jessie /etc/mysql/debian-start[6614]: Upgrading MySQL tables if necessary.
Jan  7 09:51:23 jessie /etc/mysql/debian-start[6617]: /usr/bin/mysql_upgrade: the '--basedir' option is always ignored
Jan  7 09:51:23 jessie /etc/mysql/debian-start[6617]: Looking for 'mysql' as: /usr/bin/mysql
Jan  7 09:51:23 jessie /etc/mysql/debian-start[6617]: Looking for 'mysqlcheck' as: /usr/bin/mysqlcheck
Jan  7 09:51:23 jessie /etc/mysql/debian-start[6617]: This installation of MySQL is already upgraded to 10.1.10-MariaDB, use --force if you still need to run mysql_upgrade
Jan  7 09:51:23 jessie /etc/mysql/debian-start[6624]: Checking for insecure root accounts.
Jan  7 09:51:23 jessie /etc/mysql/debian-start[6628]: Triggering myisam-recover for all MyISAM tables

Vagyis minden rendben működik, az első adatbázis-kiszolgáló példányunk készen van (vagyis csak majdnem).

Mappák létrehozása

Itt az ideje elkészíteni az adatbázis-kiszolgálók által használt valamennyi mappát. Kezdjük a datadir mappák létrehozásával:

mkdir /srv/db/mysql3307
mkdir /srv/db/mysql3308
mkdir /srv/db/mysql3309
chown -R mysql:mysql /srv/db/mysql3307
chown -R mysql:mysql /srv/db/mysql3308
chown -R mysql:mysql /srv/db/mysql3309

A log mappák létrehozása:

mkdir /var/log/mysql3307
mkdir /var/log/mysql3308
mkdir /var/log/mysql3309
chown -R mysql:mysql /var/log/mysql3307
chown -R mysql:mysql /var/log/mysql3308
chown -R mysql:mysql /var/log/mysql3309

A futásidejű információkat tartalmazó mappák létrehozása:

mkdir /var/run/mysqld3307
mkdir /var/run/mysqld3308
mkdir /var/run/mysqld3309
chown -R mysql:root /var/run/mysqld3307
chown -R mysql:root /var/run/mysqld3308
chown -R mysql:root /var/run/mysqld3309

A my.cnf változatok létrehozása

Állítsuk le a MariaDB kiszolgálót:

systemctl stop mysql

A biztonság kedvéért mentsük el a régi my.cnf fájlt:

mv /etc/mysql/my.cnf /etc/mysql/my.cnf.old

Az új my.cnf fájl tartalma legyen ez:

[mysqld_multi]
mysqld       = /usr/bin/mysqld_safe
mysqladmin   = /usr/bin/mysqladmin
user         = multi_admin
password     = Pa$$w0rd

!includedir /etc/mysql/conf.d/

A fájlban található felhasználóra az adatbázis-kiszolgálók leállításához lesz szükségünk. A /etc/mysql/conf.d/mariadb.cnf fájl tartalma legyen az alábbi:

[client]
default-character-set   = utf8

[mysqld]
character-set-server    = utf8
collation-server        = utf8_general_ci
character_set_server    = utf8
collation_server        = utf8_general_ci

A /etc/mysql/conf.d/my3306.cnf fájl tartalma:

[mysqld3306]
user                    = mysql
pid-file                = /var/run/mysqld/mysqld.pid
socket                  = /var/run/mysqld/mysqld.sock
port                    = 3306
basedir                 = /usr
datadir                 = /srv/db/mysql
tmpdir                  = /tmp
lc_messages_dir         = /usr/share/mysql
lc_messages             = en_US
skip-external-locking
bind-address            = 127.0.0.1

max_connections         = 16
connect_timeout         = 5
wait_timeout            = 600
max_allowed_packet      = 100M
thread_cache_size       = 128
sort_buffer_size        = 4M
bulk_insert_buffer_size = 16M
tmp_table_size          = 32M
max_heap_table_size     = 32M

myisam_recover          = BACKUP
key_buffer_size         = 16M
table_open_cache        = 400
myisam_sort_buffer_size = 16M
concurrent_insert       = 2
read_buffer_size        = 2M
read_rnd_buffer_size    = 1M

query_cache_limit       = 128K
query_cache_size        = 64M
query_cache_type        = DEMAND

log_warnings            = 2
slow_query_log_file     = /var/log/mysql/mariadb-slow.log
long_query_time         = 10
log_slow_verbosity      = query_plan
log_bin                 = /var/log/mysql/mariadb-bin
log_bin_index           = /var/log/mysql/mariadb-bin.index
binlog_format           = mixed
expire_logs_days        = 10
max_binlog_size         = 100M

default_storage_engine  = InnoDB
innodb_buffer_pool_size = 256M
innodb_log_buffer_size  = 8M
innodb_file_per_table   = 1
innodb_open_files       = 400
innodb_io_capacity      = 400
innodb_flush_method     = O_DIRECT

A /etc/mysql/conf.d/my3307.cnf fájl tartalma az alábbi:

[mysqld3307]
user                    = mysql
pid-file                = /var/run/mysqld3307/mysqld3307.pid
socket                  = /var/run/mysqld3307/mysqld3307.sock
port                    = 3307
basedir                 = /usr
datadir                 = /srv/db/mysql3307
tmpdir                  = /tmp
lc_messages_dir         = /usr/share/mysql
lc_messages             = en_US
skip-external-locking
bind-address            = 127.0.0.1

max_connections         = 16
connect_timeout         = 5
wait_timeout            = 600
max_allowed_packet      = 100M
thread_cache_size       = 128
sort_buffer_size        = 4M
bulk_insert_buffer_size = 16M
tmp_table_size          = 32M
max_heap_table_size     = 32M

myisam_recover          = BACKUP
key_buffer_size         = 16M
table_open_cache        = 400
myisam_sort_buffer_size = 16M
concurrent_insert       = 2
read_buffer_size        = 2M
read_rnd_buffer_size    = 1M

query_cache_limit       = 128K
query_cache_size        = 64M
query_cache_type        = DEMAND

log_warnings            = 2
slow_query_log_file     = /var/log/mysql3307/mariadb3307-slow.log
long_query_time         = 10
log_slow_verbosity      = query_plan
log_bin                 = /var/log/mysql3307/mariadb3307-bin
log_bin_index           = /var/log/mysql3307/mariadb3307-bin.index
binlog_format           = mixed
expire_logs_days        = 10
max_binlog_size         = 100M

default_storage_engine  = InnoDB
innodb_buffer_pool_size = 256M
innodb_log_buffer_size  = 8M
innodb_file_per_table   = 1
innodb_open_files       = 400
innodb_io_capacity      = 400
innodb_flush_method     = O_DIRECT

A my3308.cnf és a my3309.cnf fájlt hasonlóképpen készítsük el, figyelve a portszámok pontos átvezetésére. A fenti paraméterek természetesen csak a tesztrendszer kedvéért kerültek meghatározásra.

A debian.cnf változatok létrehozása

A /etc/mysql/debian.cnf fájl tartalma változatlan marad. Azonban ennek mintájára létre kell hoznunk a debian3307.cnf, a debian3308.cnf és a debian3309.cnf fájlokat is, az alábbi módon:

[client]
host     = localhost
user     = debian-sys-maint
password = uWDfNoDMMISVV13l
socket   = /var/run/mysqld3307/mysqld3307.sock
[mysql_upgrade]
host     = localhost
user     = debian-sys-maint
password = uWDfNoDMMISVV13l
socket   = /var/run/mysqld3307/mysqld3307.sock
basedir  = /usr

A fájlokban az egyetlen változás a portszámokban található, az egyes változatok létrehozásánál erre nagyon figyelj oda!

A debian-start változatok létrehozása

Az eredeti /etc/mysql/debian-start fájl szintén változatlan marad, azonban szükség lesz a debian-start3307, a debian-start3308 és a debian-start3309 fájlok létrehozására:

#!/bin/bash
#
# This script is executed by "/etc/init.d/mysql" on every (re)start.
# 
# Changes to this file will be preserved when updating the Debian package.
#

source /usr/share/mysql/debian-start.inc.sh

MYSQL="/usr/bin/mysql --defaults-file=/etc/mysql/debian3307.cnf"
MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian3307.cnf"
MYUPGRADE="/usr/bin/mysql_upgrade --defaults-extra-file=/etc/mysql/debian3307.cnf"
MYCHECK="/usr/bin/mysqlcheck --defaults-file=/etc/mysql/debian3307.cnf"
MYCHECK_SUBJECT="WARNING: mysqlcheck has found corrupt tables"
MYCHECK_PARAMS="--all-databases --fast --silent"
MYCHECK_RCPT="root"

# The following commands should be run when the server is up but in background
# where they do not block the server start and in one shell instance so that
# they run sequentially. They are supposed not to echo anything to stdout.
# If you want to disable the check for crashed tables comment
# "check_for_crashed_tables" out.  
# (There may be no output to stdout inside the background process!)
echo "Checking for corrupt, not cleanly closed and upgrade needing tables."

# Need to ignore SIGHUP, as otherwise a SIGHUP can sometimes abort the upgrade
# process in the middle.
trap "" SIGHUP
(
  upgrade_system_tables_if_necessary;
  check_root_accounts;
  check_for_crashed_tables;
) >&2 &

exit 0

Az egyes változatokban itt is a megfelelő portszámok átvezetése az, amire nagyon pontosan oda kell figyelned.

Az újabb példányok létrehozása

Miután megfelelően előkészítettük az egyes kiszolgáló példányok konfigurációs fájljait, itt az idő elkészíteni a konkrét kiszolgálókat és leellenőrizni azok futását. Először is jöjjön az új példányok telepítése:

mysql_install_db --user=mysql --basedir=/usr --datadir=/srv/db/mysql3307 --defaults-file=/etc/mysql/conf.d/my3307.cnf
mysql_install_db --user=mysql --basedir=/usr --datadir=/srv/db/mysql3308 --defaults-file=/etc/mysql/conf.d/my3308.cnf
mysql_install_db --user=mysql --basedir=/usr --datadir=/srv/db/mysql3309 --defaults-file=/etc/mysql/conf.d/my3309.cnf

A /srv/db/mysqlxxxx mappákban elkészültek a kiszolgálók fájljai és mappái, ezt érdemes leellenőrizni. Maguk a kiszolgálók azonban - a fájlok létrehozása után - le lettek állítva. Az egyes kiszolgáló-példányok elindításához, leállításához és állapotuk lekérdezéséhez egy új szkriptre lesz szükségünk, amelyet a /etc/init.d mappában fogunk elhelyezni. Készítsük el a /etc/init.d/mysqld_multi.server.sh fájlt az alábbi tartalommal:

#!/bin/sh
#
# A simple startup script for mysqld_multi by Tim Smith and Jani Tolonen.
# This script assumes that my.cnf file exists either in /etc/my.cnf or
# /root/.my.cnf and has groups [mysqld_multi] and [mysqldN]. See the
# mysqld_multi documentation for detailed instructions.
#
# This script can be used as /etc/init.d/mysql.server
#
# Comments to support chkconfig on RedHat Linux
# chkconfig: 2345 64 36
# description: A very fast and reliable SQL database engine.
#
# Version 1.0
#

### BEGIN INIT INFO
# Provides:          mysqld_multi
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Should-Start:      $network $named $time
# Should-Stop:       $network $named $time
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start and stop multiple mysql database server daemon instances
# Description:       Controls multiple MariaDB database server daemon instances
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=mysqld_multi
DESC=mysqld_multi

basedir=/usr
bindir=/usr/bin

if test -x $bindir/mysqld_multi
then
  mysqld_multi="$bindir/mysqld_multi";
else
  echo "Can't execute $bindir/mysqld_multi from dir $basedir";
  exit;
fi

case "$1" in
    'start' )
        "$mysqld_multi" start $2
        ;;
    'stop' )
        "$mysqld_multi" stop $2
        ;;
    'report' )
        "$mysqld_multi" report $2
        ;;
    'restart' )
        "$mysqld_multi" stop $2
        "$mysqld_multi" start $2
        ;;
    *)
        echo "Usage: $0 {start|stop|report|restart}" >&2
        ;;
esac

Adjunk a fájlnak futási jogot:

chmod +x /etc/init.d/mysqld_multi.server.sh

Mentsük el a régi /etc/init.d/mysql szkriptet:

mv /etc/init.d/mysql /etc/init.d/mysql.old

Készítsünk szimbolikus linket /etc/init.d/mysql néven:

ln -s /etc/init.d/mysqld_multi.server.sh /etc/init.d/mysql

Indítsuk el a MariaDB kiszolgálókat:

/etc/init.d/mysql start

Ellenőrizzülk le a futásukat:

/etc/init.d/mysql report

Az eredmény valami hasonló lesz:

Reporting MariaDB servers
MariaDB server from group: mysqld3306 is running
MariaDB server from group: mysqld3307 is running
MariaDB server from group: mysqld3308 is running
MariaDB server from group: mysqld3309 is running

A syslogban is leellenőrizhetjük, mi újság az egyes példányokkal:

Jan  7 10:34:19 jessie mysqld_safe: Starting mysqld daemon with databases from /srv/db/mysql3307
Jan  7 10:34:19 jessie mysqld_safe: Starting mysqld daemon with databases from /srv/db/mysql
Jan  7 10:34:19 jessie mysqld_safe: Starting mysqld daemon with databases from /srv/db/mysql3308
Jan  7 10:34:19 jessie mysqld_safe: Starting mysqld daemon with databases from /srv/db/mysql3309
Jan  7 10:34:19 jessie mysqld: 2016-01-07 10:34:19 140049505118144 [Note] /usr/sbin/mysqld (mysqld 10.1.10-MariaDB-1~jessie-log) starting as process 8548 ...
Jan  7 10:34:19 jessie mysqld: 2016-01-07 10:34:19 140049505118144 [Note] Using unique option prefix 'myisam_recover' is error-prone and can break in the future. Please use the full name 'myisam-recover-options' instead.
Jan  7 10:34:19 jessie mysqld: 2016-01-07 10:34:19 140332467640256 [Note] /usr/sbin/mysqld (mysqld 10.1.10-MariaDB-1~jessie-log) starting as process 8566 ...
Jan  7 10:34:19 jessie mysqld: 2016-01-07 10:34:19 139917736122304 [Note] /usr/sbin/mysqld (mysqld 10.1.10-MariaDB-1~jessie-log) starting as process 8575 ...
Jan  7 10:34:19 jessie mysqld: 2016-01-07 10:34:19 140332467640256 [Note] Using unique option prefix 'myisam_recover' is error-prone and can break in the future. Please use the full name 'myisam-recover-options' instead.
Jan  7 10:34:19 jessie mysqld: 2016-01-07 10:34:19 140267101366208 [Note] /usr/sbin/mysqld (mysqld 10.1.10-MariaDB-1~jessie-log) starting as process 8577 ...
Jan  7 10:34:19 jessie mysqld: 2016-01-07 10:34:19 139917736122304 [Note] Using unique option prefix 'myisam_recover' is error-prone and can break in the future. Please use the full name 'myisam-recover-options' instead.
Jan  7 10:34:19 jessie mysqld: 2016-01-07 10:34:19 140267101366208 [Note] Using unique option prefix 'myisam_recover' is error-prone and can break in the future. Please use the full name 'myisam-recover-options' instead.
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140049505118144 [Note] InnoDB: Using mutexes to ref count buffer pool pages
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140049505118144 [Note] InnoDB: The InnoDB memory heap is disabled
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140049505118144 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140049505118144 [Note] InnoDB: Memory barrier is not used
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140049505118144 [Note] InnoDB: Compressed tables use zlib 1.2.8
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140049505118144 [Note] InnoDB: Using Linux native AIO
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140049505118144 [Note] InnoDB: Using generic crc32 instructions
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140049505118144 [Note] InnoDB: Initializing buffer pool, size = 256.0M
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140332467640256 [Note] InnoDB: Using mutexes to ref count buffer pool pages
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140332467640256 [Note] InnoDB: The InnoDB memory heap is disabled
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140332467640256 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140332467640256 [Note] InnoDB: Memory barrier is not used
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140332467640256 [Note] InnoDB: Compressed tables use zlib 1.2.8
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140332467640256 [Note] InnoDB: Using Linux native AIO
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140332467640256 [Note] InnoDB: Using generic crc32 instructions
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140332467640256 [Note] InnoDB: Initializing buffer pool, size = 256.0M
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 139917736122304 [Note] InnoDB: Using mutexes to ref count buffer pool pages
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140267101366208 [Note] InnoDB: Using mutexes to ref count buffer pool pages
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140267101366208 [Note] InnoDB: The InnoDB memory heap is disabled
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140267101366208 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140267101366208 [Note] InnoDB: Memory barrier is not used
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 139917736122304 [Note] InnoDB: The InnoDB memory heap is disabled
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140267101366208 [Note] InnoDB: Compressed tables use zlib 1.2.8
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140267101366208 [Note] InnoDB: Using Linux native AIO
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 139917736122304 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 139917736122304 [Note] InnoDB: Memory barrier is not used
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 139917736122304 [Note] InnoDB: Compressed tables use zlib 1.2.8
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 139917736122304 [Note] InnoDB: Using Linux native AIO
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 139917736122304 [Note] InnoDB: Using generic crc32 instructions
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 139917736122304 [Note] InnoDB: Initializing buffer pool, size = 256.0M
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140267101366208 [Note] InnoDB: Using generic crc32 instructions
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140267101366208 [Note] InnoDB: Initializing buffer pool, size = 256.0M
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140049505118144 [Note] InnoDB: Completed initialization of buffer pool
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140332467640256 [Note] InnoDB: Completed initialization of buffer pool
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140267101366208 [Note] InnoDB: Completed initialization of buffer pool
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 139917736122304 [Note] InnoDB: Completed initialization of buffer pool
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140332467640256 [Note] InnoDB: Highest supported file format is Barracuda.
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140049505118144 [Note] InnoDB: Highest supported file format is Barracuda.
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140267101366208 [Note] InnoDB: Highest supported file format is Barracuda.
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 139917736122304 [Note] InnoDB: Highest supported file format is Barracuda.
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140267101366208 [Note] InnoDB: 128 rollback segment(s) are active.
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140267101366208 [Note] InnoDB: Waiting for purge to start
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140049505118144 [Note] InnoDB: 128 rollback segment(s) are active.
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140049505118144 [Note] InnoDB: Waiting for purge to start
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 139917736122304 [Note] InnoDB: 128 rollback segment(s) are active.
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 139917736122304 [Note] InnoDB: Waiting for purge to start
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140267101366208 [Note] InnoDB:  Percona XtraDB (http://www.percona.com) 5.6.26-76.0 started; log sequence number 1616819
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140049505118144 [Note] InnoDB:  Percona XtraDB (http://www.percona.com) 5.6.26-76.0 started; log sequence number 1616819
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 139917736122304 [Note] InnoDB:  Percona XtraDB (http://www.percona.com) 5.6.26-76.0 started; log sequence number 1616819
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140332467640256 [Note] InnoDB: 128 rollback segment(s) are active.
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140332467640256 [Note] InnoDB: Waiting for purge to start
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140266455402240 [Note] InnoDB: Dumping buffer pool(s) not yet started
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 139917090850560 [Note] InnoDB: Dumping buffer pool(s) not yet started
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140048859105024 [Note] InnoDB: Dumping buffer pool(s) not yet started
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140332467640256 [Note] InnoDB:  Percona XtraDB (http://www.percona.com) 5.6.26-76.0 started; log sequence number 1616985
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140267101366208 [Note] Plugin 'FEEDBACK' is disabled.
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 139917736122304 [Note] Plugin 'FEEDBACK' is disabled.
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140331819435776 [Note] InnoDB: Dumping buffer pool(s) not yet started
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140049505118144 [Note] Plugin 'FEEDBACK' is disabled.
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140332467640256 [Note] Plugin 'FEEDBACK' is disabled.
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 139917736122304 [Note] Server socket created on IP: '127.0.0.1'.
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140049505118144 [Note] Server socket created on IP: '127.0.0.1'.
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140267101366208 [Note] Server socket created on IP: '127.0.0.1'.
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140332467640256 [Note] Server socket created on IP: '127.0.0.1'.
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 139917736122304 [Note] Reading of all Master_info entries succeded
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 139917736122304 [Note] Added new Master_info '' to hash table
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 139917736122304 [Note] /usr/sbin/mysqld: ready for connections.
Jan  7 10:34:20 jessie mysqld: Version: '10.1.10-MariaDB-1~jessie-log'  socket: '/var/run/mysqld3308/mysqld3308.sock'  port: 3308  mariadb.org binary distribution
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140332467640256 [Note] Reading of all Master_info entries succeded
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140332467640256 [Note] Added new Master_info '' to hash table
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140267101366208 [Note] Reading of all Master_info entries succeded
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140267101366208 [Note] Added new Master_info '' to hash table
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140267101366208 [Note] /usr/sbin/mysqld: ready for connections.
Jan  7 10:34:20 jessie mysqld: Version: '10.1.10-MariaDB-1~jessie-log'  socket: '/var/run/mysqld3309/mysqld3309.sock'  port: 3309  mariadb.org binary distribution
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140049505118144 [Note] Reading of all Master_info entries succeded
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140049505118144 [Note] Added new Master_info '' to hash table
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140049505118144 [Note] /usr/sbin/mysqld: ready for connections.
Jan  7 10:34:20 jessie mysqld: Version: '10.1.10-MariaDB-1~jessie-log'  socket: '/var/run/mysqld3307/mysqld3307.sock'  port: 3307  mariadb.org binary distribution
Jan  7 10:34:20 jessie mysqld: 2016-01-07 10:34:20 140332467640256 [Note] /usr/sbin/mysqld: ready for connections.
Jan  7 10:34:20 jessie mysqld: Version: '10.1.10-MariaDB-1~jessie-log'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  mariadb.org binary distribution
Jan  7 10:34:30 jessie mysqld: 2016-01-07 10:34:30 140332466841344 [Warning] Access denied for user 'multi_admin'@'localhost' (using password: YES)
Jan  7 10:34:30 jessie mysqld: 2016-01-07 10:34:30 140049504319232 [Warning] Access denied for user 'multi_admin'@'localhost' (using password: YES)
Jan  7 10:34:30 jessie mysqld: 2016-01-07 10:34:30 139917735323392 [Warning] Access denied for user 'multi_admin'@'localhost' (using password: YES)
Jan  7 10:34:30 jessie mysqld: 2016-01-07 10:34:30 140267100567296 [Warning] Access denied for user 'multi_admin'@'localhost' (using password: YES)

Úgy néz ki, minden rendben van, egy kivétellel: még nem létezik egyik kiszolgálónál sem a multi_admin felhasználó. De ezt hamarosan pótolni fogjuk. Ami fontos, hogy mind a négy kiszolgáló-példány hiba nélkül működik.

Két fontos rendszerfelhasználó

Az első a debian-sys-maint felhasználó, akinek a segítségével az adatbázisok karbantartási feladatai futnak le. A felhasználónév és a hozzá tartozó jelszó az egyes debian.cnf fájl példányokban található meg, a kapcsolódáshoz szükséges egyéb információkkal (pl. socket) együtt. Készítsük el a /etc/mysql/restore.sql fájlt ezzel a tartalommal:

GRANT ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE USER, CREATE VIEW, DELETE, DROP, EVENT, EXECUTE, FILE, INDEX, INSERT, LOCK TABLES, PROCESS, REFERENCES, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SELECT, SHOW DATABASES, SHOW VIEW, SHUTDOWN, SUPER, TRIGGER, UPDATE ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'uWDfNoDMMISVV13l' WITH GRANT OPTION;
FLUSH PRIVILEGES;

A fájlban található jelszót - IDENTIFIED BY 'uWDfNoDMMISVV13l' - a saját debian.cnf fájl példányodból kell kimásolnod! A debian-sys-maint felhasználót a 3307, 3308 és 3309-es példányhoz kell hozzáadnod, mivel a 3306-os példányhoz a MariaDB csomag telepítésekor már hozzáadásra került:

mysql -h 127.0.0.1 --port=3307 -u root -D mysql < restore.sql
mysql -h 127.0.0.1 --port=3308 -u root -D mysql < restore.sql
mysql -h 127.0.0.1 --port=3309 -u root -D mysql < restore.sql

A másik felhasználó a multi_admin, akire az adatbázis-kiszolgáló példányok szabályos leállításához lesz szükségünk. Készítsük el a /etc/mysql/multi_admin.sql fájlt az alábbi tartalommal:

GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost' IDENTIFIED BY 'Pa$$w0rd';
flush privileges;

Adjuk hozzá a felhasználót mind a négy kiszolgálóhoz:

mysql -h 127.0.0.1 --port=3306 -u root -p < multi_admin.sql
mysql -h 127.0.0.1 --port=3307 -u root < multi_admin.sql
mysql -h 127.0.0.1 --port=3308 -u root < multi_admin.sql
mysql -h 127.0.0.1 --port=3309 -u root < multi_admin.sql

Helyezzük biztonságba az új MariaDB példányokat is:

mysql_secure_installation -h 127.0.0.1 -P 3307
mysql_secure_installation -h 127.0.0.1 -P 3308
mysql_secure_installation -h 127.0.0.1 -P 3309

A folyamat menete az alábbi:

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
ERROR 1008 (HY000) at line 1: Can't drop database 'test'; database doesn't exist
 ... Failed!  Not critical, keep moving...
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Fontos: a fenti folyamat során adjuk meg az új példányok root felhasználójának jelszavát is (most: Pa$$w0rd).

Futtassuk le a /etc/mysql/debain-startxxxx szkripteket is:

root@jessie:/etc/mysql# ./debian-start
Checking for corrupt, not cleanly closed and upgrade needing tables.

Az eredmény a syslogban:

Jan  7 10:53:14 jessie ./debian-start[8806]: Upgrading MySQL tables if necessary.
Jan  7 10:53:14 jessie ./debian-start[8809]: /usr/bin/mysql_upgrade: the '--basedir' option is always ignored
Jan  7 10:53:14 jessie ./debian-start[8809]: Looking for 'mysql' as: /usr/bin/mysql
Jan  7 10:53:14 jessie ./debian-start[8809]: Looking for 'mysqlcheck' as: /usr/bin/mysqlcheck
Jan  7 10:53:14 jessie ./debian-start[8809]: This installation of MySQL is already upgraded to 10.1.10-MariaDB, use --force if you still need to run mysql_upgrade
Jan  7 10:53:14 jessie ./debian-start[8816]: Checking for insecure root accounts.
Jan  7 10:53:14 jessie ./debian-start[8820]: Triggering myisam-recover for all MyISAM tables

Tehát az első adatbázis-kiszolgálónk hiba nélkül működik.

root@jessie:/etc/mysql# ./debian-start3307
Checking for corrupt, not cleanly closed and upgrade needing tables.

Az eredmény a syslogban:

Jan  7 10:53:51 jessie ./debian-start3307[8857]: Upgrading MySQL tables if necessary.
Jan  7 10:53:52 jessie ./debian-start3307[8860]: /usr/bin/mysql_upgrade: the '--basedir' option is always ignored
Jan  7 10:53:52 jessie ./debian-start3307[8860]: Looking for 'mysql' as: /usr/bin/mysql
Jan  7 10:53:52 jessie ./debian-start3307[8860]: Looking for 'mysqlcheck' as: /usr/bin/mysqlcheck
Jan  7 10:53:52 jessie ./debian-start3307[8860]: Phase 1/6: Checking and upgrading mysql database
Jan  7 10:53:52 jessie ./debian-start3307[8860]: Processing databases
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql.column_stats                                 OK
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql.columns_priv                                 OK
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql.db                                           OK
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql.event                                        OK
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql.func                                         OK
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql.gtid_slave_pos                               OK
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql.help_category                                OK
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql.help_keyword                                 OK
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql.help_relation                                OK
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql.help_topic                                   OK
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql.host                                         OK
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql.index_stats                                  OK
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql.innodb_index_stats                           OK
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql.innodb_table_stats                           OK
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql.plugin                                       OK
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql.proc                                         OK
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql.procs_priv                                   OK
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql.proxies_priv                                 OK
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql.roles_mapping                                OK
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql.servers                                      OK
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql.table_stats                                  OK
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql.tables_priv                                  OK
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql.time_zone                                    OK
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql.time_zone_leap_second                        OK
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql.time_zone_name                               OK
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql.time_zone_transition                         OK
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql.time_zone_transition_type                    OK
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql.user                                         OK
Jan  7 10:53:52 jessie ./debian-start3307[8860]: Phase 2/6: Fixing views
Jan  7 10:53:52 jessie ./debian-start3307[8860]: Processing databases
Jan  7 10:53:52 jessie ./debian-start3307[8860]: information_schema
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql
Jan  7 10:53:52 jessie ./debian-start3307[8860]: performance_schema
Jan  7 10:53:52 jessie ./debian-start3307[8860]: Phase 3/6: Running 'mysql_fix_privilege_tables'
Jan  7 10:53:52 jessie ./debian-start3307[8860]: Phase 4/6: Fixing table and database names
Jan  7 10:53:52 jessie ./debian-start3307[8860]: Processing databases
Jan  7 10:53:52 jessie ./debian-start3307[8860]: information_schema
Jan  7 10:53:52 jessie ./debian-start3307[8860]: mysql
Jan  7 10:53:52 jessie ./debian-start3307[8860]: performance_schema
Jan  7 10:53:52 jessie ./debian-start3307[8860]: Phase 5/6: Checking and upgrading tables
Jan  7 10:53:52 jessie ./debian-start3307[8860]: Processing databases
Jan  7 10:53:52 jessie ./debian-start3307[8860]: information_schema
Jan  7 10:53:52 jessie ./debian-start3307[8860]: performance_schema
Jan  7 10:53:52 jessie ./debian-start3307[8860]: Phase 6/6: Running 'FLUSH PRIVILEGES'
Jan  7 10:53:52 jessie ./debian-start3307[8860]: OK
Jan  7 10:53:52 jessie ./debian-start3307[8887]: Checking for insecure root accounts.
Jan  7 10:53:52 jessie ./debian-start3307[8891]: Triggering myisam-recover for all MyISAM tables

Tehát itt még volt némi teendő - konkrétan egy adatbázis-upgrade művelet - amely, hála a jól hozzáadott debian-sys-maint felhasználónak, hiba nélkül le is futott. A debian-start3308 és a debian-start3309 lefuttatásakor ugyanilyen eredményeket kell tapasztalnunk. Mindenesetre a syslogban ellenőrizd le. Ezzel gyakorlatilag készen vagyunk, a négy kiszolgáló vidáman működik.

A kiszolgálók használata

A kiszolgáló példányokat a /etc/init.d/mysql szkript segítségével lehet menedzselni:

/etc/init.d/mysql start | stop | restart | report N

A végén az 'N' helyére az egyes példányok azonosítóit - 3306, 3307, 3308, 3309 - írhatod be, így az egyes műveletek - start, stop, restart, report - kizárólag arra a kiszolgáló példányra lesznek hatással. Ha az 'N'-et elhagyod, az azt megelőző művelet valamennyi kiszolgáló példányra hatással lesz.

Az egyes példányokat a nekik megfelelő konfigurációs fájlokban - /etc/mysql/conf.d/myxxxx.cnf - tudod eltérő működésre bírni.

Néhány parancs a példa kedvéért:

root@jessie:/var/log# /etc/init.d/mysql report
Reporting MariaDB servers
MariaDB server from group: mysqld3306 is running
MariaDB server from group: mysqld3307 is running
MariaDB server from group: mysqld3308 is running
MariaDB server from group: mysqld3309 is running

root@jessie:/var/log# /etc/init.d/mysql stop 3308
root@jessie:/var/log# /etc/init.d/mysql report
Reporting MariaDB servers
MariaDB server from group: mysqld3306 is running
MariaDB server from group: mysqld3307 is running
MariaDB server from group: mysqld3308 is not running
MariaDB server from group: mysqld3309 is running

root@jessie:/var/log# /etc/init.d/mysql stop 3306
root@jessie:/var/log# /etc/init.d/mysql report
Reporting MariaDB servers
MariaDB server from group: mysqld3306 is not running
MariaDB server from group: mysqld3307 is running
MariaDB server from group: mysqld3308 is not running
MariaDB server from group: mysqld3309 is running

root@jessie:/var/log# /etc/init.d/mysql start 3306
root@jessie:/var/log# /etc/init.d/mysql start 3308
root@jessie:/var/log# /etc/init.d/mysql report
Reporting MariaDB servers
MariaDB server from group: mysqld3306 is running
MariaDB server from group: mysqld3307 is running
MariaDB server from group: mysqld3308 is running
MariaDB server from group: mysqld3309 is running

root@jessie:/var/log# /etc/init.d/mysql stop
root@jessie:/var/log# /etc/init.d/mysql report
Reporting MariaDB servers
MariaDB server from group: mysqld3306 is not running
MariaDB server from group: mysqld3307 is not running
MariaDB server from group: mysqld3308 is not running
MariaDB server from group: mysqld3309 is not running

root@jessie:/var/log# /etc/init.d/mysql start
root@jessie:/var/log# /etc/init.d/mysql report
Reporting MariaDB servers
MariaDB server from group: mysqld3306 is running
MariaDB server from group: mysqld3307 is running
MariaDB server from group: mysqld3308 is running
MariaDB server from group: mysqld3309 is running
root@jessie:/var/log#

A mostani /etc/init.d/mysql fájl sokkal egyszerűbb felépítésű, mint az eredeti, kizárólag egyetlen kiszolgáló működtetésére kihegyezett, de sokkal több szolgáltatással rendelkező /etc/init.d/mysql fájl. Az eredeti például megnézi, hogy a kiadott parancsok végrehajtása sikerült-e vagy sem (például egy leállítás). A mostani viszont ezt nem teszi meg nekünk, így sokkal jobban oda kell figyelnünk az egyes példányok elindulására, működésére vagy szabályos leállítására. Ez különösen akkor fontos, amikor újabb MariaDB csomag jelenik meg a csomagtárolóban, mi pedig szeretnénk frissíteni a rendszert.

A kiszolgálók frissítése

Ha újabb MariaDB változat jelenik meg, a frissítés kicsit bonyolultabb folyamat lesz, mint egyszerűen csak kiadni az 'apt-get upgrade' parancsot. Nézzük szépen sorjában, hogyan is kell ezt ügyesen végrehajtani:

  1. A '/etc/init.d/mysql stop' paranccsal állítsuk le a kiszolgálókat
  2. A '/etc/init.d/mysql report' paranccsal győződj meg arról, hogy a kiszolgálók tényleg leálltak
  3. A 'ps ax | grep mysql' paranccsal szintén leellenőrizheted ugyanezt, illetve a syslogban is
  4. Ha a kiszolgálók valóban leálltak, akkor jöhet az 'apt-get upgrade'
  5. A frissítési folyamat végén a '/etc/init.d/mysql report' paranccsal ellenőrizd, hogy mely példányok futnak (remélhetőleg egyik sem)
  6. Indítsd el az egyes kiszolgáló példányokat
  7. Ellenőrizd le, hogy futnak-e a kiszolgálóid
  8. A /etc/mysql mappában található debian-start, illetve debian-startxxxx fájlokat egyenként indítsd el, amelyek elvégzik az adatbázisok megfelelő frissítését és ellenőrzését, szükség esetén javítását
  9. A syslogban ellenőrizd az egyes kiszolgálók üzeneteit
  10. Ha minden rendben van, örülhetsz :-)

Ha pedig minden jól ment és semmit sem hagytam ki, akkor remélhetőleg van egy működőképes adatbázis-kiszolgáló készleted, egyetlen szerveren megvalósítva.

UPDATE - 2016.02.02: kijött a MariaDB 10.1.11-es változata, a csomag frissítése során az alábbiakat tapasztaltam:

  • A frissítés után automatikusan elindult mind a négy kiszolgáló (de ez végül is nem baj).
  • Az alapértelmezett /var/lib/mysql mappába  a frissítés alatt visszakerült egy alapértelmezett (és üres) MariaDB adatbázis, de a 3306-os példány nem azt használta a frissítés utáni elinduláskor, hanem az általunk kialakított, /srv/db/mysql mappában lévőt.

A csomag frissítése egyébként minden hiba nélkül lefutott. Vagyis lehet örülni...