作为一名合格的MySQL DBA,备份是重中之重。为了保证备份集的安全可靠,除了集中存储以外还有其他更好的方案吗? 当然是有的,可以存储在OSS或者分布式存储上。那么问题来了,如何能够实现自动备份,不需要人工干预即可上传到OSS上,节约大量的时间去悠哉悠哉地喝喝茶、看看报呢?且听下文
1、 逻辑备份:常见的逻辑备份MySQLDUMP和MySQLpump;
2、物理备份:常见的物理备份xtrabackup;
3、冷备份:关闭MySQL,拷贝文件,并启动MySQL;
本文重点介绍xtrabackup备份。
首先会启动一个xtrabackup_log
后台检测的进程,实时检测mysql redo
的变化。
一旦发现redo有新的日志写入,立刻将日志写入到xtrabackup_log
中。
复制innodb
的数据文件和系统表空间文件,idbata1到对应的默以默认时间戳为备份目录的地方;
复制结束后,执行 flush table with read lock
操作,复制 .frm .myd .myi
文件,并且在第一时刻获得binary log
位置,将表进行解锁 unlock tables
,停止xtrabackup_log
进程。
基本操作:
1.全量备份
innobackupex --defaults-file=/etc/my.cnf --user=root --password=redhat /data/backup
--defaults-file 配置文件
--user 表示用户名
--password 表示密码
/data/backup 备份路径
2. 应用redo
innobackupex --apply-log 2017-02-17_11-50-43
3.恢复
(1)需要恢复地方的MySQL需要关闭
(2)目前datadir 为空
(3)手工把刚applu的文件cop过去或者
innobackupex --copy-back /data/backup/2017-02-17_11-36-47/
(4)更改copy过去的权限
chow -R mysql:mysql /data/backup/2017-02-17_11-36-47/
(5)启动mysql
https://github.com/enmotplinux/mysql_backup
主要实现目标 :能够实现基于xtrabackup 的MySQL自动化备份,并且上传到OSS上。(ceph暂时不支持 ,需要那位好心的小伙伴提供一个ceph的测试环境,后续就可以支持。) 目录lib下 innodb_backup.py 主要实现:xtrabackup备份和自动apply-log 根目录的index.py主要实现:调用lib下面的innodb_backup下面的函数 并且自动上次到oss上,需要配置oss的认证信息。 根目录test.py 主要实现:下载最新的备份,并且配置启动。目的主要是为了实现自动校验。 关于备份校对,我推荐使用“心跳表”的方式来校对备份。
1、需要单独的物理网络做备份网络,避免在执行备份传输的时候造成网络阻塞,从而影响业务; 2、多个备份同时执行时,需要考虑一个队列问题。避免同时上传,导致网络阻塞,出现本地备份成功,但上传OSS或者ceph却失败的情况。因此,需要设计一个合理的队列并进行限速,先上传核心的库,每次同时上传4个,等待上传成功后再进行下一个队列的传输。 3、本地备份留2天,oss上或者ceph根据空间大小和库的大小自行决定设计。
转载声明:本文转载自微信公众号「老叶茶馆」。