前提:以前一位同事负责的一位客户,因后期转到devops小组。因此将此用户交接给我,在后期发现有一套数据库主从环境,从库已经没法正常使用。查看slave 状态为:mysql
其中:
Master_Log_File:#此处显示的bin-log已经在master上找不见了
Read_Master_Log_Pos:#显示的行数也就存在没有意义了
Slave_IO_Running:NO #salve io进程显示为no,没法从master同步数据
所以断定从库已经没法使用,须要及时修复。保证主从架构正常使用。sql
如下是恢复的所有过程:
##########################################################数据库
主要思路: 一、在不锁表的状况下备份master数据库的全部数据文件 二、将slave数据库进程停掉。并将备份文件从master传输到slave端,解压 三、从新执行 change master设置bin-log文件名称,和position ##########################################################
1、在数据库的Master端使用percona-xtrabackup进行文件级别的数据库备份。架构
在master数据库执行下面命令:(须要根据实际状况修改)
innobackupex --defaults-file=/etc/my.cnf --user=root --password=51idc --no-lock --use-memory=4G --compress --compress-threads=8 --stream=xbstream --parallel=4 /backup > /backup/$(date +%Y-%m-%d_%H-%M-%S).xbstreamapp
注意:其中
一、/backup这个目录能够自定义,他表明备份文件存放的位置。
二、/etc/my.cnf这个文件是数据库启动时读取的默认配置文件,须要根据实际状况进行修改;我这边使用的是/etc/my.cnf
三、修改数据库链接密码
四、--no-lock表明不锁表进行备份,保证线上业务正常运行的同时进行数据备份。ide
这个操做时间依据数据量的大小,我本身备份花费了30min左右(130G数据)。备份完成后出现一个文件:
2019-02-27_11-12-21.xbstream3d
2、在数据库的slave端使用命令进行恢复数据,由于在恢复以前须要保证主从数据库的数据一致,可是以前由于从数据库好久都没有同步master的数据了,所以目前主从数据量差的较多。日志
a、须要先停掉数据库
/etc/init.d/mysql stop #停掉数据库
b、删除以前的数据文件,默认在/var/lib/mysql下;删除mysql目录下的全部文件,由于接下来咱们须要将备份数据解压到此目录下。
c、在slave数据库的机器上执行两次解压操做,将备份文件解压到本地。code
xbstream -x < /backup/2019-02-27_11-12-21.xbstream -C /backup/2019-02-27_11-12-21
innobackupex --decompress --parallel=4 /backup/2019-02-27_11-12-21
d、删除全部以 .qp结尾的文件
find /backup/2019-02-27_11-12-21 -name "*.qp" -delete
e、建立完备份以后数据被没有立刻能够被还原,须要回滚未提交事务前滚提交事务,让数据库文件保持一致性。
innobackupex使用—apply-log来作预备备份
--user-memory:指定预备阶段可以使用的内存,内存多则速度快,默认为10MBblog
innobackupex --apply-log --use-memory=4G /backup/2016-03-16_15-25-55
f、再将还原的数据文件拷贝到/var/lib/mysql目录下,其中/var/lib/mysql目录在/etc/my.cnf文件中指定的datadir
innobackupex --defaults-file=/etc/my.cnf --copy-back --use-memory=4G /backup/2019-02-27_11-12-21
此过程须要的时间较长,我这边还原大概是2H左右。还原完成后,在/var/lib/mysql目录下有两个文件,能够看到salve目前保存的最近的bin-log文件和position
若出现找不到qpress命令的报错能够安装repo.percona源后使用 yum -y install qpress 进行安装
repo.percona源安装命令:
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
g、修改/var/lib/mysql的属主属组
chown -R mysql.mysql /var/lib/mysql
h、启动数据库;
/etc/init.d/mysql start
I、重作主从配置
mysql -uroot -p #进入到数据库内
change master to master_host='主xxx.xxx.xxx.xx',master_port=3306,master_user='root',master_password='51idc',master_lo_file='master-bin.xxx',master_log_pos=xxx;
其中:master IP 、master_password根据实际状况肯定。
bin-log日志文件名、master_log_pos的位置须要在这两个文件中查看。
h、启动slave
mysql> start slave;
j、查看slave状态:
mysql> show slave status\G;能够看到从数据库slave的Slave_IO_Running: Yes、Slave_SQL_Running: Yes均是yes而且有了新的bin-log文件和position位置了。后面就能够正常工做,进行主从同步了。