一、恢复背景
二、修复故障节点及MHA集群
三、提升已修复的节点为master
四、注意事项
一、恢复背景
1、设备清单
2、:percona-xtrabackup-2.3.2
(注:生产环境应定时备份;不应等到数据库DOWN后才备份,以免加剧集群的压力)
备份数据库操作:
[root@jev72 ~]#innobackupex --user=root --password=centos /data/
。 。 。
xtrabackup: innodb_log_file_size = 5242880 #注意记录该日志文件大小值
。 。 。
以上为故障前,数据库备份操作,这里写出来是为了便于说明后面调节日志大小操作;
二、修复故障节点及MHA集群
1、恢复前备份文件准备:
将备份文件拷贝到jev1(故障master)上:
[root@jev72 ~]#scp -r /data/2017-02-27_21-23-44 172.16.250.131:/data/
模拟生产环境,在备份后,对数据库进行写操作:
[root@jev6 ~]#mysql -umhaadmin -h172.16.250.188 -pmhapass
mysql> show databases ;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| test2 |
+--------------------+
5 rows in set (0.00 sec)
#新建test3数据库
mysql> create database test3;
Query OK, 1 row affected (0.00 sec)
2、修改日志大小配置,及清空数据库
此处用直接在故障master操作,如果用新主机需要重新搭建系统环境,注意停止mariadb服务;
将日志大小配置为xtrabackup备份时使用的大小5242880
[root@jev71 ~]#vim /etc/my.cnf.d/server.cnf
[mysqld]
nnodb_log_file_size=5242880
#清空原数据库文件(生成环境,建议先挪走再删除,以防误删)
[root@jev71 ~]#rm -rf /var/lib/mysql/
3、恢复数据
[root@jev71 ~]#innobackupex --copy-back /data/2017-02-27_21-23-44/
。 。 。
170227 22:07:12 completed OK!
4、予mysql权限,启动mariadb,并查看数据库状态
[root@jev71 ~]#chown -R mysql:mysql /var/lib/mysql
[root@jev71 ~]#systemctl start mariadb
[root@jev71 ~]#mysql
MariaDB [(none)]> show databases ;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| test2 |
+--------------------+
5 rows in set (0.00 sec)
5、查看时二进制文件位置并进行事务回放重写
(注,如果备份点之后服务器的写操作比较少,可以在恢复节点(jev1)直接指定master日志复制位置直接复制(合并到集群),如果期间产生的二进制文件较大,需要先拷贝备份点之后的所有二进制文件,进行日志重写再合并到集群)
[root@jev71 ~]#cat /data/2017-02-27_21-23-44/xtrabackup_binlog_info
master-log.000004 245
备份点之后的所有二进制文件拷贝到恢复节点上(jev1)
[root@jev73 ~]#scp /var/lib/mysql/master-log.000004 172.16.250.131:/tmp/
将备份备份点之后的二进制文件保存到文件中(如果是误删的话,需要将其中的误删的语句删除)
[root@jev71 ~]#mysqlbinlog /tmp/master-log.000004 --start-position=245 >/tmp/myqlsbinlog.001
[root@jev71 ~]#mysql
#关闭二进制日志;
MariaDB [(none)]> set @@session.sql_log_bin=0 ;
#事务回放重写
MariaDB [(none)]> source /tmp/myqlsbinlog.001 ;
6、故障节点修复后以slave的身份并入集群;
将/etc/my.cnf.d/repl.cnf配置为slave:
[root@jev71 ~]#vim /etc/my.cnf.d/repl.cnf
[mysqld]
server-id=1
log-bin=master-log
relay-log=relay-log
relay_log_purge=0
read_only=1
innodb_file_per_table=1
skip_name_resolve=1
#重启mariadb服务;
[root@jev71 ~]#systemctl restart mariadb && systemctl status mariadb
确定二进制文件最后复制位置,查看用于恢复节点(jev1)的二进制日志最后一个end_log_pos 的值,确定复制起点;
[root@jev71 ~]# mysqlbinlog /tmp/master-log.000004 --start-position=245
。 。 。
#170227 21:34:17 server id 2 end_log_pos 415 Query thread_id=39 exec_time=0 error_code
。 。 。
[root&