博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql增量,MySQL完全、增量的备份与恢复
阅读量:5742 次
发布时间:2019-06-18

本文共 6289 字,大约阅读时间需要 20 分钟。

数据库压缩时会使用压缩率较大的xz格式压缩。

rpm -q xz //检查xz软件包是否安装

yum -y install xz //安装xz软件包

对数据库文件夹(/usr/local/mysql/data/)进行打包操作

tar Jcvf /opt/mysql-$(date +%F).tar.xz /usr/local/mysql/data/

//备份数据库文件夹,并以年月日的形式命名

ls /opt/

mysql-2018-07-02.tar.xz

7d27b9a9a92e06003d0560b3989f6320.png

对数据库文件进行恢复操作

只需将数据库文件的压缩包,解压缩即可,即使整个/data/目录都丢失仍可找回

mkdir /abc

tar Jxf mysql-2018-07-03.tar.xz -C /abc/

60c14358962a5226490f1ce5a43c5d24.png

完全逻辑备份

使用mysqldump工具备份

备份某个数据库

mysqldump -u root -p stady > /opt/stady.sql

//备份stady库到/opt目录下,-p之后可跟密码,也可不写。不写就在回车之后输入密码验证。 **备份文件后缀都为.sql,前面名称见名知意即可**

374eb45e1fa689bfb580a7e54a114fe3.png

查看备份文件的内容

e0390c0394efa1cf384ab67911688750.png

备份多个数据库

mysqldump -u root -p --databases mysql stady > /opt/mysql-stady.sql

fd02f366b6cf97a9f33bcaed347109bb.png

备份所有数据库

mysqldump -u root -p --opt --all-databases > /opt//all.sql

备份数据库中的表

mysqldump -u root -p stady info > /opt/stady-info.sql //险些库名,再接表名

备份数据库的表结构

mysqldump -u root -p -d stady info > /opt/decribe-info.sql

// -d 库名+表名

数据恢复

登陆MySQL,使用source命令恢复

恢复”备份数据库中的表“步骤中的info表

[root@centos7-6 /]# mysql -u root -p

Enter password:

··· //省略部分内容

mysql> use stady; //切换到库

Database changed

mysql> drop table info; //删除info表

Query OK, 0 rows affected (0.02 sec)

mysql> show tables; //查看库中表

Empty set (0.00 sec) //库中为空

mysql> source /opt/stady-info.sql //恢复info表,格式是source+备份文件路径和文件名称

Query OK, 0 rows affected (0.02 sec)

··· //省略部分内容

mysql> show tables; //查看库中表

+-----------------+

| Tables_in_stady |

+-----------------+

| info | //info表已经成功恢复

+-----------------+

1 row in set (0.00 sec)

使用mysql命令恢复表

[root@centos7-6 /]# mysql -u root -p

Enter password:

··· //省略部分内容

mysql> use stady; //切换到库

Database changed

mysql> drop table info; //删除info表

Query OK, 0 rows affected (0.02 sec)

mysql> show tables; //查看库中表

Empty set (0.00 sec) //库中为空

mysql> quit //退出数据库,切换到linux

Bye

[root@centos7-6 /]# mysql -u root -p stady < /opt/stady-info.sql //在linux环境中恢复

Enter password:

[root@centos7-6 /]# mysql -u root -p //进入数据库查看

Enter password:

··· //省略部分内容

mysql> use stady;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> show tables;

+-----------------+

| Tables_in_stady |

+-----------------+

| info | //info表已恢复

+-----------------+

1 row in set (0.00 sec)

恢复库和恢复表的方式相同,但在恢复数据表时要注意,如果备份文件中只备份了表文件,此时mysql中又没有库时,若直接恢复,会失败,必须先创建库,然后再进行恢复。

增量备份

在MySQL数据库中创建stady库,创建info表,并插入数据

mysql> use stady;

mysql> select * from info;

+----------+-------+

| name | score |

+----------+-------+

| zhangsan | 80.00 |

| lisi | 90.00 |

+----------+-------+

2 rows in set (0.00 sec)

开启二进制日志

vim /etc/my.cnf

log-bin=mysql-bin //在[mysqld]段插入该语句

systemctl restart mysqld.service //重启mysql服务,会在/data/目录下生成新的日志文件(空文件)

ab7034d6ee0aed821f2c337f870a72bd.png

1adf621c6d5a0a622a5845f27dc19220.png

使用mysqldump备份stady库

mkdir /backup

mysqldump -u root -p stady > /backup/stady.sql

mysqladmin -u root -p flush-logs //刷新生成新的日志文件,存在01中,新存在的02为空文件

78a1ec127e1baa4729a2699174c607df.png

插入新数据,生成新的增量日志文件

mysql> insert into info (name,score) values ('chen',90);//进入数据库,向表中插入数据

mysqladmin -u root -p flush-logs //刷新生成新的增量文件,增量备份保存在02中

mysql> insert into info (name,score) values ('chen01',96);//再次进入数据库,向表中插入数据

mysql> select * from info;

+----------+-------+

| name | score |

+----------+-------+

| zhangsan | 80.00 |

| lisi | 90.00 |

| chen | 90.00 |

| chen01 | 96.00 |

+----------+-------+

4 rows in set (0.00 sec)

mysqladmin -u root -p flush-logs //再次刷新,增量备份保存在03中

8b002836ca0a3e8753e5e03b4a2c890b.png

增量恢复

模拟数据丢失,删除新添加的两条记录

[root@centos7-6 data]# mysql -u root -p

Enter password:

mysql> use stady;

Database changed

mysql> delete from info where name='chen';

Query OK, 1 row affected (0.00 sec)

mysql> delete from info where name='chen01';

Query OK, 1 row affected (0.00 sec)

mysql> select * from info;

+----------+-------+

| name | score |

+----------+-------+

| zhangsan | 80.00 |

| lisi | 90.00 |

+----------+-------+

2 rows in set (0.00 sec)

使用mysqlbinlog命令,恢复数据

[root@centos7-6 data]# mysqlbinlog --no-defaults mysql-bin.000002 | mysql -u root -p

Enter password: //输入密码确认恢复数据

[root@centos7-6 data]# mysql -u root -p

Enter password: //输入密码登陆系统

mysql> use stady;

Database changed

mysql> select * from info;

+----------+-------+

| name | score |

+----------+-------+

| zhangsan | 80.00 |

| lisi | 90.00 |

| chen | 90.00 |//增量备份的02数据成功恢复

+----------+-------+

3 rows in set (0.00 sec)

使用mysqlbinlog查看增量备份文件的内容

mysqlbinlog --no-defaults --base64-output-decode-rows -v /usr/local/mysql/data/mysql-bin.000002

//--base64-output=decode-rows使用64位编码机制解码,按行读取 -v 显示出来

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;

··· //省略部分内容

# at 345

#180703 21:12:11 server id 1 end_log_pos 389 CRC32 0xb0bc2cb1 Write_rows: table id 118 flags: STMT_END_F

### INSERT INTO `stady`.`info`

### SET

### @1='chen'

### @2=90.00

···//省略部分内容

在开启二进制日志之后就会在/data/目录下生成空的mysql-bin.000001文件,在使用该命令mysqladmin -u root -p flush-logs 后会将增量备份写入mysql-bin.000001,同时生成一个新的mysql-bin.000002空文件,等待下次刷新写入,同时再创建mysql-bin.000003……

增量断点恢复

模拟环境

模拟插入数据出现误操作,在插入两条数据的同时,删除了一条正确的数据。

[root@centos7-6 data]# mysql -u root -p

Enter password:

mysql> use stady;

Database changed

mysql> insert into info (name,score) values ('test01',88);

Query OK, 1 row affected (0.00 sec)

mysql> delete from info where name='chen';

Query OK, 1 row affected (0.00 sec)

mysql> insert into info (name,score) values ('test02',88);

Query OK, 1 row affected (0.01 sec)

mysql> select * from info;

+----------+-------+

| name | score |

+----------+-------+

| zhangsan | 80.00 |

| lisi | 90.00 |

| test01 | 88.00 |

| test02 | 88.00 |

+----------+-------+

4 rows in set (0.00 sec) //插入了两条test01和test02,但是chen被操作删除

mysql> quit //退出数据库

Bye

[root@centos7-6 data]# mysqladmin -u root -p flush-logs //刷新生成新的增量文件,保存在04中

Enter password:

增量时间节点恢复

解码导出增量备份文件,便于查看和做恢复

mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000004 > /backup/info.txt

cd /backup

记录错误操作的开始时间,以及正确操作的开始时间,恢复时跳过该时段的操作。

c9faaab6d882f4d7587a2564602bd8e2.png

根据时间点恢复被误操作的数据

mysql> drop table info; //删除被误操作的表

mysql -u root -p stady < /backup/stady.sql //恢复完全备份的stady库

mysqlbinlog --no-defaults --stop-datetime='2018-07-03 21:57:08' /usr/local/mysql/data/mysql-bin.000004 | mysql -u root -p //恢复误操作前的内容

mysqlbinlog --no-defaults --start-datetime='2018-07-03 21:57:14' /usr/local/mysql/data/mysql-bin.000004 | mysql -u root -p //恢复误操作之后的内容

根据位置标记号恢复数据

1253cf1bfb1ddd80547e727bfc0cf866.png

mysql> drop table info; //删除被误操作的表

mysql -u root -p stady < /backup/stady.sql //恢复完全备份的stady库

mysqlbinlog --no-defaults --stop-position='1408' /usr/local/mysql/data/mysql-bin.000005 | mysql -u root -p

mysqlbinlog --no-defaults --start-position='1674' /usr/local/mysql/data/mysql-bin.000005 | mysql -u root -p

数据完成恢复

97ffc4a9ac61c771fdc2d57c9e61704e.png

转载地址:http://zdnzx.baihongyu.com/

你可能感兴趣的文章
主流手机分辨率 尺寸 操作系统
查看>>
Office版本差别引发的语法问题
查看>>
使用Wireshark捕捉USB通信数据
查看>>
iOS - KVC 键值编码
查看>>
《树莓派渗透测试实战》——1.1 购买树莓派
查看>>
Apache Storm 官方文档 —— FAQ
查看>>
量化交易入门——数学模型应用于投机交易
查看>>
C++游戏系列4:杀伤距离有限制
查看>>
iOS 高性能异构滚动视图构建方案 —— LazyScrollView
查看>>
Java 重载、重写、构造函数详解
查看>>
【Best Practice】基于阿里云数加·StreamCompute快速构建网站日志实时分析大屏
查看>>
【云栖大会】探索商业升级之路
查看>>
HybridDB实例新购指南
查看>>
小程序,会是下一个创业风口吗
查看>>
C语言及程序设计提高例程-35 使用指针操作二维数组
查看>>
华大基因BGI Online的云计算实践
查看>>
深入理解自定义Annotation,实现ButterKnif小原理
查看>>
vim的快捷键大全
查看>>
doT js模板入门
查看>>
iOS开发中的零碎知识点笔记 韩俊强的博客
查看>>