mysql灾备演练问题

摘要:
删除MySQL数据(将/var/lib/MySQL移动到/var/lib/MySQL_bak)3。运行修改备份恢复脚本。(1) . /var/lib/mysql/mysql.pid文件可能没有写入权限。解决方案:(2)mysql进程可能已经存在于进程中。解决方案:(4)当mysql在启动时未指定配置文件时,将使用/etc/my.cnf配置文件。

前期写的mysql热备份脚本恢复,还没有正式用到过,但是今天演练灾备恢复,但是遇到几个问题。

测试环境:

搭建mysql,安装xtrabackup

vim /etc/yum.repos.d/Percona.repo

[percona]
name = CentOS $releasever - Percona
baseurl=http://repo.percona.com/centos/$releasever/os/$basearch/
enabled = 1
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-percona
gpgcheck = 0

 yum install percona-xtrabackup.x86_64 -y

1、演练恢复数据:

拿到生产环境备份数据,运行恢复数据脚本。http://www.cnblogs.com/jjzd/p/6659607.html

结果运行失败,原因是全量备份日期计算错误,原脚本已修改。

2、停掉mysql,删除mysql数据(移动/var/lib/mysql到/var/lib/mysql_bak)

3、运行修改备份恢复脚本。

4、修改权限,chown -R mysql.mysql /var/lib/mysql

5、启动mysql,service mysql restart,报错:

Starting MySQL...The server quit without updating PID file (/var/lib/mysql/mysql.pid).[失败]

 原因最好的办法是先查看下错误日志:

1)、可能是/var/lib/mysql/mysql.pid文件没有写的权限

解决方法 :给予权限,然后重新启动mysqld!

2、可能进程里已经存在mysql进程

解决方法:用命令“ps -ef|grep mysqld”查看是否有mysqld进程,如果有使用“kill -9  进程号”杀死,然后重新启动mysqld!

3、可能是第二次在机器上安装mysql,有残余数据影响了服务的启动。

解决方法:去mysql的数据目录/data看看,如果存在mysql-bin.index,就赶快把它删除掉吧,它就是罪魁祸首了。

(4)、mysql在启动时没有指定配置文件时会使用/etc/my.cnf配置文件,请打开这个文件查看在[mysqld]节下有没有指定数据目录(datadir)。

解决方法:请在[mysqld]下设置这一行:datadir = /usr/local/mysql/data

(5)、skip-federated字段问题

解决方法:检查一下/etc/my.cnf文件中有没有没被注释掉的skip-federated字段,如果有就立即注释掉吧。

(6)、错误日志目录不存在

解决方法:使用“chown” “chmod”命令赋予mysql所有者及权限

(7)、selinux惹的祸,如果是centos系统,默认会开启selinux

解决方法:关闭它,打开/etc/selinux/config,把SELINUX=enforcing改为SELINUX=disabled后存盘退出重启机器试试。本人就是使用第三条方法解决的 !

故障排除完后,启动数据库,恢复上一次备份后产生的数据变化:

6、恢复二进制文件:

去完全备份的目录下查看一下当时备份时候binlog的日志信息(因为增量备份是被应用到完全备份里的,当然,查看最后一次增量备份目录中的这个文件信息也可以,其实两个内容是一样的)

[root@manager1 mysql]# cat xtrabackup_binlog_pos_innodb
mysql-bin.000001	3710
#读取该二进制日志的位置并保存至.sql文件
[root@manager1 ~]# mysqlbinlog --start-position=3710 /var/lib/mysql_bak/mysql-bin.000001 > /tmp/1.sql
[root@manager1 mysql]# mysql -h127.0.0.1 -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 5
Server version: 5.6.37-log MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
#进入mysql且先关闭二进制功能,进行恢复,再开启二进制功能:
mysql> set sql_log_bin = 0;
Query OK, 0 rows affected (0.55 sec)

mysql> source /tmp/1.sql;
Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected, 1 warning (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

 自此,恢复OK,进入数据库可以检查数据。

注意,当脚本不能自动恢复时,紧急情况下,请手动恢复,步骤无非就是在全量的基础上增量恢复:

先进行完全备份的准备:

innobackupex --apply-log --redo-only /backup/2017-10-17_01-09-48/

再进行增量备份的准备:

innobackupex --apply-log --redo-only /backup/2017-10-17_01-09-48/ --incremental-dir=/backup/2017-10-17_13-26-38/

确保2次操作都出现成功的提示:

completed OK!

因为增量备份的数据都已合并到完全备份中去了,所以此时只恢复完全备份即可

innobackupex --copy-back /backup/2017-10-17_01-09-48/

手动备份:

全量:innobackupex --user=backup -password=123456 /backup/
增量备份:innobackupex -user=backup -password=123456 --incremental /backup --incremental-basedir=BASEDIR

xtrabackup_checkpoints : 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态,这个为准备工作,包括事务日志和数据文件,把事务日志中已提交的事务同步至数据文件,未提交的进行回滚)和LSN(日志序列号)范围信息;每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的。查看一下其内容:

cat xtrabackup_checkpoints 
backup_type = full-backuped   # 表示备份类型为完全备份
from_lsn = 0                  # LSN号从0开始
to_lsn = 5618613              # LSN号到0结束
last_lsn = 5618613            # 最后的lsn号,换句话说,一会进行增量备份时会以这个数字开始,可以理解为                                  xtrabackup为每次备份打的开始和结束的标记
compact = 0                   # 0表示未启用压缩

xtrabackup_binlog_info: mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置;

xtrabackup_binary:备份中用到的xtrabackup的可执行文件;

backup-my.cnf:备份命令用到的配置选项信息,也就是my.cnf配置文件中定义的相关参数

免责声明:文章转载自《mysql灾备演练问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇多目标规划Java 关于SpringbootJPA分页及排序下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python测试开发django(8)--django连接mysql

前言 Django对各种数据库提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。本篇以mysql为例简单介绍django连接mysql进行数据操作 Django连mysql需要安装驱动mysqlclient mysqlclient安装 先要安装数据库驱动mysqlclient,使用pip安装就行 pip install...

Mysql --数据的增删改

插入数据 INSERT 更新数据 UPDATE 删除数据 DELETE 一、 在mysql管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括 1.使用insert实现数据的插入 2.update实现数据的更新 3.使用delete实现数据的删除 4.使用select查询数据以及。 二、插入数据 insert 1. 插入完整数据(顺...

ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致”

"将页面显示的GridView中的数据,导出到Excel表格中"时遇到这样一个错误: C# 导出Excel文件 打开Excel文件格式与扩展名指定格式不一致。具体提示如图:   解决办法:这里采用"修改注册表的方法"解决此问题,这并没从根上解决问题: 1、打开注册表编辑器方法:开始 -> 运行 -> 输入regedit -> 确定 2、找...

MySQL8.0新增配置参数

activate_all_roles_on_login 此参数在版本8.0.2引入,是一个可以动态调整的global级参数,默认值为OFF。此参数用于控制在账户登录时是否激活已经授予的角色,如果为ON则授予的角色会被激活,设置为OFF时只能通过SET DEFAULT ROLE显式激活用户角色。activate_all_roles_on_login设置只在账...

墨者学院 SQL手工注入漏洞测试(MySQL数据库-字符型)

登录平台靶靶场后会发现底部有个通知点进去之后会发现URL中带有?id这地方八成是可以注入的   先尝试了一下在tingjigonggao后面加'号结果发下报错了看这提示应该是sql语句错误 然后尝试了下加上‘ and ’1‘=’1 结果回显是正常的,加上‘ and 1=1 报错说明这里是一个字符型的注入,当然这个靶场的题目也已经提示了这次的sql注入会...

java部署ubuntu后中文显示问号问题

1、首先先回忆自身项目的编码格式,即在本地进行编码时使用的编码格式。UTF-82、检测tomcat的设置问题,在web.xml和server中的设置:server.xml中: <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443...