2017-05-15 1 views
1

Um eine hohe Verfügbarkeit für die MySQL-Datenbank zu erreichen, verwende ich das Dienstprogramm mysqlfailover. Alles läuft gut, wenn ichKeine Antwort beim Ausführen von --exec-after script

mysqlfailover --master=root:[email protected]:3306 --slaves=root:[email protected]:3306 --rpl-user=slave-user:slave-pass --log=log.txt --force --daemon=start 

leite und erzeugt folgende Ausgabe

2017-05-15 12:41:06 PM INFO Server 'master-host:3306' is using MySQL version 5.6.36-log. 
2017-05-15 12:41:06 PM INFO Server 'slave-host:3306' is using MySQL version 5.6.36-log. 
2017-05-15 12:41:06 PM INFO Unregistering instance on master. 
2017-05-15 12:41:06 PM INFO Checking privileges. 
2017-05-15 12:41:06 PM INFO Unregistering existing instances from slaves. 
2017-05-15 12:41:06 PM INFO Registering instance on master. 
2017-05-15 12:41:06 PM INFO Failover daemon started. 
2017-05-15 12:41:06 PM INFO Failover mode = auto. 
2017-05-15 12:41:09 PM INFO Master Information 
2017-05-15 12:41:09 PM INFO Binary Log File: mysql-bin.000020, Position: 191, Binlog_Do_DB: N/A, Binlog_Ignore_DB: N/A 
2017-05-15 12:41:09 PM INFO GTID Executed Set: 952b004a-3567-11e7-b46e-0a767d02b017:1-10 
2017-05-15 12:41:09 PM INFO Getting health for master: master-host:3306. 
2017-05-15 12:41:09 PM INFO Health Status: 
2017-05-15 12:41:09 PM INFO host: master-host, port: 3306, role: MASTER, state: UP, gtid_mode: ON, health: OK 
2017-05-15 12:41:09 PM INFO host: slave-host, port: 3306, role: SLAVE, state: UP, gtid_mode: ON, health: OK 

Wenn ich MySQL-Master-Daemon bin zu stoppen, ist der Ausgang

2017-05-15 12:40:01 PM INFO Master may be down. Waiting for 3 seconds. 
2017-05-15 12:40:16 PM INFO Failed to reconnect to the master after 3 attemps. 
2017-05-15 12:40:16 PM CRITICAL Master is confirmed to be down or unreachable. 
2017-05-15 12:40:16 PM INFO Failover starting in 'auto' mode... 
2017-05-15 12:40:16 PM INFO Candidate slave slave-host:3306 will become the new master. 
2017-05-15 12:40:16 PM INFO Checking slaves status (before failover). 
2017-05-15 12:40:16 PM INFO Preparing candidate for failover. 
2017-05-15 12:40:16 PM INFO Creating replication user if it does not exist. 
2017-05-15 12:40:16 PM INFO Stopping slaves. 
2017-05-15 12:40:16 PM INFO Performing STOP on all slaves. 
2017-05-15 12:40:16 PM INFO Switching slaves to new master. 
2017-05-15 12:40:16 PM INFO Disconnecting new master as slave. 
2017-05-15 12:40:16 PM INFO Starting slaves. 
2017-05-15 12:40:16 PM INFO Performing START on all slaves. 
2017-05-15 12:40:16 PM INFO Checking slaves for errors. 
2017-05-15 12:40:16 PM INFO Failover complete. 
2017-05-15 12:40:21 PM INFO Unregistering existing instances from slaves. 
2017-05-15 12:40:21 PM INFO Registering instance on new master slave-host:3306. 
2017-05-15 12:40:22 PM INFO Master Information 
2017-05-15 12:40:22 PM INFO Binary Log File: mysql-bin.000003, Position: 191, Binlog_Do_DB: N/A, Binlog_Ignore_DB: N/A 
2017-05-15 12:40:22 PM INFO GTID Executed Set: 952b004a-3567-11e7-b46e-0a767d02b017:1-10 
2017-05-15 12:40:22 PM INFO Getting health for master: slave-host:3306. 
2017-05-15 12:40:22 PM INFO Health Status: 
2017-05-15 12:40:22 PM INFO host: slave-host, port: 3306, role: MASTER, state: UP, gtid_mode: ON, health: OK 

Aber ich möchte ausführen Nach dem Umschalten oder Failover wird ein Skript ausgeführt. Obwohl der Zweck Skript etwas zu Datenbank-Konnektivität meiner Anwendung verwendet, aber zur Zeit einen Beispielskript exec.sh mit folgendem Inhalt

#!/bin/bash 
echo "creating a new file after failover" 
touch troubleshoot.txt 
exit 0 

Ich laufe Und jetzt, wenn ich bin mit dem Befehl

mysqlfailover --master=root:[email protected]:3306 --slaves=root:[email protected]:3306 --rpl-user=slave-user:slave-pass --log=log.txt --force --daemon=start --exec-after="./exec.sh" 

wird bei Aufheben der Registrierung am Master-Instanz Anhalten und der Ausgang ist

2017-05-15 13:04:42 PM INFO Master may be down. Waiting for 3 seconds. 
2017-05-15 13:04:57 PM INFO Failed to reconnect to the master after 3 attemps. 
2017-05-15 13:04:57 PM CRITICAL Master is confirmed to be down or unreachable. 
2017-05-15 13:04:57 PM INFO Failover starting in 'auto' mode... 
2017-05-15 13:04:57 PM INFO Candidate slave slave-host:3306 will become the new master. 
2017-05-15 13:04:57 PM INFO Checking slaves status (before failover). 
2017-05-15 13:04:57 PM INFO Preparing candidate for failover. 
2017-05-15 13:04:57 PM INFO Creating replication user if it does not exist. 
2017-05-15 13:04:57 PM INFO Spawning external script. 
2017-05-15 13:04:57 PM INFO Unregistering instance on master 

Die Ausgabe sagt zwar "Laichen externes Skript", aber nach diesem Schritt ist nichts passiert. Außerdem habe ich überprüft, dass das Skript am Ende genug Ausführungsberechtigungen sowie 0 Exit-Status hat. Bitte helfen Sie mir herauszufinden, was das Problem sein könnte, das die weitere Ausführung stoppt.

+0

Vermutlich das obvous, aber haben Sie versucht, den vollständigen Pfad zu Ihrem Skript anstelle eines relativen Pfades anzugeben? – lloiacono

+1

@lloiacono Ja, die Angabe des vollständigen Pfads hat funktioniert. Vielen Dank. –

Antwort

0

Stellen Sie sicher, dass Sie anstelle des relativen Pfads den vollständigen Pfad zu Ihrem Skript angeben.

mysqlfailover --master=root:[email protected]:3306 --slaves=root:[email protected]:3306 --rpl-user=slave-user:slave-pass --log=log.txt --force --daemon=start --exec-after="/full/path/to/exec.sh" 
Verwandte Themen