- N +

MySQL 备份恢复(四)

MySQL 备份恢复(四)原标题:MySQL 备份恢复(四)

导读:

这样就算安装完成了,折腾这么久算完事了,可以好好的玩耍了,使用innobackupex --help 查看更多帮助命令。 XtraBackup 备...

文章目录 [+]


这样就算安装完成了,折腾这么久算完事了,可以好好的玩耍了,使用innobackupex --help 查看更多帮助命令。

 

XtraBackup 备份恢复操作


1、创建备份账号

我们可以使用 mysql 的 root 用户进行备份工作,也可以单独创建一个用于数据库备份的用户,过程如下。


CREATE USER 'backupdbuser'@'192.168.8.8' IDENTIFIED BY 'backupdbuser';

backupdbuser 用户授权,如下权限为正常备份的最小权限


GRANT RELOAD,LOCK TABLES,REPLICATION CLIENT,PROCESS ON *.* TO ' backupdbuser'@'192.168.8.8';


如果使用到某些高级备份功能,还需要其他权限的授权,例如 CREATE TABLESPACE、CREATE、INSERT、SELECT、SUPER 等,可根据实际情况添加,具体权限对应的高级功能可查看官方手册。




创建完账号,当然得建立一个备份的目录了,我们选择一个比较合适的目录存放备份数据,并在开始全备时不采用系统默认的备份集文件名称,使用 --no-timestamp 参数,自己重命名文件,。这里为 all_2019-05-04_bak

 


mkdir –p /opt/backup

 

2、全备命令如下:


innobackupex --defaults-file=/etc/my.cnf --no-timestamp --user backupdbuser --host 192.168.8.8  --password backupdbuser /opt/backup/all_2019-05-04_bak

 



使用此命令便开始备份了,看备份的日志,有开始备份时显示 MySQL 配置信息,提示信息、备份使用账号、版本号、备份工具依赖版本号等等信息。




备份结束时,最后会显示 completed OK!


3、备份内容




现在来看看备份都备了些啥,从上图中可以看出,备份的有配置文件 my.cnf、buffer_pool、ibdata1 以及 testdb 等各个数据库,剩下就就是以 xtrabackup 开头的四个文件。

 

xtrabackup_binlog_info 文件记录二进制日志和偏移量,若开启了 gtid 功能,还记录了 gtid 位置信息,为在线搭建从库做准备。

 

xtrabackup_checkpoints 文件记录了备份类型,full-backuped 为全备,以及开始和结束的 lsn 号等信息。

 

xtrabackup_info 文件记录了备份的详细信息,如备份命令,备份工具版本号、MySQL 版本号、备份开始和结束时间,binlog 以及 gtid 信息。

 

xtrabackup_logfile  文件是二进制文件,不能通过普通的 cat、more 等命令打开,需要使用  strings xtrabackup_logfile 打开。




4、利用全备恢复数据


假设有运维人员不小心将数据库  testdb  删除,那么数据库中的表也将不复存在。

 



报错了,首先想到的是查看日志,DBA 利用二进制日志能否查看到蛛丝马迹,又因为二进制日志无法打开,则通过系统自带的 mysqlbinlog 命令解析出可查看的日志来。通过分析数据库  testdb 被删除了,则只能利用备份恢复了。

 


[root@JiekeXu mysql]# /usr/local/mysql/bin/mysqlbinlog  --no-defaults -v -v--base64-output=decode-rows /opt/mysql/mysql-binlog.000009 > bin.log



恢复时需要加参数 --apply-log ,此参数作用主要是通过回滚未提交的事务及同步已经提交的事务至数据文件,使数据库的数据文件保持一致性。

 


innobackupex --defaults-file=/etc/my.cnf  --no-timestamp --user backupdbuser --host 192.168.8.8  --password backupdbuser --apply-log  /opt/backup/all_2019-05-04_bak



当出现 “completed OK!” 则证明备份集校检成功,离最后的恢复只差一步了。

最后,先将 MySQL 实例停掉,重命名原来的数据目录,改备份 /opt/backup/all_2019-05-04_bak/opt/mysql,并赋予 mysql 权限,重启实例,具体命令如下所示。


mysqladmin -u root -p root shutdownps -ef | grep mysqlmv /opt/mysql /opt/mysql_bakcd /opt/backupmv backup/all_2019-05-04_bak /opt/cd /opt/mv all_2019-05-04_bak/ mysqlchown –R mysql:mysql  mysql/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf  &mysql -u root -pshow databases;use testdb;select * from t;


 

恢复完成了,但是数据文件中比原来备份多了xtrabackup_binlog_pos_innodb 文件,此文件中记录了 binlog 文件和 position 号,在搭建主从架构时,如果均是 InnoDB 引擎表,则 xtrabackup_binlog_pos_innodb 此文件记录的是标准的 binlogposition 号,如若有其他混合引擎,则以 xtrabackup_binlog_info 文件记录的为准。




5、Xtrabackup 增量备份


增量备份,顾名思义是在全量基础上的备份,第一次的增量备份必须要基于上一次的全备,之后的每次增备都是基于上一次的增备,最终达到一致性的增备。

 

先做一次全备,然后查看表 t ,然后在插入数据,做一次增备,查看备份的相关信息,然后在做一次增备,检查备份相关信息后模拟故障删除表 t ,实现一个增量备份恢复的过程。

 

innobackupex --defaults-file=/etc/my.cnf --no-timestamp --user backupdbuser --host 192.168.8.8  --password backupdbuser/opt/backup/all_2019-05-09_bak

 



以上查看了表中的数据,在看一眼 xtrabackup_checkpoints 文件中 full-backuped 全备,from_lsn  初始值为  0,结束时的 to_lsn  值为 2567739。接着在表 t 里插入数据。

  • insert into t (id,name,sex) values(4,'xh','man');insert into t (id,name,sex) values(5,'gsd','man');insert into t (id,name,sex) values(6,'zsj','f');update t set id=3 where name='wbx';

root@db 23:56:  [testdb] select *from t;+------+------+------+| id   | name | sex  |+------+------+------+|    1 | xxq  | male ||    2 | lqq  | f   ||    3 | wbx  | f   ||    4 | xh   | man ||    5 | gsd  | man ||    6 | zsj  | f   |+------+------+------+6 rows in set (0.00 sec)

 

插入完数据后,就已经到 5 月 10 日了,今天有一个增量备份,增备需要添加一个参数 --incremental ,增备的文件为 /opt/backup/all_2019-05-10_incr 。而且要使用 --incremental_basedir 参数代表在全备的基础上做增备。

增备命令如下:


innobackupex --defaults-file=/etc/my.cnf --no-timestamp --user backupdbuser --host 192.168.8.8  --password backupdbuser --incremental  /opt/backup/all_2019-05-10_incr --incremental_basedir=/opt/backup/all_2019-05-09_bak




增备完成后,来瞅一眼 xtrabackup_checkpoints 文件,备份类型是增备,备份开始的 lsn 是上个全备结束的 lsn2567739,之后的备份以此类推。那么,我么在往表 t 插入一条数据:


root@db 23:56:  [testdb] insert into t (id,name,sex) values(7,'mjz','f');Query OK, 1 row affected (0.04 sec)root@db 14:20:  [testdb] select * from t;+------+------+------+| id   | name | sex  |+------+------+------+|    1 | xxq  | m   ||    2 | lqq  | f   ||    3 | wbx  | f   ||    4 | xh   | m   ||    5 | gsd  | m   ||    6 | zsj  | f   ||    7 | mjz  | f   |+------+------+------+7 rows in set (0.00 sec)


假设已经过了一天了,然后我们来进行第二次增量备份操作,这个备份是基于上个备份做的。命令如下:

 


innobackupex --defaults-file=/etc/my.cnf --no-timestamp --user backupdbuser--host 192.168.8.8  --password backupdbuser --incremental /opt/backup/all_2019-05-11_incr --incremental_basedir=/opt/backup/all_2019-05-10_incr

 

备份成功后在来看一下 lsn 和 备份类型,这个的备份类型还是增备,起始的 lsn 是上一个增备结束的 lsn .


cat /opt/backup/all_2019-05-11_incr/xtrabackup_checkpoints



6、Xtrabackup 增量备份的恢复


首先模拟故障将表 t 删除:




use testdb;drop table t;select * from t;


首先在恢复的过程中将全备恢复,然后将两个增量备份恢复到全备中,在停掉实例,替换原来的数据文件目录,更改权限重启即可。值得注意的是前两个过程需要添加参数 --redo-only,它意味着只前滚  Xtrabackup 备份中已经提交的事务,并不回滚那些还没有提交的事务信息。最后一个过程就是对整体全备进行恢复,这时可以去掉 --redo-only 参数了,意味着需要回滚那些还没有提交的事务。

 

恢复过程如下:


全备恢复:


innobackupex --defaults-file=/etc/my.cnf  --user backupdbuser --host 192.168.8.8 --password backupdbuser --apply-log --redo-only /opt/backup/all_2019-05-09_bak

第一个增量备份恢复到全备中:


innobackupex --defaults-file=/etc/my.cnf  --user backupdbuser --host 192.168.8.8 --password backupdbuser --apply-log --redo-only /opt/backup/all_2019-05-09_bak  --incremental-dir=/opt/backup/all_2019-05-10_incr

第二个增量备份恢复到全备中:


innobackupex --defaults-file=/etc/my.cnf  --user backupdbuser --host 192.168.8.8 --password backupdbuser --apply-log --redo-only /opt/backup/all_2019-05-09_bak  --incremental-dir=/opt/backup/all_2019-05-11_incr

第三次恢复,将前面新恢复的备份进行一次完全恢复,回滚那些还未提交的数据。注意:这一次不需要添加--redo-only 参数了。


innobackupex --defaults-file=/etc/my.cnf  --user backupdbuser --host 192.168.8.8 --password backupdbuser --apply-log  /opt/backup/all_2019-05-09_bak

 

这时,文件中已经恢复了所有的数据,剩下的就是关库,替换数据目录,赋权,重启,相关命令如下:

  • mysqladmin –uroot –proot shutdown ps -ef | grep mysqlmv  /opt/mysql  /opt/mysql_bakcd /opt/backupmv all_2019-05-09_bak  /opt/cd /opt/mv all_2019-05-09_bak/ mysqlchown -R mysql:mysql  mysql/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf  &mysql -u root -pshow databases;use testdb;select * from t;




7、Xtrabackup 流式化备份


流式化备份可以理解为不占用本地磁盘空间,节省本地服务器磁盘空间,流式化备份有两个输出格式,一种是基于 tar 格式的,一种是基于 xbstream 的,这里主要看一下 tar 格式的备份。

 

流式化备份重要的一个参数就是 --stream,有压缩格式和非压缩格式。

 


innobackupex  --defaults-file=/etc/my.cnf --no-timestamp --user backupdbuser --host 192.168.8.8  --password backupdbuser --stream=tar /tmp  |gzip - >/opt/backup/all_20190512.tar.gz

 


innobackupex  --defaults-file=/etc/my.cnf --no-timestamp --user backupdbuser --host 192.168.8.8  --password backupdbuser --stream=tar /tmp > /opt/backup/all.tar

 



远程备份


远程备份就是考虑到数据库的数据量巨大,几个 T 的数据存放到本地磁盘太占空间,则考虑到远程服务器。首先配置好两台服务器的互信,建立远程服务器上的备份目录,利用 SSH 远程登录。

 


innobackupex  --defaults-file=/etc/my.cnf --no-timestamp --user backupdbuser --host 192.168.8.8  --password backupdbuser --stream=tar /tmp  |gzip |ssh root@192.168.8.9 "cat - > /data2/backup/all_2019-05-12.tar.gz"

 

看到这里就结束了,感谢您的阅读,佩服您的耐心,能够看完全文,非常感谢。MySQL 备份相关的知识点应该是全部结束了,其他几篇可以查看历史记录。备份恢复的时候翻出来瞅瞅,大概率是有帮助的,有帮助我也很欣慰,好久没开过赞赏了,要是下面能出现你的头像,那我会更加欣慰的!

 

在这母亲节之际,拿起手机打个电话发个视频,多点陪伴多点关怀,唠唠家常,比铺天盖地的朋友圈的祝福好上千倍万倍!另外,今天是“5·12全国防灾减害日”,还记得 5·12 汶川地震么?还记得那些可爱的人儿吗?十一年,美好的人生,美好的时光,一生能有多少个十一年,且行且珍惜!

 



本文标题:MySQL 备份恢复(四)
本文链接:http://www.kyjszj.com/sjkzq/251.html
作者授权:除特别说明外,本文由 开源技术之家 原创编译并授权 开源技术之家 刊载发布。
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。

有好的文章希望我们帮助分享和推广,猛戳这里我要投稿

返回列表
上一篇:
下一篇:

发表评论中国互联网举报中心

快捷回复:

    评论列表 (暂无评论,共399人参与)参与讨论

    还没有评论,来说两句吧...