数据的备份与恢复

1.1  相关概念 

   数据备份: 就是把当前服务器的上数据拷贝一份 放到其他的存储设备里

   恢复数据: 放到其他的存储设备里备份 , 还原丢失的数据。

   数据备份方式:物理备份  、逻辑备份

   数据备份策略 :

    完全备份 :备份所有数据:

可以是一台数据库服务器上的所有数据

也可以是 一个数据库下所有表 

还可以仅一张表里的所有记录

   

增量备份:   备份上次备份后,新产生的数据。

差异备份: 备份自完全备份后,新产生的数据。

1.2 备份策略的使用方式:

完全备份+增量备份

完全备份+差异备份

比如:每周的周一 完全备份 ,每周的周二到周日 做增量备份或差异备份

通过计划 执行备份脚本实现

00  23  *   *  1          执行完全备份脚本

59  23  *   *  2-7        执行备份新数据的脚本

1.3 物理备份与恢复

备份

[root@host50 ~]# systemctl  stop   mysqld 
[root@host50 ~]# mkdir  /bakdir
[root@host50 ~]# cp -r /var/lib/mysql  /bakdir/mysql.bak
[root@host50 ~]# ls /bakdir/
mysql.bak

[root@host50 ~]# cd /var/lib/mysql
[root@host50 ~]# tar -zcvf  /bakdir/mysql.tar.gz ./*
[root@host50 ~]# ls /bakdir/
mysql.bak    mysql.tar.gz
[root@host50 ~]# 

模拟数据丢失

[root@host50 ~]# rm -rf /var/lib/mysql/*

恢复数据

[root@host50 ~]# cp -r /bakdir/mysql.bak/* /var/lib/mysql/
[root@host50 ~]# chown -R mysql:mysql /var/lib/mysql
[root@host50 ~]# systemctl  start mysqld
[root@host50 ~]# mysql -uroot -p密码
mysql> show  databases;   能够看所有的库

1.4 逻辑备份与恢复 

使用数据库服务软件自带命令或安装其他软件提供的命令备份和恢复

使用mysql服务软件提供的命令做备份和恢复

!!!数据库服务必须是运行状态!!!!

完全备份命令格式 

]# mysqldump   -uroot    -p密码   库名   >  /目录名/备份文件名.sql

 库名的表示方式:

库名  表名                    #仅备份库下一张的所有记录

 库名  表名1    表名2          #一起备份库下2张表的所有记录

     -B  库名                      #仅备份1个库里的所有表

 -B  库名1     库名2           #一起备份2个库里的所有表

 -A  或   --all-databases     #备份服务器上的所有库所有表

完全恢复数据命令格式 

]# mysql   -uroot    -p密码   [库名] <  /目录名/备份文件名.sql 

!!!!使用表的备份文件恢复数据的时必须写库名,不然数据库服务不知道把数据恢复那个库里!!!! 

备份数据例子

存储备份文件的目录要事先创建
[root@host50 ~]# mysqldump -uroot -p密码  db1 t41 > /bakdir/db1_t41.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@host50 ~]#
 
[root@host50 ~]# mysqldump -uroot -p密码  -B db1 > /bakdir/db1.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@host50 ~]# 

[root@host50 ~]# mysqldump -uroot -p密码  -B db1 mysql > /bakdir/twodb.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@host50 ~]# 

[root@host50 ~]# mysqldump -uroot -p密码  -A > /bakdir/allbak.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.

[root@host50 ~]# ls /bakdir/
allbak.sql  db1.sql  db1_t41.sql  db1_user.sql  mysql.bak  mysql.tar.gz  twodb.sql
[root@host50 ~]# 

恢复数据例子

mysql> delete from  db1.t41;
Query OK, 3 rows affected (0.03 sec)

mysql> drop table db1.t41;
Query OK, 0 rows affected (0.10 sec)

mysql> exit

[root@host50 ~]# mysql -uroot -p654321  < /bakdir/db1_t41.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1046 (3D000) at line 22: No database selected #没写库名报错 使用表的备份文件恢复数据 必须写库名
[root@host50 ~]# 
[root@host50 ~]# mysql -uroot -p654321 db1  < /bakdir/db1_t41.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@host50 ~]# 

使用库的备份文件恢复数据
mysql> drop database db1;
Query OK, 10 rows affected (1.05 sec)
mysql> exit;

[root@host50 ~]# mysql -uroot -p654321  < /bakdir/db1.sql    #使用库的备份文件恢复数据 不需要写库名
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@host50 ~]# 
[root@host50 ~]# mysql -uroot -p654321 
mysql> show  databases;
mysql> use  db1;
mysql> show tables;

编写计划任务每周周一晚上23点备份 服务的所有数据 用系统日期做备份文件命令

]#crontab  -e
00  23  * *  1   mysqldump -uroot -p654321 -A  > /bakdir/`date +%F`_allbak.sql

mysqldump的备份缺点

1 mysqldump 在备份数据和恢复数据的时候会锁表  

2 使用 mysqldump备份命令生成备份文件恢复数据,只能把数据恢复备份时刻的数据。

 Binlog日志管理

1、启用binlog日志  启用数据库50主机的binlog日志文件

#vim  /etc/my.cnf
mysqld]
server_id = 50
log_bin
:wq
]# systemctl restart  mysqld
]# mysql  -uroot  -p123456
mysql> show  master status ;   查看binlog日志信息 
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| host50-bin.000001 |      154 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
								
mysql> system  ls /var/lib/mysql/host50*    #binlog日志默认存储在数据库目录下 
/var/lib/mysql/host50-bin.000001  /var/lib/mysql/host50-bin.index(记录当前已有的binlog日志文件)
mysql>
mysql> system cat /var/lib/mysql/host50-bin.index
./host50-bin.000001
mysql>					

自定义日志信息

在50 主机  启用binlog日志时,指定日志文件存放的目录和日志文件命令

]# vim /etc/my.cnf				
[mysqld]
server_id =  50
log_bin=/mylog/db50				
:wq
[root@host50 ~]# mkdir /mylog
[root@host50 ~]# chown  mysql /mylog

[root@host50 ~]# setenforce  0
setenforce: SELinux is disabled

[root@host50 ~]# systemctl  restart mysqld

[root@host50 ~]# mysql  -uroot -p123456 -e 'show master status'
mysql: [Warning] Using a password on the command line interface can be insecure.
+-------------+----------+--------------+------------------+-------------------+
| File        | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------+----------+--------------+------------------+-------------------+
| db50.000001 |      154 |              |                  |                   |
+-------------+----------+--------------+------------------+-------------------+
[root@host50 ~]# 
[root@host50 ~]# ls /mylog/
db50.000001  db50.index
					
[root@host50 ~]# cat /mylog/db50.index 
/mylog/db50.000001
[root@host50 ~]# 	
# Position     偏移量
# db50.000001   主机名命名

创建新的binlog日志文件

默认情况下日志文件记录的sql名让文件大容量大于 1G 的时候数据服务

会自动创建新的日志文件 文件编号顺延。

也可以手动创建新的binlog日志文件记录sql命令如下:

方法1   systemctl restart  mysqld
方法2  :  创建新日志文件的个数个完全备份数据库的个数相同
root@host50 ~]# mysqldump  -uroot -p123456 --flush-logs  -B tarena  
> /bakdir/tarena.sql

[root@host50 ~]# mysqldump  -uroot -p123456 --flush-logs  -B tarena  
 db1  > /bakdir/two.sql

方法3   数据库管理员root 执行  创建新日志文件的命令
mysql> flush logs;

binlog日志相关管理命令

查看正在使用binlog日志名和偏移量(记录sql命令的编号)
mysql>  show  master  status;
查看数据库服务器当前已有全部 binlog日志文件
mysql> show binary  logs;

#删除编号之前的所有日志文件
mysql> purge master logs to "db50.000004";

#删除当前所有的日志文件重新创建新日志文件和索引文件
mysql> reset master ;

查看日志文件内容 2 种方法:

方法1 使用系统命令 mysqlbinlog 查看

[root@host50 ~]# mysqlbinlog   /mylog/db50.000001   

方法2 使用sql命令查看

mysql> show binlog events in "db50.000001" ;

 例子:测试 binlog日志 记录的命令类型(日志 记录除查询之外的所有sql命令)

mysql> reset master ; 
mysql> show  master status;
mysql> select  count(*) from  tarena.user;  查看日志名和偏移量
mysql> show  master status;
mysql> insert into  tarena.user(name) values("boba");
mysql> show  master status;  查看日志名和偏移量
mysql> insert into  tarena.user(name) values("boba");
mysql> show  master status;  查看日志名和偏移量
mysql> show binlog events in  "db50.000001";  

使用binlog日志文件恢复数据

命令格式1  : 

]# mysqlbinlog   /目录名/日志文件名   |   mysql  -uroot   -p密码

 命令格式2 : 

]# mysqlbinlog  选项   /目录名/日志文件名   |   mysql  -uroot   -p密码

加了选项后会根据选项指定的范围查看记录的sql命令选项包括

#查看指定偏移量范围内记录的sql命令

--start-position=开始偏移量      --stop-position=结束偏移量 


#查看指定时间范围内记录的sql命令

--start-datetime="yyyy/mm/dd hh:mm:ss"   --stop-datetime="yyyy/mm/dd  hh:mm:ss"

命令格式1 

查看日志的所有内容恢复数据 (恢复所有数据)

适用于日志文件里只记录了 insert 和 update 命令 没有delete 命令的情况下  

]# mysqlbinlog   /目录名/日志文件名   |   mysql  -uroot   -p密码    

#完全备份 tarena 库 并在完成备份 后  创建新的日志文件 

[root@host50 ~]# mysqldump -uroot -p123456 --flush-logs -B tarena  > /bakdir/`date +%F`_tarena.sql
[root@host50 ~]# mysql -uroot -p123456 -e 'show master status'  查看新日志文件名
mysql: [Warning] Using a password on the command line interface can be insecure.
+-------------+----------+--------------+------------------+-------------------+
| File        | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------+----------+--------------+------------------+-------------------+
| db50.000002 |      154 |              |                  |                   |
+-------------+----------+--------------+------------------+-------------------+
[root@host50 ~]#

完全备份后管理员root登陆继续插入新的记录

[root@host50 ~]# mysql -uroot -p123456 
mysql>  
insert into tarena.user(name,uid)values("a",1111);
insert into tarena.user(name,uid)values("aa",1111);
insert into tarena.user(name,uid)values("aaa",1111);
insert into tarena.user(name,uid)values("ab",1111);
insert into tarena.user(name,uid)values("ac",1111);
mysql> show  master   status;   查看日志文件的偏移量发生了改变

让数据库服务器51 用备份文件恢复数据

把日志文件拷贝给 51
[root@host50 ~]# scp /mylog/db50.000002   192.168.4.51:/root/


把备份文件拷贝给51    
[root@host50 ~]# scp /bakdir/2021-10-18_tarena.sql    192.168.4.51:/root/  

使用50的备份文件恢复,

[root@host51 ~]# mysql -uroot -p123456 -e 'show databases'   #查看已有的库  #51主机就是没有tarena库的(如果有的话删除库) ;

查看拷贝文件 在  51 本机的位置和名字
[root@host51 ~]# ls /root/*.sql
/root/2021-10-18_tarena.sql
[root@host51 ~]# ls /root/db50*
/root/db50.000002
[root@host51 ~]# mysql -uroot -p123456  < /root/2021-10-18_tarena.sql  完全备份恢复
[root@host51 ~]# which  mysqlbinlog   查看读取日志内容的命令
[root@host51 ~]# mysqlbinlog  /root/db50.000002 |  mysql -uroot -p123456  读日志内容恢复数据
[root@host51 ~]# mysql -uroot -p123456 管理员登录后可以看到库和表记录

命令格式2  

查看日志的部分内容恢复数据(恢复部分数据) 适用于 既有insert 又有delete的情况

]# mysqlbinlog  选项   /目录名/日志文件名   |   mysql  -uroot   -p密码

修改binlog日志文件的格式(格式就是 日志文件记录sql命令的方式) 

查看日志文件的格式
mysql> show    variables  like    "binlog_format";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW   |  行格式 看不到具体的sql命令 , 想看到具体的sql命令要修改日志格式。
+---------------+-------+
1 row in set (0.00 sec)

修改日志文件的格式

host50]# vim /etc/my.cnf
   [mysqld]
    binlog_format="mixed"   #自己添加 其他行不需要动
:wq
[root@host50 ~]# systemctl  restart mysqld
mysql> show variables like "binlog_format";  查看日志格式
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | MIXED |
+---------------+-------+
1 row in set (0.00 sec)

mysql> show master status;  查看记录sql命令使用的日志文件
+-------------+----------+--------------+------------------+-------------------+
| File        | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------+----------+--------------+------------------+-------------------+
| db50.000003 |      154 |              |                  |                   |
+-------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

执行对数据库做 select   insert  update  delete 命令

select  count(*)  from  tarena.user;
mysql> show master status; 
mysql> insert into  tarena.user(name,uid) values("FFF",7777);
mysql> insert into  tarena.user(name,uid) values("AFF",7777);
mysql> insert into  tarena.user(name,uid) values("CFF",7777);
mysql> insert into  tarena.user(name,uid) values("WFF",7777);
mysql> insert into  tarena.user(name,uid) values("GFF",7777);


mysql> select  count(*)  from  tarena.user;
+----------+
| count(*) |
+----------+
|       38 |
+----------+
1 row in set (0.00 sec)

mysql> show master status;
+-------------+----------+--------------+------------------+-------------------+
| File        | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------+----------+--------------+------------------+-------------------+
| db50.000003 |     1804 |              |                  |                   |
+-------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql> delete from tarena.user where uid = 7777;
mysql> show master status;
+-------------+----------+--------------+------------------+-------------------+
| File        | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------+----------+--------------+------------------+-------------------+
| db50.000003 |     2089 |              |                  |                   |
+-------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql> 
mysql> insert into  tarena.user(name,uid) values("wwww",7777);
mysql> insert into  tarena.user(name,uid) values("AAAwww",7777);
mysql> show master status;
+-------------+----------+--------------+------------------+-------------------+
| File        | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------+----------+--------------+------------------+-------------------+
| db50.000003 |     2753 |              |                  |                   |
+-------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

通过 指定偏移量范围恢复数据

--start-position=偏移量      --stop-position=偏移量 

查看执行命令的偏移量范围

mysql> show binlog events in "db50.000003";

只读取范围内的命令管道给 连接数据库服务命令执行

[root@host50 ~]# mysqlbinlog --start-position=658 --stop-position=2794 /mylog/db50.000003 | mysql -uroot -p654321
mysql: [Warning] Using a password on the command line interface can be insecure.

[root@host50 ~]# mysql -uroot -p123456 -e 'select  * from tarena.user'

通过指定时间范围恢复数据

--start-datetime="yyyy/mm/dd  hh:mm:ss"   --stop-datetime="yyyy/mm/dd  hh:mm:ss"

删除数据

]# mysql -uroot -p123456 -e 'delete from  tarena.user where name="wwww"' 

]#  mysqlbinlog    /目录名/日志文件名    #即可以看到命令执行的时间又可以命令执行的偏移量

host50]#  mysqlbinlog  /mylog/db50.000003

查看日志恢复数据

[root@host50 ~]# mysqlbinlog  --start-datetime="2021/12/15 11:04:42"
--stop-datetime="2021/12/15 11:04:50"  /mylog/db50.000003 | mysql -uroot  -p123456

查看数据

[root@host50 ~]# mysql -uroot -p123456 -e  'select * from  tarena.user where name="wwww"' 

使用第三方软件percona提供的备份命令innobackupex 对数据做备份和恢复 

特点:在线热备不锁表 适合生产环境下备份业务

第一步:安装提供命令的软件

]#yum -y install libev-4.15-1.el6.rf.x86_64.rpm percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm
]#which  innobackupex
/usr/bin/innobackupex

]# innobackupex  --help
]# man innobackupex  按q 退出帮助

数据完全备份与恢复 (对数据做完全备份也不锁表)

备份数据命令格式

]#innobackupex  -uroot -p密码  /备份目录名  --no-timestamp

--no-timestamp  可选项,不用系统的日期做存放备份文件的目录名

恢复数据命令格式

第1步 准备恢复数据

  ]#innobackupex    --apply-log  /备份目录名             

第2步 拷贝数据

  ]#innobackupex    --copy-back  /备份目录名 

  

恢复数据的操作步骤:

1) 停止数据库服务

2) 清空数据库目录

3) 准备恢复数据

4) 拷贝数据

5) 修改数据库目录的所有者者组用户为mysql

6)  启动数据库服务

7)  管理员root用户登录服务查看数据

在数据库服务 host51 做实验:

做实验环境准备:让备份的速度 快些 可以删除一些表

mysql> use  tarena;
mysql> drop  table salary;
mysql> drop  table  employees;
mysql> drop  table  departments;
mysql> show tables;
+------------------+
| Tables_in_tarena |
+------------------+
| user             |
+------------------+
2 rows in set (0.00 sec)

 对数据做完全备份

[root@host51 ~]# innobackupex -uroot -pNSD2107...a  /allbak  --no-timestamp

[root@host51 ~]# ls /allbak/
backup-my.cnf  ib_buffer_pool  mysql               sys      xtrabackup_info
db51           ibdata1         performance_schema  xtrabackup_checkpoints  xtrabackup_logfile
[root@host51 ~]# 

 模拟数据误删除

mysql>  drop database tarena ; drop database  mysql;
mysql> exit 

恢复数据

操作步骤:

1) 停止数据库服务
[root@host51 ~]# systemctl   stop   mysqld						
2) 清空数据库目录
[root@host51 ~]# rm  -rf /var/lib/mysql/*
3) 准备恢复数据
[root@host51 ~]# innobackupex  --apply-log /allbak/			
4) 拷贝数据
[root@host51 ~]# innobackupex  --copy-back /allbak/			
5) 修改数据库目录的所有者者组用户为mysql
[root@host51 ~]# chown  -R mysql:mysql /var/lib/mysql					
6)  启动数据库服务
[root@host51 ~]# systemctl   start  mysqld					
7)  管理员root用户登录服务查看数据
[root@host51 ~]# mysql -uroot -pNSD2107...a -e 'show databases'

使用完全备份文件 恢复1张的数据

发生的情况:

[root@host51 ~]# mysql -uroot -pNSD2107...a
mysql> delete from tarena.user;		
mysql> select * from tarena.user;

恢复表记录 具体操作步骤

1) 删除表空间 (表名.ibd) 用来存储表记录的文件 select * from  表;
						   删除表空间就是把数据库目录下没有记录的表名.idb文件删除

mysql> ALTER  TABLE  库名.表名  DISCARD  TABLESPACE;  
mysql> alter  table  tarena.user discard tablespace;

2) 导出表信息(生成备份目录下备份数据的信息文件)
]# innobackupex --apply-log --export   数据完全备份目录 
host51~]# innobackupex  --apply-log --export  /allbak
 			
3) 拷贝表信息文件到数据库目录下
[root@host51 db51]# cp /allbak/tarena/user.ibd  /var/lib/mysql/tarena/
[root@host51 db51]# cp /allbak/tarena/user.cfg  /var/lib/mysql/tarena/
[root@host51 db51]# cp /allbak/tarena/user.exp  /var/lib/mysql/tarena/
或
[root@host51 db51]# cp /allbak/tarena/user.{ibd,cfg,exp} /var/lib/mysql/tarena/

4) 修改表信息文件的所有者及组用户为mysql
[root@host51 db51]# chown  mysql:mysql /var/lib/mysql/tarena/user.*			

5) 导入表空间
mysql> ALTER  TABLE  库名.表名   IMPORT  TABLESPACE;   
mysql> alter  table  tarena.user  import  tablespace;
			
6) 删除数据库目录下的表信息文件
[root@host51 db51]# rm -rf /var/lib/mysql/tarena/user.cfg 
[root@host51 db51]# rm -rf /var/lib/mysql/tarena/user.exp 
			
7) 查看表记录			
mysql> select  * from tarena.user;	

数据增量备份与恢复

说明:增量备份是备份 上次备份后新产生的数据

所以在执行增量备份之前 必须得现有一次备份 不然的话无法得知那些数据是新数据

通常增量备份之前的备份 就应该是完全备份  比如  每周的周一都对数据做完全备份

每周的周二到周日 对数据都做增量备份

增量备份数据的命令格式

--incremental  备份新数据并定义新数据存放的目录名 
--incremental-basedir  备份新数据参考的备份目录名
		
]#innobackupex   -uroot     -p密码   --incremental   /目录名   
--incremental-basedir=/目录名   --no-timestamp 

增量恢复数据的命令格式

--incremental-dir 增量备份数据存放的目录名

#准备恢复数据
]#innobackupex   --apply-log   --redo-only   /首次备份目录名 

#合并数据 合并的次数与增量备份的顺序要一致 
]#innobackupex   --apply-log   --redo-only   /首次备份目录名   --incremental-dir=/目录名 

#拷贝数据
]#innobackupex   --copy-back /完全备份目录

使用增量备份文件恢复数据的具体操作步骤:

1) 停止数据库服务

2) 清空数据库目录

3) 准备恢复数据

4) 合并数据 (合并的次数要增量备份的次数一样 并且合并的顺序也有与增量备份的顺序一致)

5) 恢复数据

6) 修改数据库目录的所有者和组用户为mysql

7)  启动服务

8) 查看数据

增量备份的例子:

统一在 host51 主机做练习

每周的周一对数据做完全备份  每周的周二到周日对数据做增量备份

周一 执行完全备份

[root@host51 ~]# innobackupex -uroot -pNSD2107...a  /fullbak  --no-timestamp

[root@host51 ~]# ls /fullbak/
backup-my.cnf  ib_buffer_pool  mysql               sys                     xtrabackup_info
db51           ibdata1         performance_schema  xtrabackup_checkpoints  xtrabackup_logfile
[root@host51 ~]# 

向表里添加新数据 (多执行几遍)
 mysql> insert into tarena.user(name,shell) values("fff","fff"); 

周二  执行增量备份

[root@host51 ~]# innobackupex -uroot -pNSD2107...a  --incremental  /new1dir  --incremental-basedir=/fullbak  --no-timestamp

 查看备份目录 列表

[root@host51 ~]# ls /new1dir/  
backup-my.cnf   ibdata1.delta  performance_schema      xtrabackup_info
db51            ibdata1.meta   sys                     xtrabackup_logfile
ib_buffer_pool  mysql          xtrabackup_checkpoints
[root@host51 ~]# 

向表里添加新数据  多执行几遍

mysql> insert into tarena.user(name,shell)  values("zzz","zzz"); 

说明: 如果周二做的是差异备份的话 命令这样写

[root@host51 ~]# innobackupex -uroot -pNSD2107...a  --incremental  /new1dir -incremental-basedir=/fullbak --no-timestamp

周三  执行增量备份

[root@host51 ~]# innobackupex -uroot -pNSD2107...a  --incremental  /new2dir  --incremental-basedir=/new1dir  --no-timestamp


[root@host51 ~]# ls /new2dir/  查看备份目录 列表
backup-my.cnf   ibdata1.delta  performance_schema      xtrabackup_info
db51            ibdata1.meta   sys                     xtrabackup_logfile
ib_buffer_pool  mysql          xtrabackup_checkpoints
[root@host51 ~]# 

向表里添加新数据  mysql> insert into tarena.user(name,shell)  values("www","wwww"); (多执行几遍)

说明: 如果周三做的是差异备份的话 命令这样写

[root@host51 ~]# innobackupex -uroot -pNSD2107...a  --incremental  /new2dir --cremental-basedir=/fullbak --no-timestamp

周四  执行增量备份

[root@host51 ~]# innobackupex -uroot -pNSD2107...a  --incremental  /new3dir
--incremental-basedir=/new2dir --no-timestamp


[root@host51 ~]# ls /new3dir/  查看备份目录 列表
backup-my.cnf   ibdata1.delta  performance_schema      xtrabackup_info
db51            ibdata1.meta   sys                     xtrabackup_logfile
ib_buffer_pool  mysql          xtrabackup_checkpoints
[root@host51 ~]# 

说明: 如果周四做的是差异备份的话 命令这样写

[root@host51 ~]# innobackupex -uroot -pNSD2107...a  --incremental  /new3dir  --cremental-basedir=/fullbak --no-timestamp

周五到 周日 不演示了

增量恢复 (使用增量备份文件恢复数据)

模拟数据丢失

[root@host51 ~]# mysql -uroot -pNSD2107...a  -e 'drop database tarena'
[root@host51 ~]# mysql -uroot -pNSD2107...a  -e 'drop database mysql'

具体操作步骤:(host51 主机使用自己的增量备份文件恢复数据)

1) 停止数据库服务  
[root@host51 ~]# systemctl  stop mysqld

2) 清空数据库目录 
[root@host51 ~]# rm  -rf /var/lib/mysql/*
3) 准备恢复数据 (告诉程序innobackupex从什么位置开始合并数据)
[root@host51 ~]# innobackupex --apply-log --redo-only /fullbak/
					
4) 合并数据 (合并的次数要增量备份的次数一样 并且合并的顺序也有与增量备份的顺序一致)
[root@host51 ~]# innobackupex --apply-log --redo-only /fullbak/	
--incremental-dir=/new1dir   合并第1次增量备份数据

[root@host51 ~]# innobackupex --apply-log --redo-only /fullbak/	
--incremental-dir=/new2dir   合并第2次增量备份数据

[root@host51 ~]# innobackupex --apply-log --redo-only /fullbak/  
--incremental-dir=/new3dir  合并第3次增量备份数据

5) 恢复数据  (把合并后的数据拷贝到数据库目录下)
[root@host51 ~]# innobackupex --copy-back /fullbak

6) 修改数据库目录的所有者和组用户为mysql
[root@host51 ~]# chown -R mysql:mysql /var/lib/mysql					
7)  启动服务
					
[root@host51 ~]# systemctl  start mysqld
8)查看数据 
[root@host51 ~]# mysql -uroot -pNSD2107...a -e 'show databases'	

  • 0
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值