参考资料:
http://www.clusterdb.com/mysql/replication-and-auto-failover-made-easy-with-mysql-utilities
环境介绍:
master: demoenv-trial-1
slaves: demoenv-trial-2 demoenv-trial-3
1. 安装 Percona Server,在所有服务器上:
$ sudo yum install http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm
$ sudo yum install Percona-Server-shared-compat
$ sudo yum install Percona-Server-server-56
$ sudo yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ sudo yum install mysql-utilities
1
2
3
4
5
$sudoyuminstallhttp://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm
$sudoyuminstallPercona-Server-shared-compat
$sudoyuminstallPercona-Server-server-56
$sudoyuminstallhttp://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
$sudoyuminstallmysql-utilities
2. 配置 /etc/my.cnf,在所有服务器上:
注意:确保 server-id 不同且 report-host 与自身主机名相同
$ sudo vim /etc/my.cnf
[mysqld]
# basic setting
datadir = /opt/mysql/data
tmpdir = /opt/mysql/tmp
socket = /opt/mysql/run/mysqld.sock
port = 3306
pid-file = /opt/mysql/run/mysqld.pid
# innodb setting
default-storage-engine = INNODB
innodb_file_per_table = 1
log-bin = /opt/mysql/binlogs/bin-log-mysqld
log-bin-index = /opt/mysql/binlogs/bin-log-mysqld.index
innodb_data_home_dir = /opt/mysql/data
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /opt/mysql/data
binlog-do-db = testdb
# server id
server-id=1
# gtids setting
binlog-format = ROW
log-slave-updates = true
gtid-mode = on
enforce-gtid-consistency = true
report-host = demoenv-trial-1
report-port = 3306
master-info-repository = TABLE
relay-log-info-repository = TABLE
sync-master-info = 1
# other settings
[mysqld_safe]
log-error = /opt/mysql/log/mysqld.log
pid-file = /opt/mysql/run/mysqld.pid
open-files-limit = 8192
[mysqlhotcopy]
interactive-timeout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
$sudovim/etc/my.cnf
[mysqld]
# basic setting
datadir=/opt/mysql/data
tmpdir=/opt/mysql/tmp
socket=/opt/mysql/run/mysqld.sock
port=3306
pid-file=/opt/mysql/run/mysqld.pid
# innodb setting
default-storage-engine=INNODB
innodb_file_per_table=1
log-bin=/opt/mysql/binlogs/bin-log-mysqld
log-bin-index=/opt/mysql/binlogs/bin-log-mysqld.index
innodb_data_home_dir=/opt/mysql/data
innodb_data_file_path=ibdata1:10M:autoextend
innodb_log_group_home_dir=/opt/mysql/data
binlog-do-db=testdb
# server id
server-id=1
# gtids setting
binlog-format=ROW
log-slave-updates=true
gtid-mode=on
enforce-gtid-consistency=true
report-host=demoenv-trial-1
report-port=3306
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
# other settings
[mysqld_safe]
log-error=/opt/mysql/log/mysqld.log
pid-file=/opt/mysql/run/mysqld.pid
open-files-limit=8192
[mysqlhotcopy]
interactive-timeout
3. 创建所需目录,在所有服务器上:
$ sudo mkdir -p /opt/mysql/{data,tmp,run,binlogs,log}
$ sudo chown mysql:mysql /opt/mysql/{data,tmp,run,binlogs,log}
1
2
$sudomkdir-p/opt/mysql/{data,tmp,run,binlogs,log}
$sudochownmysql:mysql/opt/mysql/{data,tmp,run,binlogs,log}
4. 初始化数据库,在所有服务器上:
$ sudo -i
# su - mysql
$ mysql_install_db --user=mysql --datadir=/opt/mysql/data/
$ exit
# exit
$ sudo /etc/init.d/mysql start
1
2
3
4
5
6
$sudo-i
# su - mysql
$mysql_install_db--user=mysql--datadir=/opt/mysql/data/
$exit
# exit
$sudo/etc/init.d/mysqlstart
5. 创建授权用户 root@'%' 以便通过 mysqlreplicate 来进行主从复制的配置,在所有服务器上:
$ mysql -uroot
mysql> grant all on *.* to root@'%' identified by 'pass' with grant option;
mysql> quit;
1
2
3
$mysql-uroot
mysql>grantallon *.*toroot@'%'identifiedby'pass'withgrantoption;
mysql>quit;
6. 创建复制所需的用户,在所有服务器上:
$ mysql -uroot
mysql> grant replication slave on *.* to 'rpl'@'%' identified by 'rpl';
mysql> quit;
1
2
3
$mysql-uroot
mysql>grantreplicationslaveon *.*to'rpl'@'%'identifiedby'rpl';
mysql>quit;
7. 配置主从复制,可选择任意一台服务器操作:
[dong.guo@demoenv-trial-1 ~]$ mysql -uroot
mysql> use mysql;
mysql> drop user root@'demoenv-trial-1';
mysql> quit;
[dong.guo@demoenv-trial-1 ~]$ mysqlreplicate --master=root:pass@'demoenv-trial-1':3306 --slave=root:pass@'demoenv-trial-2':3306 --rpl-user=rpl:rpl
# master on demoenv-trial-1: ... connected.
# slave on demoenv-trial-2: ... connected.
# Checking for binary logging on master...
# set up replication...
# ...done.
[dong.guo@demoenv-trial-1 ~]$ mysqlreplicate --master=root:pass@'demoenv-trial-1':3306 --slave=root:pass@'demoenv-trial-3':3306 --rpl-user=rpl:rpl
# master on demoenv-trial-1: ... connected.
# slave on demoenv-trial-3: ... connected.
# Checking for binary logging on master...
# set up replication...
# ...done.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[dong.guo@demoenv-trial-1~]$mysql-uroot
mysql>usemysql;
mysql>dropuserroot@'demoenv-trial-1';
mysql>quit;
[dong.guo@demoenv-trial-1~]$mysqlreplicate--master=root:pass@'demoenv-trial-1':3306--slave=root:pass@'demoenv-trial-2':3306--rpl-user=rpl:rpl
# master on demoenv-trial-1: ... connected.
# slave on demoenv-trial-2: ... connected.
# Checking for binary logging on master...
# set up replication...
# ...done.
[dong.guo@demoenv-trial-1~]$mysqlreplicate--master=root:pass@'demoenv-trial-1':3306--slave=root:pass@'demoenv-trial-3':3306--rpl-user=rpl:rpl
# master on demoenv-trial-1: ... connected.
# slave on demoenv-trial-3: ... connected.
# Checking for binary logging on master...
# set up replication...
# ...done.
8. 验证主从复制的数据完整性
[dong.guo@demoenv-trial-1 ~]$ mysql -uroot
mysql> create database testdb;
mysql> quit;
[dong.guo@demoenv-trial-1 ~]$ mysql -uroot -ppass -h'demoenv-trial-2' -e 'show databases;'
+-------------------+
| Database |
+-------------------+
| information_schema|
| mysql |
| performance_schema|
| test |
| testdb |
+-------------------+
[dong.guo@demoenv-trial-1 ~]$ mysql -uroot -ppass -h'demoenv-trial-3' -e 'show databases;'
+-------------------+
| Database |
+-------------------+
| information_schema|
| mysql |
| performance_schema|
| test |
| testdb |
+-------------------+
[dong.guo@demoenv-trial-1 ~]$ mysqlrplshow --master=rpl:rpl@'demoenv-trial-1':3306 --discover-slaves-login=root:pass;
# master on demoenv-trial-1: ... connected.
# Finding slaves for master: demoenv-trial-1:3306
# Replication Topology Graph
demoenv-trial-1:3306 (MASTER)
|
+--- demoenv-trial-2:3306 - (SLAVE)
|
+--- demoenv-trial-3:3306 - (SLAVE)
[dong.guo@demoenv-trial-1 ~]$ mysqlrplcheck --master=root:pass@'demoenv-trial-1' --slave=root:pass@'demoenv-trial-2'
# master on demoenv-trial-1: ... connected.
# slave on demoenv-trial-2: ... connected.
Test Description Status
---------------------
Checking for binary logging on master [pass]
Are there binlog exceptions? [WARN]
+--------+--------+-----------+
| server | do_db | ignore_db |
+--------+--------+-----------+
| master | testdb | |
+--------+--------+-----------+
Replication user exists? [pass]
Checking server_id values [pass]
Checking server_uuid values [pass]
Is slave connected to master? [pass]
Check master information file [pass]
Checking InnoDB compatibility [pass]
Checking storage engines compatibility [pass]
Checking lower_case_table_names setting [pass]
Checking slave delay (seconds behind master) [pass]
# ...done.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
[dong.guo@demoenv-trial-1~]$mysql-uroot
mysql>createdatabasetestdb;
mysql>quit;
[dong.guo@demoenv-trial-1~]$mysql-uroot-ppass-h'demoenv-trial-2'-e'show databases;'
+-------------------+
|Database|
+-------------------+
|information_schema|
|mysql|
|performance_schema|
|test|
|testdb|
+-------------------+
[dong.guo@demoenv-trial-1~]$mysql-uroot-ppass-h'demoenv-trial-3'-e'show databases;'
+-------------------+
|Database|
+-------------------+
|information_schema|
|mysql|
|performance_schema|
|test|
|testdb|
+-------------------+
[dong.guo@demoenv-trial-1~]$mysqlrplshow--master=rpl:rpl@'demoenv-trial-1':3306--discover-slaves-login=root:pass;
# master on demoenv-trial-1: ... connected.
# Finding slaves for master: demoenv-trial-1:3306
# Replication Topology Graph
demoenv-trial-1:3306(MASTER)
|
+---demoenv-trial-2:3306-(SLAVE)
|
+---demoenv-trial-3:3306-(SLAVE)
[dong.guo@demoenv-trial-1~]$mysqlrplcheck--master=root:pass@'demoenv-trial-1'--slave=root:pass@'demoenv-trial-2'
# master on demoenv-trial-1: ... connected.
# slave on demoenv-trial-2: ... connected.
TestDescriptionStatus
---------------------
Checkingforbinaryloggingonmaster[pass]
Aretherebinlogexceptions?[WARN]
+--------+--------+-----------+
|server|do_db|ignore_db|
+--------+--------+-----------+
|master|testdb||
+--------+--------+-----------+
Replicationuserexists?[pass]
Checkingserver_idvalues[pass]
Checkingserver_uuidvalues[pass]
Isslaveconnectedtomaster?[pass]
Checkmasterinformationfile[pass]
CheckingInnoDBcompatibility[pass]
Checkingstorageenginescompatibility[pass]
Checkinglower_case_table_namessetting[pass]
Checkingslavedelay(secondsbehindmaster)[pass]
# ...done.
9. 关闭 master 测试 auto-failover
[dong.guo@demoenv-trial-1 ~]$ mysqlfailover --master=root:pass@'demoenv-trial-1':3306 --discover-slaves-login=root:pass --rediscover
# Discovering slaves for master at demoenv-trial-1:3306
# Discovering slave at demoenv-trial-2:3306
# Found slave: demoenv-trial-2:3306
# Discovering slave at demoenv-trial-3:3306
# Found slave: demoenv-trial-3:3306
# Checking privileges.
# Discovering slaves for master at demoenv-trial-1:3306
MySQL Replication Failover Utility
Failover Mode = auto Next Interval = Sun Oct 20 06:58:52 2013
Master Information
------------------
Binary Log File Position Binlog_Do_DB Binlog_Ignore_DB
bin-log-mysqld.00000 299 testdb
GTID Executed Set
92df196b-3906-11e3-b6b6-000c290d14d7:1
Replication Health Status
+-----------------+------+--------+-------+-----------+---------------+
| host | port | role | state | gtid_mode | health |
+-----------------+------+--------+-------+-----------+---------------+
| demoenv-trial-1 | 3306 | MASTER | UP | ON | OK |
| demoenv-trial-2 | 3306 | SLAVE | UP | ON | OK |
| demoenv-trial-3 | 3306 | SLAVE | UP | ON | OK |
+-----------------+------+--------+-------+-----------+---------------+
Q-quit R-refresh H-health G-GTID Lists U-UUIDs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[dong.guo@demoenv-trial-1~]$mysqlfailover--master=root:pass@'demoenv-trial-1':3306--discover-slaves-login=root:pass--rediscover
# Discovering slaves for master at demoenv-trial-1:3306
# Discovering slave at demoenv-trial-2:3306
# Found slave: demoenv-trial-2:3306
# Discovering slave at demoenv-trial-3:3306
# Found slave: demoenv-trial-3:3306
# Checking privileges.
# Discovering slaves for master at demoenv-trial-1:3306
MySQLReplicationFailoverUtility
FailoverMode=autoNextInterval=SunOct2006:58:522013
MasterInformation
------------------
BinaryLogFilePositionBinlog_Do_DBBinlog_Ignore_DB
bin-log-mysqld.00000299testdb
GTIDExecutedSet
92df196b-3906-11e3-b6b6-000c290d14d7:1
ReplicationHealthStatus
+-----------------+------+--------+-------+-----------+---------------+
|host|port|role|state|gtid_mode|health|
+-----------------+------+--------+-------+-----------+---------------+
|demoenv-trial-1|3306|MASTER|UP|ON|OK|
|demoenv-trial-2|3306|SLAVE|UP|ON|OK|
|demoenv-trial-3|3306|SLAVE|UP|ON|OK|
+-----------------+------+--------+-------+-----------+---------------+
Q-quitR-refreshH-healthG-GTIDListsU-UUIDs
然后,执行命令的终端就挂起了,需要另外开启一个终端来关闭master:
[dong.guo@demoenv-trial-1 ~]$ mysqladmin -uroot -ppass shutdown
1
[dong.guo@demoenv-trial-1~]$mysqladmin-uroot-ppassshutdown
接着,在刚刚挂起的终端上,可以看到:
Failover starting in 'auto' mode...
# Candidate slave demoenv-trial-2:3306 will become the new master.
# Checking slaves status (before failover).
# Preparing candidate for failover.
# Creating replication user if it does not exist.
# Stopping slaves.
# Performing STOP on all slaves.
# Switching slaves to new master.
# Disconnecting new master as slave.
# Starting slaves.
# Performing START on all slaves.
# Checking slaves for errors.
# Failover complete.
# Discovering slaves for master at demoenv-trial-2:3306
Failover console will restart in 5 seconds.
MySQL Replication Failover Utility
Failover Mode = auto Next Interval = Sun Oct 20 07:01:25 2013
Master Information
------------------
Binary Log File Position Binlog_Do_DB Binlog_Ignore_DB
bin-log-mysqld.00000 299 testdb
GTID Executed Set
92df196b-3906-11e3-b6b6-000c290d14d7:1
Replication Health Status
+-----------------+------+--------+-------+-----------+---------------+
| host | port | role | state | gtid_mode | health |
+-----------------+------+--------+-------+-----------+---------------+
| demoenv-trial-2 | 3306 | MASTER | UP | ON | OK |
| demoenv-trial-3 | 3306 | SLAVE | UP | ON | OK |
+-----------------+------+--------+-------+-----------+---------------+
Q-quit R-refresh H-health G-GTID Lists U-UUIDs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Failoverstartingin'auto'mode...
# Candidate slave demoenv-trial-2:3306 will become the new master.
# Checking slaves status (before failover).
# Preparing candidate for failover.
# Creating replication user if it does not exist.
# Stopping slaves.
# Performing STOP on all slaves.
# Switching slaves to new master.
# Disconnecting new master as slave.
# Starting slaves.
# Performing START on all slaves.
# Checking slaves for errors.
# Failover complete.
# Discovering slaves for master at demoenv-trial-2:3306
Failoverconsolewillrestartin5seconds.
MySQLReplicationFailoverUtility
FailoverMode=autoNextInterval=SunOct2007:01:252013
MasterInformation
------------------
BinaryLogFilePositionBinlog_Do_DBBinlog_Ignore_DB
bin-log-mysqld.00000299testdb
GTIDExecutedSet
92df196b-3906-11e3-b6b6-000c290d14d7:1
ReplicationHealthStatus
+-----------------+------+--------+-------+-----------+---------------+
|host|port|role|state|gtid_mode|health|
+-----------------+------+--------+-------+-----------+---------------+
|demoenv-trial-2|3306|MASTER|UP|ON|OK|
|demoenv-trial-3|3306|SLAVE|UP|ON|OK|
+-----------------+------+--------+-------+-----------+---------------+
Q-quitR-refreshH-healthG-GTIDListsU-UUIDs
服务器 'demoenv-trial-2' 变成了新的master。
10. 插入数据测试主从复制
[dong.guo@demoenv-trial-2 ~]$ mysql -uroot
mysql> use testdb;
Database changed
mysql> CREATE TABLE `hostgroup` (
-> `hostgroup_id` tinyint(4) NOT NULL AUTO_INCREMENT,
-> `hostgroup_name` char(20) DEFAULT NULL,
-> `hostgroup_next` tinyint(4) NOT NULL,
-> `colo_name` char(4) NOT NULL,
-> PRIMARY KEY (`hostgroup_id`)
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Query OK, 0 rows affected (0.10 sec)
mysql> quit;
[dong.guo@demoenv-trial-2 binlogs]$ mysql -uroot -ppass -h'demoenv-trial-3' testdb -e 'show tables;'
+-----------------+
| Tables_in_testdb|
+-----------------+
| hostgroup |
+-----------------+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[dong.guo@demoenv-trial-2~]$mysql-uroot
mysql>usetestdb;
Databasechanged
mysql>CREATETABLE`hostgroup`(
->`hostgroup_id`tinyint(4)NOTNULLAUTO_INCREMENT,
->`hostgroup_name`char(20)DEFAULTNULL,
->`hostgroup_next`tinyint(4)NOTNULL,
->`colo_name`char(4)NOTNULL,
->PRIMARYKEY(`hostgroup_id`)
->)ENGINE=InnoDBDEFAULTCHARSET=utf8COLLATE=utf8_unicode_ci;
QueryOK,0rowsaffected(0.10sec)
mysql>quit;
[dong.guo@demoenv-trial-2binlogs]$mysql-uroot-ppass-h'demoenv-trial-3'testdb-e'show tables;'
+-----------------+
|Tables_in_testdb|
+-----------------+
|hostgroup|
+-----------------+
11. 尝试将旧的master恢复
[dong.guo@demoenv-trial-1 ~]$ sudo /etc/init.d/mysql start
[dong.guo@demoenv-trial-1 ~]$ mysqlreplicate --master=root:pass@'demoenv-trial-2':3306 --slave=root:pass@'demoenv-trial-1':3306
# master on demoenv-trial-2: ... connected.
# slave on demoenv-trial-1: ... connected.
# Checking for binary logging on master...
# setting up replication...
# ...done.
1
2
3
4
5
6
7
[dong.guo@demoenv-trial-1~]$sudo/etc/init.d/mysqlstart
[dong.guo@demoenv-trial-1~]$mysqlreplicate--master=root:pass@'demoenv-trial-2':3306--slave=root:pass@'demoenv-trial-1':3306
# master on demoenv-trial-2: ... connected.
# slave on demoenv-trial-1: ... connected.
# Checking for binary logging on master...
# setting up replication...
# ...done.
在刚刚挂起的终端上,可以看到:
Replication Health Status
+-----------------+------+--------+-------+-----------+---------------+
| host | port | role | state | gtid_mode | health |
+-----------------+------+--------+-------+-----------+---------------+
| demoenv-trial-2 | 3306 | MASTER | UP | ON | OK |
| demoenv-trial-1 | 3306 | SLAVE | UP | ON | OK |
| demoenv-trial-3 | 3306 | SLAVE | UP | ON | OK |
+-----------------+------+--------+-------+-----------+---------------+
Q-quit R-refresh H-health G-GTID Lists U-UUIDs
1
2
3
4
5
6
7
8
9
ReplicationHealthStatus
+-----------------+------+--------+-------+-----------+---------------+
|host|port|role|state|gtid_mode|health|
+-----------------+------+--------+-------+-----------+---------------+
|demoenv-trial-2|3306|MASTER|UP|ON|OK|
|demoenv-trial-1|3306|SLAVE|UP|ON|OK|
|demoenv-trial-3|3306|SLAVE|UP|ON|OK|
+-----------------+------+--------+-------+-----------+---------------+
Q-quitR-refreshH-healthG-GTIDListsU-UUIDs
将旧的master恢复
[dong.guo@demoenv-trial-1 ~]$ mysqlrpladmin --master=root:pass@'demoenv-trial-2':3306 --new-master=root:pass@'demoenv-trial-1':3306 --demote-master --discover-slaves-login=root:pass switchover
# Discovering slaves for master at demoenv-trial-2:3306
# Discovering slave at demoenv-trial-1:3306
# Found slave: demoenv-trial-1:3306
# Discovering slave at demoenv-trial-3:3306
# Found slave: demoenv-trial-3:3306
# Checking privileges.
# Performing switchover from master at demoenv-trial-2:3306 to slave at demoenv-trial-1:3306.
# Checking candidate slave prerequisites.
# Checking slaves configuration to master.
# Waiting for slaves to catch up to old master.
# Stopping slaves.
# Performing STOP on all slaves.
# Demoting old master to be a slave to the new master.
# Switching slaves to new master.
# Starting all slaves.
# Performing START on all slaves.
# Checking slaves for errors.
# Switchover complete.
#
# Replication Topology Health:
+-----------------+------+--------+-------+-----------+---------------+
| host | port | role | state | gtid_mode | health |
+-----------------+------+--------+-------+-----------+---------------+
| demoenv-trial-1 | 3306 | MASTER | UP | ON | OK |
| demoenv-trial-2 | 3306 | SLAVE | UP | ON | OK |
| demoenv-trial-3 | 3306 | SLAVE | UP | ON | OK |
+-----------------+------+--------+-------+-----------+---------------+
# ...done.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[dong.guo@demoenv-trial-1~]$mysqlrpladmin--master=root:pass@'demoenv-trial-2':3306--new-master=root:pass@'demoenv-trial-1':3306--demote-master--discover-slaves-login=root:passswitchover
# Discovering slaves for master at demoenv-trial-2:3306
# Discovering slave at demoenv-trial-1:3306
# Found slave: demoenv-trial-1:3306
# Discovering slave at demoenv-trial-3:3306
# Found slave: demoenv-trial-3:3306
# Checking privileges.
# Performing switchover from master at demoenv-trial-2:3306 to slave at demoenv-trial-1:3306.
# Checking candidate slave prerequisites.
# Checking slaves configuration to master.
# Waiting for slaves to catch up to old master.
# Stopping slaves.
# Performing STOP on all slaves.
# Demoting old master to be a slave to the new master.
# Switching slaves to new master.
# Starting all slaves.
# Performing START on all slaves.
# Checking slaves for errors.
# Switchover complete.
#
# Replication Topology Health:
+-----------------+------+--------+-------+-----------+---------------+
|host|port|role|state|gtid_mode|health|
+-----------------+------+--------+-------+-----------+---------------+
|demoenv-trial-1|3306|MASTER|UP|ON|OK|
|demoenv-trial-2|3306|SLAVE|UP|ON|OK|
|demoenv-trial-3|3306|SLAVE|UP|ON|OK|
+-----------------+------+--------+-------+-----------+---------------+
# ...done.
在刚刚挂起的终端上,可以看到:
MySQL Replication Failover Utility
Failover Mode = auto Next Interval = Sun Oct 20 07:30:07 2013
Master Information
------------------
Binary Log File Position Binlog_Do_DB Binlog_Ignore_DB
bin-log-mysqld.00000 710 testdb
GTID Executed Set
8a58172b-1efd-11e3-8cf1-000c2950fe0c:1 [...]
Replication Health Status
+-----------------+------+--------+-------+-----------+----------------------------------+
| host | port | role | state | gtid_mode | health |
+-----------------+------+--------+-------+-----------+----------------------------------+
| demoenv-trial-2 | 3306 | MASTER | UP | ON | OK |
| demoenv-trial-1 | 3306 | SLAVE | UP | WARN | Slave is not connected to master.|
| demoenv-trial-3 | 3306 | SLAVE | UP | WARN | Slave is not connected to master.|
+-----------------+------+--------+-------+-----------+----------------------------------+
Q-quit R-refresh H-health G-GTID Lists U-UUIDs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
MySQLReplicationFailoverUtility
FailoverMode=autoNextInterval=SunOct2007:30:072013
MasterInformation
------------------
BinaryLogFilePositionBinlog_Do_DBBinlog_Ignore_DB
bin-log-mysqld.00000710testdb
GTIDExecutedSet
8a58172b-1efd-11e3-8cf1-000c2950fe0c:1[...]
ReplicationHealthStatus
+-----------------+------+--------+-------+-----------+----------------------------------+
|host|port|role|state|gtid_mode|health|
+-----------------+------+--------+-------+-----------+----------------------------------+
|demoenv-trial-2|3306|MASTER|UP|ON|OK|
|demoenv-trial-1|3306|SLAVE|UP|WARN|Slaveisnotconnectedtomaster.|
|demoenv-trial-3|3306|SLAVE|UP|WARN|Slaveisnotconnectedtomaster.|
+-----------------+------+--------+-------+-----------+----------------------------------+
Q-quitR-refreshH-healthG-GTIDListsU-UUIDs
可以看到failover在手动恢复了旧的master之后已经停止了工作。
按下Q,然后重启auto-failover:
[dong.guo@demoenv-trial-1 ~]$ mysqlfailover --master=root:pass@'demoenv-trial-1':3306 --discover-slaves-login=root:pass --rediscover
Replication Health Status
+-----------------+------+--------+-------+-----------+---------------+
| host | port | role | state | gtid_mode | health |
+-----------------+------+--------+-------+-----------+---------------+
| demoenv-trial-1 | 3306 | MASTER | UP | ON | OK |
| demoenv-trial-2 | 3306 | SLAVE | UP | ON | OK |
| demoenv-trial-3 | 3306 | SLAVE | UP | ON | OK |
+-----------------+------+--------+-------+-----------+---------------+
Q-quit R-refresh H-health G-GTID Lists U-UUIDs
1
2
3
4
5
6
7
8
9
10
[dong.guo@demoenv-trial-1~]$mysqlfailover--master=root:pass@'demoenv-trial-1':3306--discover-slaves-login=root:pass--rediscover
ReplicationHealthStatus
+-----------------+------+--------+-------+-----------+---------------+
|host|port|role|state|gtid_mode|health|
+-----------------+------+--------+-------+-----------+---------------+
|demoenv-trial-1|3306|MASTER|UP|ON|OK|
|demoenv-trial-2|3306|SLAVE|UP|ON|OK|
|demoenv-trial-3|3306|SLAVE|UP|ON|OK|
+-----------------+------+--------+-------+-----------+---------------+
Q-quitR-refreshH-healthG-GTIDListsU-UUIDs
它又可以工作了。
12. 对于 auto-failover 的简短总结:
它包含在mysql-utilities这个软件包中;
它只能工作在MySQL 5.6 版本上,因为需要GITDs的支持;
它可以自动选取一个slave作为新的master,当现有的master死掉以后;
但是它不能自动将旧的master恢复,并且在手动恢复了旧的master之后也会停止工作。
转自http://heylinux.com/archives/2776.html