mysql数据安全之备份的背景意义
介绍数据备份
mysql数据安全之mysqldump备份实例(跨机器)
一般存在于mysql的bin目录下。中小型企业,数据量不是特别大的时候可以使用这个方式备份。
可以看到备份过来的库了。这是备份单个数据库。
如果想备份库中的某个表:
在数据库后加上表名即可。
备份多个数据库:
在备份库的时候,如果我们不加--databases,我们只是备份的数据,而不是库的结构。
备份是否加选项是有区别的。
mysqldump还有很多参数,可以使用--help进行查看。
这种方式属于完全备份,如果是在本地备份,-h选项可以去掉。
我们解压出来看看里面是什么东西:
我们能看到很大sql语句,但是它并没有把创建库的那个语句带过来。
如果我们把库删了,使用这个备份的语句时,会报找不到库名。
这种方式属于逻辑备份。
mysql数据安全之mysql数据的恢复
备份全库:
删除库(只是为了学习,在公司里千万不要这样做,万一恢复不回来,事情就大了)
会报找不到库。
解决方式是,创建一个库。
在使用语句:
这样就可以了。
如果数据量大,这种方式非常耗费时间。
数据就回来了。
如果是之前说的加上了参数的--databases就不会出现这个问题了。
多库如何恢复
备份多库sql文件再同样方式执行即可。
mysql数据安全之物理备份
查找数据源文件路径:
如果直接把表复制粘贴的方式用来备份,对于MyIsAm表没有影响,但是对InnoDB表会有影响的。
创建两个数据库。
创建库会生成db.opt文件,主要存储着当前库的默认字符集和字符校验规则。
创建个InnoDB表:
创建MyISAM表:
拷贝MyIsAm表:
可以查到数据只是数据为空。
同样的方法拷贝InnoDB表:
需要备份一下三个文件,非常重要。
拷贝过来了。
原来的这个文件进行删除。
重启数据库:
重启以后这三个文件又回来了。
我们解压新的拷贝的库。
在库里能看到这个表,但是查询却报错表不存在。
我们在其它库查看其它表依旧报错表不存在。
我们可以看出来我们把这三个文件移走了是对mysql服务器整个innodb表的影响,不是单一的某一个库。
删除重启后生成的文件。
之前的文件拿回来。
所属组和所属用户都是root。
我们要去进行修改:
重启服务器。
然后就可以查询的到了。
所以建议在物理备份的时候一定要把mysql服务器先停止了。
如果备份一个正在运行着的服务,除了停mysql服务器还有另一种方式:
备份之后再解锁。
不过数据量大的话,这种方式很费时间。
生产中很少直接使用拷贝的方式物料备份,如果用这种方式一定要备份那三个文件。等备份好库和表后再使用备份的这三个文件。
需要在/etc/my.cnf下去配置:
创建个存放日志数据的目录,一定要赋予mysql权限。
文件名可以随便起,加上这两个配置。
修改了配置文件,我们就要重启Mysql服务器:
现在我们已经开启了这个二进制日志。
查看所有的binlog日志列表:
可以这样查看我们的二进制日志。
刷新二进制日志:
我们的二进制日志列表就会刷新。
重启服务也会更新出一个文件。
我们也可以删除二进制文件:
就会重新从1开始生成。
先进行一次备份:
-f为刷新二进制日志。
备份完毕。
我们的二进制日志就从2开始了。
我们现在添加一条数据:
我们这个操作会被二进制日志监视到。
我们的二进制文件使用cat或者more查看会乱码。
我们需要用Mysql命令去查看。
这个命令在我们的安装目录下:
和mysqldump是在一起的。
直接查看也是报错。
会看到很多信息。
注释掉配置文件中的内容。
当然这是二进制文件,我们也可以给它导成普通文件:
生成了普通文件,我们就可以用more来查看了:
那我们怎么来恢复数据呢?
我们恢复我们之前删除的表:
我们插入之前已经备份了表。
所以没有看到插入的数据,我们怎么进行恢复呢?
我们可以根据时间和位置来恢复数据:
我们查看忽略大小写完全匹配我们删除表的语句。
通过cat -n 我们可以查看我们是在第几行删除的这个表。
也可以通过sed命令查看具体行的命令。
我们可以恢复开始行到结束行的数据。
数据就可以恢复成功了。