Benutzer-Werkzeuge

Webseiten-Werkzeuge


die_replikation_der_mysql_5.6_mit_gtid

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
die_replikation_der_mysql_5.6_mit_gtid [2015-02-06 23:59:52] – angelegt manfreddie_replikation_der_mysql_5.6_mit_gtid [2017-04-20 11:00:30] (aktuell) – [Die Replikation der MySQL 5.6 mit GTID] manfred
Zeile 1: Zeile 1:
 +====== Die Replikation der MySQL 5.6 mit GTID ======
 +
 +  * [[http://www.percona.com/blog/2013/02/08/how-to-createrestore-a-slave-using-gtid-replication-in-mysql-5-6/|How to create/restore a slave using GTID replication in MySQL 5.6]]
 +  * [[http://oracle2363.rssing.com/chan-26038749/all_p1.html]]
 +  * [[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]]
 +
 +<file bash /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.%
 +</file>
 +==== 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
 +