MySQL备份与恢复(数据库管理与高可用)

如何实现冷备份?

先搭建实验环境:

创建一个数据库及表,再往表中添加数据;

创建一个auth库;然后在这个库里面创建一个表;名为users;

再在这个表里面添加一些数据;

然后退出去,关闭mysqld服务开始冷备份;

创建备份后放置的目录;

然后进去到mysql的安装目录下;开始冷备份;

其中zcvf分别是:z:压缩;c:生成压缩包;v:显示压缩过程;f:生成一个文件;

然后进入到备份到的目录下进行查看;

文件的名字就被上述的命令,命名成了年月日的格式;方便管理;

然后开始模拟故障;首先开启mysqld数据库;

直接在命令行加上-e的选项,把指令发送到数据库中;不用再登录进去了;

开始删除库;然后进行查询;显示这个表不存在了;

先关闭mysqld服务,开始数据恢复;

把备份的压缩包解压;

此时备份好的目录就解压了出来。之前的数据也都被放置在了当前目录;

然后进入到安装目录;

将以前的mysql安装目录重命名;并且把备份目录的文件移动进来;

最后启动mysqld服务;再去查看库中表的内容;就显示了出来;

使用mysql自带的工具进行备份;mysqldump;导出后会生成一个脚本;将脚本导入到mysql中会自己创建库及表;中的内容,等等;

mysqldump -uroot -ppwd123 auth users>/opt/auth-users.sql

此工具支持热备份;不用关闭服务;

如何针对库进行导出;直接写库的名字;就会把库中的所有表进行导出;

mysqldump -uroot -ppwd123 auth >/opt/auth.sql

如何导出所有的库;--opt是优化导出的速度;

--all-databases;所有的库;

此工具不仅能进行备份,还能将这个库中的信息;导入到其他库中;

第一个语句;创建库,名为test;

第二个语句;将备份表的脚本文件重定向输入到库中;

如何将备份的库导入到库中;

只需将库名写上去即可;

如果库不存在的话,是无法导入;那么就要创建出来这个库,然后进行导入;

此时第一个库中的内容就被导入到了新创建的库中;

如何进行全部库的导入?不指定库的名字;直接重定向导入即可;

以上均为全部备份,当环境中数据比较庞大时;就不适合频繁全部备份了;

首先开启二进制事物日志功能;此功能会将用户的执行的操作语言进行记录;

方便后续的查看及恢复数据等需求;

打开mysql的配置文件;

vim /etc/my.cnf

写入以下三行文件;

重启服务生效;

然后进入到mysql的安装目录下的data目录,会生成相应的文件;

如何手动将缓冲区的语句;写入到log中;

--all-databases;所有的库;

此工具不仅能进行备份,还能将这个库中的信息;导入到其他库中;

第一个语句;创建库,名为test;

第二个语句;将备份表的脚本文件重定向输入到库中;

如何将备份的库导入到库中;

只需将库名写上去即可;

如果库不存在的话,是无法导入;那么就要创建出来这个库,然后进行导入;

此时第一个库中的内容就被导入到了新创建的库中;

如何进行全部库的导入?不指定库的名字;直接重定向导入即可;

以上均为全部备份,当环境中数据比较庞大时;就不适合频繁全部备份了;

首先开启二进制事物日志功能;此功能会将用户的执行的操作语言进行记录;

方便后续的查看及恢复数据等需求;

打开mysql的配置文件;

vim /etc/my.cnf

写入以下三行文件;

重启服务生效;

然后进入到mysql的安装目录下的data目录,会生成相应的文件;

如何手动将缓冲区的语句;写入到log中;

flush-logs

缓冲区的指令会被写入到01中记录下来;而02是创建出来的新的文件;准备接收新的指令;

如何查看文件的内容;需要用mysql的命令来进行查看;

mysqlbinlog --no-defaults mysql-bin.000001

会发现里面有内容被编码了,这时可以使用解码语句进行查看;

mysqlbinlog --no-defaults --base64-output=DECODE-ROWS mysql-bin.000001

进行试验:

然后再手动的记录到日志中;

此时执行的语句会被记录到上一个文件中;也就是02;然后进行查看;

mysqlbinlog --no-defaults --base64-output=DECODE-ROWS mysql-bin.000002

以上功能就是增量备份;如何恢复;以下进行演示:

开始模拟故障;

将这个表删除掉;然后进行查询会显示这个表不存在;

现在把之前做的完整备份导入到mysql中;

此时最初的数据被恢复了进去;然后再恢复之后修改的数据;即增量备份的数据;

将增量备份的文件导入到mysql中;利用管道符先查看再把该文件的命令导入进去;

mysqlbinlog --no-defaults mysql-bin.000002 | mysql -uroot -ppwd123

此时数据就被恢复了;

但是如果反复导入,数据就会被反复的导入一遍;

如何解决这种问题???

将该行设置成唯一索引;或主键就能解决这种类似的事情;

如果误删除操作怎么处理???

为了防止手动以命令行的方式进行恢复的语句再次被记录下来;以及后续还是会被事物日志记录下来的情况发生,以下采用精准恢复;

模拟故障;删除ccc的数据

如何进行正确恢复;

首先查看日志信息记录了该命令的执行;

mysqlbinlog --no-defaults mysql-bin.000002

找到该命令的关键信息;

该语句的起始位和结束位;

如何实现精准恢复;

mysqlbinlog --no-defaults --start-position='876' --stop-position='1021' mysql-bin.000002 | mysql -uroot -ppwd123

加上指定选项;--start-position='876' --stop-position='1021'

position:位置

然后再去查看就恢复了;

mysql -uroot -ppwd123 -e 'select * from auth.users;'

以及第二种方式进行精准恢复;

以时间的方式进行恢复;

还可以穿插着使用,前面以时间开头,后面以位置结尾;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值