实验:模拟场景中误删除mysql数据库表,然后使用全备份以及二进制日志文件恢复操作

一、实验环境:

1、准备两台虚拟机,一台用于破坏数据库,一台用于还原,两台在同一个网络

2、两台最小化安装centos 7系统,并直接yum安装maraidb数据库

3、准备一个测试数据库文件,例如,hellodb_innodb.mysql 测试库里面最少有两个表。

二、实验步骤:

1、开启数据库的二进制日志功能

vim /etc/my.cnf
[mysqld] 下面加入log-bin 表示开启二进制日志功能

2、完全备份

mysqldump -A -F --master-data=2 --single-transaction |gzip > /data/all.sql.gz
备份数据库文件并用gzip压缩,存放到/data目录

3、直接连接数据库修改任意表

insert students (name,age)values(‘a‘,20);
insert students (name,age)values(‘b‘,30);

select * from students 查询新加入的表信息

4、模拟删除数据库表

drop table students;如图下,已将students表删除;

5、假装不知道,继续修改其他表

insert teachers (name,age)values(‘zhangsir‘,30);

6、发现重要表删除,立即锁表

flush tables with read lock; 给表加上读锁

7、在另一台机子上还原

vim /etc/my.cnf
skip-networking 确保其它用户不能访问数据库,只能自己操作
rm -rf /var/lib/mysql 将原来的数据库文件删除,避免原来有文件
scp /data/all.sql.gz 192.168.190.129:/data
将原来备份的文件,复制到现主机的目录中

8、完全备份还原

gzip -d /data/all.sql.gz 解压打包的备份文件
mysql < /data/all.sql 将文件导入到数据库中

9、还原增量备份

less /data/all.sql 查看二进制日志位置

确定二进制日志,以及起始位置为245
scp /var/lib/mysql/mariadb-bin.000002 192.168.190.129:/data
将二进制文件拷贝过来
mysqlbinlog -- start-position=245 /data/mariadb-bin.000002 > /data/binlog.sql
使用mysqlbinlog工具,生成新的二进制日志

vim /data/binlog.sq
找到drop table students; 这条sql语句,注释有关此行

mysql < /data/binlog.sql
导入二进制日志文件
恢复用户的访问

三、检验数据的完整性

show databases;
show tables

上图中的students表已经恢复过来


如图所示,之前做的修改也都回来了。实验目的达到了。

四、实验总结

mariadb 数据库破坏后,需要借助完全备份+二进制日志文件进行还原,两者缺一不可,两者都非常重要,生产中既要保护好备份的数据库文件,同时还需要保护好二进制文件,从而保证数据还原的完整性。

原文地址:http://blog.51cto.com/11912662/2154117

时间: 2024-08-01 12:46:15

实验:模拟场景中误删除mysql数据库表,然后使用全备份以及二进制日志文件恢复操作的相关文章

MySql通过二进制日志文件恢复数据

在<百度.阿里.腾讯如何承载PB级别大数据>的视频中了解到,大型网站的数据库每天都会定时的进行数据备份份.如果设置每天的0点进行数据备份,在两个数据备份周期期间数据库出现宕机情况,0点到宕机这个时间段的数据如何备份呢?在MySql中是通过数据库的二进制日志文件进行数据恢复的. MySql的二进制日志文件默认是关闭的,需要我们在MySql根目录下的my.ini文件中设置为开启状态.设置方式为在[mysqld]节点下,添加log-bin=mysql  binlog-do-db=spring,mys

创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表

创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表 创建数据模型类(POCO类) 在Models文件夹下添加一个User类: namespace MyFirstApp.Models { public class User { public int ID { get; set; } public string Name { get; set; } public string Email { get; se

mysql二进制日志文件详解

一.mysql的二进制日志文件 二.查看二进制日志文件信息: 1.查看二进制日志文件是否开启:show variables like 'log_bin'; 2.查看所有二进制日志文件的列表:show binary logs; 3.查看当前二进制日志文件的名称(最后一个):show master status; 4.获取最新日志文件命令:flush logs.会重新生成一个最新的日志文件. 5.清空当前二进制日志命令:reset master.每执行一次就删除当前的一个日志文件,每次删除一个文件.

将Hive统计分析结果导入到MySQL数据库表中(一)——Sqoop导入方式

最近在做一个交通流的数据分析,需求是对于海量的城市交通数据,需要使用MapReduce清洗后导入到HBase中存储,然后使用Hive外部表关联HBase,对HBase中数据进行查询.统计分析,将分析结果保存在一张Hive表中,最后使用Sqoop将该表中数据导入到MySQL中.整个流程大概如下: 下面我主要介绍Hive关联HBase表--Sqoop导出Hive表到MySQL这些流程,原始数据集收集.MapReduce清洗及WEB界面展示此处不介绍. 一.HBase数据库表 hbase(main):

将Hive统计分析结果导入到MySQL数据库表中(三)——使用Hive UDF或GenericUDF

前面我分别介绍了两种Hive将分析结果导入到MySQL表的两种方式:Sqoop导入方式和使用Hive.MySQL JDBC驱动,现在我介绍第三种,也是使用比较多的方式--使用Hive 自定义函数(UDF或GenericUDF)将每条记录插入到数据库表中. 一.使用UDF方式 使用UDF方式实现比较简单,只要继承UDF类,并重写evaluate方法即可 1.编写实现类 package com.gxnzx.hive.udf; import org.apache.hadoop.hive.ql.exec

使用Sqoop1.4.4将MySQL数据库表中数据导入到HDFS中

问题导读:         1.--connect参数作用? 2.使用哪个参数从控制台读取数据库访问密码? 3.Sqoop将关系型数据库表中数据导入HDFS基本参数要求及命令? 4.数据默认导入HDFS文件系统中的路径? 5.--columns参数的作用? 6.--where参数的作用? 一.部分关键参数介绍 参数介绍 --connect <jdbc-uri> 指定关系型数据库JDBC连接字符串 --connection-manager <class-name> 指定数据库使用的管

mysql数据库表间内外链接详解

1. 内连接(自然连接) 2. 外连接 (1)左外连接 (左边的表不加限制)(2)右外连接(右边的表不加限制)(3)全外连接(左右两表都不加限制) 3. 自连接(同一张表内的连接) SQL的标准语法:select table1.column,table2.column from table1 [inner | left | right | full ] join table2 ontable1.column1 = table2.column2; inner join 表示内连接: left jo

Python数据库操作 Mysql数据库表引擎与字符集#学习猿地

# Mysql数据库表引擎与字符集 ![](./imgs/752951346A5F4E7EBDE362FA97107707.png) ### 1.服务器处理客户端请求 其实不论客户端进程和服务器进程是采用哪种方式进行通信,最后实现的效果都是:**客户端进程向服务器进程发送一段文本(MySQL语句),服务器进程处理后再向客户端进程发送一段文本(处理结果).**那服务器进程对客户端进程发送的请求做了什么处理,才能产生最后的处理结果呢?客户端可以向服务器发送增删改查各类请求,我们这里以比较复杂的查询请

查看和改动MySQL数据库表存储引擎

要做一名合格的程序猿,除了把代码写的美丽外,熟知数据库方面的知识也是不可或缺的.以下总结一下怎样查看和改动MySQL数据库表存储引擎:        1.查看数据库所能支持的存储引擎:show engines;        2.查看某个数据库中某个表所使用的存储引擎:show table status from db_name where name='table_name';(注:将where条件去掉后能够查看某个数据库中全部表的存储引擎情况)        3.改动表引擎方法:alter t