Techyou labs
真正的爱应该超越生命的长度,心灵的宽度,灵魂的深度
常用标签
您正在查看:2017年9月

背景:

XtraBackup 用于Mysql 物理备份,相比于mysqldump能实现更快速的备份恢复和增量备份,本篇文章将介绍xtrabackup在使用中的注意事项和如何全量、增量备份和恢复,记录使用中的一些注意事项。
环境:


XtraBackup版本为:2.4
系统版本:ubuntu 16.04 64bit
MySQL版本:5.7.16

xtrabackup是基于innodb灾难恢复原理的备份工具,采用直接复制你的InnoDB数据文件(复制时会导致内部不一致的数据; 但是它会对文件执行崩溃恢复,以使其再次成为一个一致的可用数据库)。[[How Percona XtraBackup Works]][1]

使用:

备份策略:


每天进行全量备份,每30min基于上一次全量备份的增量备份。这样即使还原备份,也只要prepare全量和最近一次增量的备份即可
备份文件存本地一份,同时保存到备份服务器,备份服务器保留最近3个完整备份周期(增量+全量)。
备份一个从库,还原完成直接当从库来使用。

注意:


Finally, the binary log position will be printed to STDERR and xtrabackup will exit returning 0 if all went OK.
Note that the STDERR of xtrabackup is not written in any file. You will have to redirect it to a file, e.g., xtrabackup OPTIONS 2> backupout.log.

结语:

无论是mysqldump还是xtrabackup,均无法保证数据一致性,只能保事务级别的完整性。
如果想要更好的整库完整性,请使用基于文件系统快照备份,如lvs snapshot, zfs snapshot等

September 21, 2017

假设你有一个在线商城项目 Shop,这个项目下有个订单模块 order,这个 order 模块很通用,你在下一个团购系统 Groupon,也要用到这个 order 模块,最简单的方式就是把整个 order 模块 copy 过来。

然而,这种 copy 方式,会很难维护:order 模块修改了一个Bug,然后又要复制更新到所有用了 order 模块的项目里。

这时就需要 git subtree 来管理这个 order 模块了:把 order 模块单独作为一个 git 仓库,在需要用到 order 模块的项目,通过使用 git subtree 把 order 模块当作一个 git 项目来引入,这就解决了 order 模块的共享和维护问题。
git subtree --help 可以查看 git subtree 命令的帮助文档。

git subtree 命令中,都会用到一个参数 --prefix=,可以简写成 -P ,本文的命令都是这样使用的。

git subtree add 添加项目作为子树


git subtree add -P <子树名> <子仓库地址> <分支>

执行以上命令后,项目下就会新创建一个名为 <子树名> 的目录。
如果提前使用 git remote add <子仓库名> <子仓库地址> 添加了子项目的远程仓库地址(建议按此方式,下文都基于此),那么也可以这样:


git subtree add -P &lt;子树名&gt; &lt;子仓库名&gt; &lt;分支&gt;

以上命令可以多加一个 --squash 参数:


git subtree add -P &lt;子树名&gt; &lt;子仓库名&gt; &lt;分支&gt; --squash

--squash 参数含义是:把 subtree 的改动合并成一次commit,这样就不用写入子项目完整的历史记录。

git subtree pull 从子仓库拉取子树更新

先 fetch:


git fetch &lt;子仓库名&gt; &lt;分支&gt;

后 pull:


git subtree pull -P &lt;子树名&gt; &lt;子仓库名&gt; &lt;分支&gt;

以上命令也可以多加一个 --squash 参数:


git subtree pull -P &lt;子树名&gt; &lt;子仓库名&gt; &lt;分支&gt; --squash

git subtree push 推送子树更新到子仓库


git subtree push -P &lt;子树名&gt; &lt;子仓库名&gt; &lt;分支&gt;