Benutzer-Werkzeuge

Webseiten-Werkzeuge


mysql_5.7_-_server_mit_gtid

MySQL 5.7 - Server mit GTID

MySQL 5.7

Ubuntu 16.04.5 LTS - Xenial

als erstes "Update":

> time (locale-gen ; apt-get autoclean ; dpkg --configure -a ; apt-get update ; aptitude update ; apt update ; apt-get dist-upgrade ; aptitude autoclean ; apt-get autoremove) && echo OK ; dpkg --configure -a ; apt purge $(dpkg -l | sed "s/^rc[ ]*//;s/ .*//" | egrep ^linux-) ; dpkg -l | sed "s/^ii[ ]*//;s/ .*//" | egrep ^linux- ; uname -a

…ggf. jetzt ein Reboot durchführen.

Leider kann MySQL auf Ubuntu 16.04 installiert werden, wenn das "datadir" ein Mount-Point ist.

> df -h
Filesystem                    Size  Used Avail Use% Mounted on
...
/dev/mapper/xenial--vg-mysql   96G  194M   91G   1% /var/lib/mysql
...

work-around:

> umount /var/lib/mysql
> rm -fr /var/lib/mysql
> mkdir /var/lib/mysql
> chown mysql:mysql /var/lib/mysql
> apt install mysql-server
> service mysql stop
> mv /var/lib/mysql /var/lib/data
> mkdir /var/lib/mysql
> chown mysql:mysql /var/lib/mysql
> mount /var/lib/mysql
> mv /var/lib/data /var/lib/mysql/
> chown -R mysql:mysql /var/lib/mysql
> sed -ie 's|^datadir[ \t][ \t]*=[ ]/var/lib/mysql.*|datadir              = /var/lib/mysql/data|' /etc/mysql/mysql.conf.d/mysqld.cnf && rm -f /etc/mysql/mysql.conf.d/mysqld.cnfe
> sed -ie 's|^bind-address[ \t].*|bind-address            = 0.0.0.0|' /etc/mysql/mysql.conf.d/mysqld.cnf && rm -f /etc/mysql/mysql.conf.d/mysqld.cnfe
> dpkg --configure -a
> service mysql start
> service mysql status
> mysqlshow
> echo "SELECT Host,User,plugin,authentication_string,password_last_changed,account_locked FROM user; CREATE USER 'borg' IDENTIFIED BY 'XXXXXXXX'; GRANT REPLICATION CLIENT,RELOAD,REPLICATION SLAVE ON *.* TO 'borg'@'%'; FLUSH PRIVILEGES; SELECT Host,User,plugin,authentication_string,password_last_changed,account_locked FROM user;" | mysql -t mysql
> echo "STOP SLAVE; CHANGE MASTER TO MASTER_HOST='10.10.10.11', MASTER_PORT=3306, MASTER_USER='borg', MASTER_PASSWORD='XXXXXXXX', MASTER_AUTO_POSITION=1 FOR CHANNEL 'dbserver01'; START SLAVE;" | mysql
> echo "STOP SLAVE; CHANGE MASTER TO MASTER_HOST='10.10.10.12', MASTER_PORT=3306, MASTER_USER='borg', MASTER_PASSWORD='XXXXXXXX', MASTER_AUTO_POSITION=1 FOR CHANNEL 'dbserver02'; START SLAVE;" | mysql
> echo "STOP SLAVE; CHANGE MASTER TO MASTER_HOST='10.10.10.13', MASTER_PORT=3306, MASTER_USER='borg', MASTER_PASSWORD='XXXXXXXX', MASTER_AUTO_POSITION=1 FOR CHANNEL 'dbserver03'; START SLAVE;" | mysql

Csync2

siehe auch Csync2

> apt install csync2
> openssl req -rand /dev/urandom -sha512 -new -x509 -newkey rsa:4096 -nodes -days 7000 -keyout /etc/csync2_ssl_key.pem -keyform PEM -out /etc/csync2_ssl_cert.pem -outform PEM -subj "/C=DE/ST=Bundesland/L=Stadt/O=Organisation/OU=Abteilung/emailAddress=default@domain.de"
> vi /etc/inetd.conf
...
csync2          stream  tcp     nowait  root    /usr/sbin/csync2        csync2 -i -l
> vi /etc/hosts
...
10.10.20.11     dbserver01
10.10.20.12     dbserver02
10.10.20.13     dbserver03
...
/etc/csync2.cfg
group Loadbalancer #group name, we can have multiple groups
{   
        host dbserver01; #master server
        host dbserver02; #slave server
        host dbserver03; #slave server
 
        key /etc/csync2_ssl.key;
 
        include /etc/csync2.cfg;
        include /etc/hosts.allow;
        include /etc/hosts;
        include /root/bin/;
        include /root/.ssh;
        include /root/.my.cnf;
 
        backup-directory /var/backups/csync2;
        backup-generations 10;
        auto none; #no automatic sync
}   

KeepaliveD

siehe auch: KeepaliveD

> echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf
> sysctl -p
> apt install keepalived
> update-rc.d keepalived defaults

<hidden /etc/keepalived/keepalived.conf>

/etc/keepalived/keepalived.conf
#
 
vrrp_script chk_dienst {
   script "/root/bin/check_db.sh $(hostname -s) 3306"   # einfachste Form einen Dienst zu prüfen
   interval 2                                           # Alle 2 Sekunden prüfen
   weight 2                                             # 2 Punkte hinzufügen wenn OK
}
 
vrrp_instance Netz1 {
   interface ens1                                       # Zu überwachendes Interface
   state EQUAL
   virtual_router_id 71                                 # ID der Route
   priority 100                                         # 102 - Master, 101 - Backup
   virtual_ipaddress {
       10.10.20.10                                      # Die virtuelle IP Adresse
   }
   track_script {
       chk_dienst
   }
}
 
vrrp_instance Netz2 {
   interface ens2                                       # Zu überwachendes Interface
   state EQUAL
   virtual_router_id 72                                 # ID der Route
   priority 100                                         # 102 - Master, 101 - Backup
   virtual_ipaddress {
       10.10.10.10                                      # Die virtuelle IP Adresse
   }
   track_script {
       chk_dienst
   }
}

</hidden>

<hidden /root/bin/check_db.sh>

/root/bin/check_db.sh
#!/bin/bash
 
#------------------------------------------------------------------------------#
#
# DB-Check
#
# /root/bin/check_db.sh $(hostname -s) 3306
#
#------------------------------------------------------------------------------#
 
VERSION="v2018101900"
 
if [ "x${2}" = x ] ; then
	echo "${0} [local-hostname] [DB-Port]"
	echo "${0} dbserver01 3306"
	exit 1
else
	mysql_host="${1}";
	mysql_port="${2}";
fi
 
 
node_response=$(echo "SHOW GLOBAL VARIABLES LIKE 'hostname';" | mysql --defaults-file=/root/.my.cnf -hlocalhost -P${mysql_port} -N | awk '{ print $2 }');
 
echo "${mysql_host} ? ${node_response}"
if [ "${node_response}" == "${mysql_host}" ]
then
	echo "Hostname matched"
	exit 0;
else
	echo "Hostname not matched"
	exit 1;
fi

</hidden>

> service keepalived restart
/home/http/wiki/data/pages/mysql_5.7_-_server_mit_gtid.txt · Zuletzt geändert: von manfred