Inhaltsverzeichnis

MySQL 8.0

siehe auch:

Installation von Oracle MySQL 8.0

root@db01:~# rm -f /etc/localtime ; ln -s /usr/share/zoneinfo/CET /etc/localtime
root@db01:~# timedatectl
               Local time: Mon 2023-06-19 14:26:33 CEST
           Universal time: Mon 2023-06-19 12:26:33 UTC
                 RTC time: Mon 2023-06-19 12:26:33
                Time zone: CET (CEST, +0200)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no
 
root@db01:~# service mysql restart
root@db01:~# echo "SHOW VARIABLES LIKE '%time_zone%';" | mysql -t
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | CEST   |
| time_zone        | SYSTEM |
+------------------+--------+

GTID-Replication

Alt:

STOP SLAVE;
RESET SLAVE ALL;
CHANGE MASTER TO MASTER_HOST='knoten01', MASTER_PORT=3306, MASTER_USER='otto', MASTER_PASSWORD='geheim', MASTER_AUTO_POSITION=1 FOR CHANNEL 'Knoten1';
CHANGE MASTER TO MASTER_HOST='knoten02', MASTER_PORT=3306, MASTER_USER='otto', MASTER_PASSWORD='geheim', MASTER_AUTO_POSITION=1 FOR CHANNEL 'Knoten2';
START SLAVE;

Neu (seit MySQL 8.0.23):

STOP REPLICA;
RESET REPLICA ALL;
CHANGE REPLICATION SOURCE TO SOURCE_HOST='knoten01', SOURCE_PORT=3306, SOURCE_USER=otto, SOURCE_PASSWORD='geheim', SOURCE_AUTO_POSITION=1 FOR CHANNEL 'Knoten1';
CHANGE REPLICATION SOURCE TO SOURCE_HOST='knoten02', SOURCE_PORT=3306, SOURCE_USER=otto, SOURCE_PASSWORD='geheim', SOURCE_AUTO_POSITION=1 FOR CHANNEL 'Knoten2';
START REPLICA;

CHANGE REPLICATION SOURCE TO SOURCE_LOG_FILE='source_log_name', SOURCE_LOG_POS=source_log_pos;
> echo "SHOW VARIABLES LIKE 'enforce_gtid_consistency';" | mysql -t
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| enforce_gtid_consistency | ON    |
+--------------------------+-------+

Installation von PXC 8.0

<hidden percona-keyring.gpg.b64>

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
jp4kKWnUoGdV0P1bUXaAbvXRzlIcx7dOD7tZ

</hidden>

> cat percona-keyring.gpg.b64 | base64 -d > /etc/apt/trusted.gpg.d/percona-keyring.gpg
> echo "deb http://repo.percona.com/ps-80/apt $(lsb_release -cs) main" >> /etc/apt/sources.list.d/percona.list
> echo "deb http://repo.percona.com/pxc-80/apt $(lsb_release -cs) main" >> /etc/apt/sources.list.d/percona.list
> echo "deb http://repo.percona.com/pxb-80/apt $(lsb_release -cs) main" >> /etc/apt/sources.list.d/percona.list
> echo "deb http://repo.percona.com/tools/apt $(lsb_release -cs) main" >> /etc/apt/sources.list.d/percona.list
> echo "deb http://repo.percona.com/prel/apt $(lsb_release -cs) main" >> /etc/apt/sources.list.d/percona.list
> apt update
> apt install percona-xtradb-cluster-server percona-xtrabackup-80 net-tools
> service mysql start
> netstat -antp | egrep "3306|4444|4567|4568"
> mysqlshow

minimale Konfiguration von PXC 8.0

<hidden /root/bin/Kontrolle.sh>

/root/bin/Kontrolle.sh
#!/bin/bash
 
echo "
SHOW VARIABLES WHERE Variable_name IN (
        'port',
        'wsrep_cluster_address'
);
SHOW STATUS WHERE variable_name IN (
        'wsrep_last_committed',
        'wsrep_local_send_queue_avg',
        'wsrep_local_recv_queue_avg',
        'wsrep_local_state_comment',
        'wsrep_cluster_size',
        'wsrep_local_bf_aborts'
);
" | mysql -t

</hidden>

<hidden /etc/mysql/mysql.conf.d/max_flushing.cnf>

/etc/mysql/mysql.conf.d/max_flushing.cnf
[mysqld]
# https://www.percona.com/blog/2020/05/07/prepare-mysql-for-a-safe-shutdown/
# 4. Configure InnoDB for Max Flushing.
# SET GLOBAL innodb_fast_shutdown=0; SET GLOBAL innodb_max_dirty_pages_pct=0; SET GLOBAL innodb_change_buffering='none';
# SHOW VARIABLES LIKE 'innodb_fast_shutdown'; SHOW VARIABLES LIKE 'innodb_max_dirty_pages_pct'; SHOW VARIABLES LIKE 'innodb_change_buffering';
innodb_fast_shutdown=0
innodb_max_dirty_pages_pct=0
innodb_change_buffering='none'

</hidden>


als erstes knoten01

> vi /etc/mysql/mysql.conf.d/mysqld.cnf
...
[mysqld]
server-id                       = 1
bind-address                    = 0.0.0.0
...
wsrep_cluster_address           = gcomm://
#wsrep_cluster_address           = "gcomm://knoten01,knoten02,knoten03"
...
wsrep_cluster_name              = clustername
wsrep_node_name                 = knoten01
...
> service mysql stop
> rm -f /var/lib/mysql/auto.cnf
> echo > /var/log/mysql/error.log
> service mysql start
> netstat -antp | grep -E "3306|4444|4567|4568"
> mysqlshow

> service mysql stop
> rm -f /var/lib/mysql/auto.cnf
> tar cvzf /tmp/mysql.tgz /var/lib/mysql
> service mysql start

knoten02 bzw. knoten03

/tmp/mysql.tgz muß von Knoten01 auf Knoten02 und Knoten03 übertragen werden.

> vi /etc/mysql/mysql.conf.d/mysqld.cnf
...
[mysqld]
server-id                       = 2
bind-address                    = 0.0.0.0
...
#wsrep_cluster_address           = gcomm://
wsrep_cluster_address           = "gcomm://knoten01,knoten02,knoten03"
...
wsrep_cluster_name              = clustername
wsrep_node_name                 = knoten02
...
> vi /etc/mysql/mysql.conf.d/mysqld.cnf
...
[mysqld]
server-id                       = 3
bind-address                    = 0.0.0.0
...
#wsrep_cluster_address           = gcomm://
wsrep_cluster_address           = "gcomm://knoten01,knoten02,knoten03"
...
wsrep_cluster_name              = clustername
wsrep_node_name                 = knoten03
...
> service mysql stop
> rm -f /var/lib/mysql/auto.cnf
> echo > /var/log/mysql/error.log
> rm -fr /var/lib/mysql/*
> tar xvzf /tmp/mysql.tgz -C /

> service mysql start
> netstat -antp | grep -E "3306|4444|4567|4568"
> mysqlshow

und am Ende knoten01

> vi /etc/mysql/mysql.conf.d/mysqld.cnf
...
[mysqld]
server-id                       = 1
bind-address                    = 0.0.0.0
...
#wsrep_cluster_address           = gcomm://
wsrep_cluster_address           = "gcomm://knoten01,knoten02,knoten03"
...
wsrep_cluster_name              = clustername
wsrep_node_name                 = knoten01
...
> service mysql stop
> rm -f /var/lib/mysql/auto.cnf
> echo > /var/log/mysql/error.log
> service mysql start
> netstat -antp | grep -E "3306|4444|4567|4568"
> mysqlshow

Percona-XtraDB

siehe auch:

percona-xtradb-cluster-5.7 percona-xtradb-cluster-8.0 Bemerkungen
/etc/mysql/percona-xtradb-cluster.conf.d/wsrep.cnf /etc/mysql/mysql.conf.d/mysqld.cnf default MySQL configuration file on Debian and Ubuntu
/etc/percona-xtradb-cluster.conf.d/wsrep.cnf /etc/my.cnf default MySQL configuration file on Red Hat and CentOS
default authentication plugin: mysql_native_password default authentication plugin: caching_sha2_password Be sure you are running on the latest 5.7 version before you upgrade to 8.0. ProxySQL option --syncusers will not work if the Percona XtraDB Cluster user is created using caching_sha2_password. Use the mysql_native_password authentication plugin in these cases. ⇒ default_authentication_plugin=mysql_native_password
character_set_server=latin1 character_set_server=utf8mb4 ... und 37 weitere Optionen haben ihre Voreinstellung geändert
keine Größenbeschränkung für Indizes vor 5.7.35 Größenbeschränkung für Indizes auf 767 Byte Vor MySQL 5.7.35 gab es keine Größenbeschränkung für Indizes in Tabellen mit redundantem oder kompaktem Zeilenformat. Ab MySQL 5.7.35 liegt die Grenze bei 767 Bytes. Ein Upgrade von einer MySQL-Version vor 5.7.35 auf MySQL 8.0 kann zu unzugänglichen Tabellen führen. Wenn eine Tabelle mit redundantem oder kompaktem Zeilenformat einen Index hat, der größer als 767 Bytes ist, löschen Sie den Index und erstellen Sie ihn vor einem Upgrade auf MySQL 8.0 neu.
query_cache_xxx The query cache was removed. Removed in MySQL 8.0.3.
log_bin=OFF log_bin=ON Bei Problemen, diese Option einfach aus der Konfiguration entfernen.
log_slave_updates log_replica_updates
expire_logs_days = 7 binlog_expire_logs_seconds = 604800
symbolic_links = 0 ist bereits die Voreinstellung
wsrep_slave_threads = 8 wsrep_applier_threads = 8
wsrep_sst_method = rsync wsrep_sst_method = xtrabackup-v2 Die Unterstützung für mysqldump war ab PXC 5.7 veraltet und wurde nun vollständig entfernt. Die einzige unterstützte SST-Methode ist xtrabackup-v2. Die erforderlichen Percona XtraBackup (PXB)-Binärdateien werden jetzt als Teil von PXC 8.0 ausgeliefert, sie werden nicht für die allgemeine Verwendung installiert. Wenn Sie also PXB außerhalb eines SST verwenden möchten, müssen Sie PXB separat installieren.
wsrep_sst_auth Da wsrep_sst_auth nur auf der Geberseite benötigt wird, um ein Backup zu erstellen, verwendet PXC 8.0 einen internen Benutzer (der speziell für die Verwendung durch PXC erstellt wurde) mit einem zufällig generierten Passwort. Da dieser Benutzer nur auf dem Spender benötigt wird, wird das Klartext-Passwort auf dem Joiner-Knoten nicht benötigt. Dieses Passwort besteht aus 32 zufällig generierten Zeichen. Für jede SST-Anfrage wird ein neues Passwort generiert. Der Klartext des Passworts wird nie gespeichert und verlässt den Knoten nie. Der Benutzername/das Passwort wird über unbenannte Pipes (stdin) an das SST-Skript gesendet.
pxc-encrypt-cluster-traffic In PXC 8 haben wir uns dafür entschieden, die Verschlüsselung standardmäßig für den gesamten Replikationsdatenverkehr zu aktivieren, um die höchste sofort einsatzbereite Sicherheit durchzusetzen. Obwohl dies eine offensichtliche Verbesserung ist, muss sich PXC 8 anders verhalten als sein Vorgänger PXC 5.7.
mysql_upgrade Wenn PXC 8.0 erkennt, dass das SST von einer niedrigeren Version stammt, wird mysql_upgrade automatisch aufgerufen. Außerdem wird bei Bedarf „RESET SLAVE ALL“ auf dem neuen Knoten ausgeführt. Dies wird aufgerufen, wenn ein SST von PXC 5.7 und PXC 8.0 empfangen wird.

Ab MySQL 8.0 - kein mysql_upgrade mehr:

> mysql_upgrade 
The mysql_upgrade client is now deprecated. The actions executed by the upgrade client are now done by the server.
To upgrade, please start the new MySQL binary with the older data directory. Repairing user tables is done automatically.
Restart is not required after upgrade.
The upgrade process automatically starts on running a new MySQL binary with an older data directory.
To avoid accidental upgrades, please use the --upgrade=NONE option with the MySQL binary.
The option --upgrade=FORCE is also provided to run the server upgrade sequence on demand.
It may be possible that the server upgrade fails due to a number of reasons.
In that case, the upgrade sequence will run again during the next MySQL server start.
If the server upgrade fails repeatedly, the server can be started with the --upgrade=MINIMAL option
to start the server without executing the upgrade sequence, thus allowing users to manually rectify the problem.