Inhaltsverzeichnis
Die Replikation der MySQL 5.6 mit GTID
- http://datacharmer.blogspot.de/2012/08/mysql-56-replication-gotchas-and-bugs.html - besondere Sicherheitsmaßnahmen bei Datenbanken mit GTID →
disable-gtid-unsafe-statements
Replikation mit GTID wieder herstellen
- /etc/mysql/conf.d/cluster.cnf
[mysqld] server_id = 330601 skip-name-resolve report_host = db3306knoten01 report_port = 3306 gtid_mode = ON enforce_gtid_consistency log_slave_updates = 1 master_verify_checksum = 1 master_info_repository = TABLE relay_log_info_repository = TABLE relay_log_recovery = 1 relay_log = mysql-relay-bin log_bin = mysql-bin binlog_format = ROW innodb_support_xa = 1 sync_binlog = 1 sync_master_info = 1 sync_relay_log = 1 sync_relay_log_info = 1 slave_sql_verify_checksum = 1 slave_skip_errors = 1032,1062 replicate_wild_ignore_table = temptabelle.%
mit SQL-Dump
1. Schrittfolge auf dem Slave
der Slave muss angehalten und zurück gesetzt werden:
> echo "STOP SLAVE;"|mysql > echo "STOP SLAVE; RESET MASTER; RESET SLAVE;" | mysql
2. Schrittfolge auf dem Master
auf dem Master muss die GTID ausgelesen werden:
> echo "SHOW GLOBAL VARIABLES LIKE 'GTID_EXECUTED';" | mysql -t +---------------+----------------------------------------------+ | Variable_name | Value | +---------------+----------------------------------------------+ | gtid_executed | 73667e7d-a21a-11e4-a93d-008dba029cdc:1-13959 | +---------------+----------------------------------------------+
Dump ziehen:
> mysqldump --all-databases --single-transaction --triggers --routines --events | guip -1 > dump.sql.gz
die GTID kann aber auch aus dem Dump ausgelesen werden (im Dump steht sie aber nicht als gtid_executed, sondern als GTID_PURGED drin):
> zcat dump.sql.gz | fgrep GTID_ SET @@GLOBAL.GTID_PURGED='73667e7d-a21a-11e4-a93d-008dba029cdc:1-13959';
… oder den Dump gleich an den Slave weiterreichen (ohne erst auf die Platte zu schreiben):
> mysqldump --all-databases --single-transaction --triggers --routines --events | mysql -h slave
3. Schrittfolge auf dem Slave
Den Slave zurücksetzen und die auf dem Master ausgelesene GTID setzen:
> echo "SHOW GLOBAL VARIABLES LIKE 'GTID_EXECUTED';"|mysql -t +---------------+----------------------------------------------+ | Variable_name | Value | +---------------+----------------------------------------------+ | gtid_executed | 73667e7d-a21a-11e4-a93d-008dba029cdc:1-13959 | +---------------+----------------------------------------------+
Wird der Slave nicht zurückgesetzt (bei dem auch die GTID gelöscht wird), dann gibt es Fehlermeldungen und eine Replikation kommt nicht zu stande!
> echo "STOP SLAVE; RESET MASTER; RESET SLAVE;" | mysql > echo "SHOW GLOBAL VARIABLES LIKE 'GTID_EXECUTED';"|mysql -t +---------------+-------+ | Variable_name | Value | +---------------+-------+ | gtid_executed | | +---------------+-------+ > echo "SET GLOBAL GTID_PURGED='73667e7d-a21a-11e4-a93d-008dba029cdc:1-13959';" | mysql > echo "SHOW GLOBAL VARIABLES LIKE 'GTID_EXECUTED';"|mysql -t +---------------+----------------------------------------------+ | Variable_name | Value | +---------------+----------------------------------------------+ | gtid_executed | 73667e7d-a21a-11e4-a93d-008dba029cdc:1-13959 | +---------------+----------------------------------------------+ > echo "CHANGE MASTER TO MASTER_HOST='master', MASTER_USER='fritz', MASTER_PASSWORD='Eema7ain', MASTER_AUTO_POSITION=1;" | mysql > echo "START SLAVE;" | mysql
mit Binär-Dump
1. Schrittfolge auf dem Master
auf dem Master muss die GTID ausgelesen werden:
> echo "SHOW GLOBAL VARIABLES LIKE 'GTID_EXECUTED';" | mysql -t +---------------+----------------------------------------------+ | Variable_name | Value | +---------------+----------------------------------------------+ | gtid_executed | 73667e7d-a21a-11e4-a93d-008dba029cdc:1-13959 | +---------------+----------------------------------------------+
MySQL stoppen:
> service mysql stop
Binär-Dump packen:
> tar czf /var/lib/mysql > dump.tgz
MySQL wieder starten:
> service mysql start
2. Schrittfolge auf dem Slave
die alte weg räumen und die neue auspacken:
> service mysql stop > rm -fr /var/lib/mysql/* > tar xzvf dump.tgz -C /
die eindeutigen Einstellungen vom Master müssen unbedingt vor dem ersten Start entfernt werden:
> rm /var/lib/mysql/auto.cnf > rm /var/lib/mysql/auto.cnf
starten und vorbereiten:
> service mysql start > mysql_upgrade --force > mysqlcheck -Ac > mysqlcheck -Ar
Wird der Slave nicht zurückgesetzt (bei dem auch die GTID gelöscht wird), dann gibt es Fehlermeldungen und eine Replikation kommt nicht zu stande!
Den Slave zurücksetzen und die auf dem Master ausgelesene GTID setzen:
> echo "STOP SLAVE; RESET MASTER; RESET SLAVE;" | mysql > echo "SHOW GLOBAL VARIABLES LIKE 'GTID_EXECUTED';"|mysql -t +---------------+-------+ | Variable_name | Value | +---------------+-------+ | gtid_executed | | +---------------+-------+ > echo "SET GLOBAL GTID_PURGED='73667e7d-a21a-11e4-a93d-008dba029cdc:1-13959';" | mysql > echo "SHOW GLOBAL VARIABLES LIKE 'GTID_EXECUTED';"|mysql -t +---------------+----------------------------------------------+ | Variable_name | Value | +---------------+----------------------------------------------+ | gtid_executed | 73667e7d-a21a-11e4-a93d-008dba029cdc:1-13959 | +---------------+----------------------------------------------+ > echo "CHANGE MASTER TO MASTER_HOST='master', MASTER_USER='fritz', MASTER_PASSWORD='Eema7ain', MASTER_AUTO_POSITION=1;" | mysql > echo "START SLAVE;" | mysql
sonstige
> echo "SHOW GLOBAL VARIABLES LIKE 'GTID_EXECUTED';SHOW GLOBAL VARIABLES LIKE 'GTID_PURGED';"|mysql -t > echo "SHOW GLOBAL VARIABLES LIKE '%CHECK%';"|mysql -t > echo "SHOW SLAVE STATUS \G; SHOW MASTER STATUS; SHOW SLAVE HOSTS;" | mysql -t
