数据库-Mysql数据库的备份与恢复

1 安装innobackupex

yum -y install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm

yum update percona-release -y

yum -y install percona-xtrabackup-24

2 备份单个库

  • 全量

    innobackupex --defaults-file=/etc/my.cnf --user=root \

    --password=  --socket=/data/database/mysql/data/mysql.sock \

    --databases=db_zabbix /data/zabbix-backup/db-backup/20191112_full/   

  • 增量01

    innobackupex --defaults-file=/etc/my.cnf --user=root \

    --password=  --socket=/data/database/mysql/data/mysql.sock \

    --databases=db_zabbix \

    --incremental-basedir=/data/zabbix-backup/db-backup/20191112_full/2019-11-12_19-58-50 \

    --incremental /data/zabbix-backup/db-backup/20191113_inc01

  • 增量02

    innobackupex --defaults-file=/etc/my.cnf --user=root \

    --password=  --socket=/data/database/mysql/data/mysql.sock \

    --databases=db_zabbix \

    --incremental-basedir=/data/zabbix-backup/db-backup/20191113_inc01/[inc01的目录] \

    --incremental /data/zabbix-backup/db-backup/20191113_inc02

3 恢复单个库

参考 https://www.jcwit.com/?p=190

3.2 停止数据库

    systemctl stop mysqld

3.3 回滚

  • 准备基础的全量备份

    innobackupex --apply-log --redo-only --export /data/zabbix-backup/db-backup/20191112_full/  

  • 准备增量备份01

    innobackupex --apply-log --redo-only --export /data/zabbix-backup/db-backup/20191112_full/    --incremental-dir=/data/zabbix-backup/db-backup/20191113_inc01/[inc01的目录]/

  • 准备增量备份02,最后一个增量备份恢复不需要指定—redo-only

    innobackupex --apply-log   --export /data/zabbix-backup/db-backup/20191112_full/  --incremental-dir=/data/zabbix-backup/db-backup/20191113_inc02/[inc02的目录]/

  • 恢复数据,先拷贝最后一次增量备份的内容,然后拷贝全备份的文件内容。其中/var/lib/mysql是数据库运行目录。

   \cp -rf /data/zabbix-backup/db-backup/20191113_inc02/[inc02的目录]/* /var/lib/mysql/

    \cp -rf /data/zabbix-backup/db-backup/20191112_full/ * /var/lib/mysql/

  • 修改mysql数据目录的权限并启动mysql

    chown mysql:mysql /var/lib/mysql

    sudo systemctl start mysqld

4 测试备份恢复单个库

注意:我们的环境只适用于备份恢复单个库。这里以只备份和恢复sonarqube数据库为例。

4.1 环境现状记录

数据库sonar就是sonarqube的数据库;为了模仿生产环境,我们再创建个数据库test,并在数据库中插入简单的数据。回头使用这个确认是否破坏了其他数据库的数据。

mysql -uroot -pTest2019@

create database test1 CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE USER 'test1' IDENTIFIED BY 'SonarTest2019@';

GRANT ALL ON test1.* TO 'test'@'%' IDENTIFIED BY 'SonarTest2019@';

GRANT ALL ON test1.* TO 'test'@'localhost' IDENTIFIED BY 'SonarTest2019@';

FLUSH PRIVILEGES;

use test1;

create table test666 (id int(11), name varchar(25), age int(11));

insert into test666 (id,name,age) values (0001, "fangfang", 10);

select * from test666;

我们再确认一下sonar数据库某(随机找个)表中的内容,回头使用这个确认是否恢复成功。

4.2 备份sonar这个库

1)准备备份目录

mkdir /data/db_back/{full,inc1,inc2} -pv

2)先做个全量备份

innobackupex --user=root --password=Test2019@ --databases=sonar /data/db_back/full/

3)增量备份inc1,inc2

innobackupex --user=root --password=Test2019@ --databases=sonar --incremental-basedir=/data/db_back/full/2019-11-27_17-14-06/ --incremental /data/db_back/inc1/

systemctl stop sonar

innobackupex --user=root --password=Test2019@ --databases=sonar --incremental-basedir=/data/db_back/inc1/2019-11-27_17-15-45/ --incremental /data/db_back/inc2/

4.3 恢复sonar库

1) 删除sonar库,模拟数据库故障

mysql -uroot -pTest2019@

drop database sonar;

2) 停止mysqld,开始恢复

systemctl stop mysqld

  • 准备备份

innobackupex --apply-log --redo-only --export /data/db_back/full/2019-11-27_17-14-06/

innobackupex --apply-log --redo-only --export /data/db_back/full/2019-11-27_17-14-06/ --incremental-dir=/data/db_back/inc1/2019-11-27_17-15-45/

innobackupex --apply-log --redo-only --export /data/db_back/full/2019-11-27_17-14-06/ --incremental-dir=/data/db_back/inc2/2019-11-27_17-16-13/

  • 先拷最后一次增量份的内容,然后拷份的文件内容

\cp -rf /data/db_back/inc2/2019-11-27_17-16-13/* /var/lib/mysql/

\cp -rf /data/db_back/full/2019-11-27_17-14-06/* /var/lib/mysql/

  • 更改全限并重启

chown -R mysql:mysql /var/lib/mysql

systemctl start mysqld

4.4 检验是否恢复成功

1)登录到mysql,检查sonar,test

2)启动sonarqube,登录到页面查看是否正常

初始化的时候有点慢,会自动跳转到登录页面,登录之后可以正常使用!

到此数据库备份恢复成功!

5 备份所有库

  • 全量

innobackupex --defaults-file=/etc/my.cnf --user=root \

    --password=  --socket=/data/database/mysql/data/mysql.sock \

    /data/zabbix-backup/db-backup/20191112_full/   

  • 增量01

innobackupex --defaults-file=/etc/my.cnf --user=root \

    --password=  --socket=/data/database/mysql/data/mysql.sock \

    --incremental-basedir=/data/zabbix-backup/db-backup/20191112_full/2019-11-12_19-58-50 \

    --incremental /data/zabbix-backup/db-backup/20191113_inc01

  • 增量02

innobackupex --defaults-file=/etc/my.cnf --user=root \

    --password=  --socket=/data/database/mysql/data/mysql.sock \

    --incremental-basedir=/data/zabbix-backup/db-backup/20191113_inc01/[inc01的目录] \

    --incremental /data/zabbix-backup/db-backup/20191113_inc02

6 恢复所有库

注意:可以使用单个库恢复的方法。下面这个方法只适用于恢复所有数据库,如果数据库被多个软件使用,则无法使用下面这个方法进行恢复。

  • 停止数据库

    systemctl stop mysqld

  • 准备基础的全量备份

    innobackupex --apply-log --redo-only /data/mysql/back/2019-11-12_05-30-52/

  • 准备增量备份01

    innobackupex --apply-log --redo-only --incremental-dir=/data/mysql/back/2019-11-12_05-30-52/ /data/mysql/back/2019-11-12_05-39-07/

  • 准备增量备份02,最后一个增量备份恢复不需要指定—redo-only

    innobackupex --apply-log --incremental-dir=/data/mysql/back/2019-11-12_05-30-52/ /data/mysql/back/2019-11-12_05-40-55/

  • 把所有备份放在一起,准备全部备份来回滚暂停的事务

    innobackupex --apply-log /data/mysql/back/2019-11-12_05-30-52/

  • 恢复数据

    mv /var/lib/mysql ./back

    innobackupex --copy-back --user=root --password=123456 --host=127.0.0.1 /data/mysql/back/2019-11-12_05-30-52/

  • 修改mysql数据目录的权限并启动mysql

    sudo systemctl start mysqld

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鬼刺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值