使用 mysqldump 结合 git 和 shell 定时备份 Mysql 数据库

本贴最后更新于 2491 天前,其中的信息可能已经时移世易

说在前面

今天早些时候突然发现博客无法打开,远程数据库无法访问了,经过咨询 VPS 供应商客服后得知,因为发现我的 VPS 上面架设了 VPN 相关设施,被强制封禁了...封禁了...封禁了,我的数据库( ⊙ o ⊙ )啊!最近没有备份啊...

施工过程

在漫长的等待答复过程中,我不得不做起了事后诸葛亮,以应对以后可能出现的此类问题

思路

  1. 可以使用 mysqldump 生成备份 sql 文件;
  2. 使用 git 存储 sql 文件;
  3. 使用 gitlab 或者免费私人 git 仓库;(不考虑使用 github,因为不提供免费的私人仓库...成本较高)

调研

  • 使用 mysqldump 命令成功生成数据库名_bak.sql 文件,查看内容正确;
mysqldump -h主机名 -P端口号 -u数据库用户名 -p密码 数据库名>数据库名_bak.sql
  • 打听到码云有免费的 git 私人仓库 https://gitee.com

  • 使用 git 命令成功提交并推送生成的 sql 备份文件;

git add -A
git commit -m "auto-commit:${createAt}"
git push origin master

详解

基于以上准备,我决定写一个 shell 脚本,然后创建 linux 定时任务,每日自动 dump 数据库文件并自动上传到码云 git 私人仓库!

首先需要在准备执行 shell 的机器上安装有 mysql 服务并能正常使用 mysqldump 命令,如果没有请自行安装;
然后需要有 git 服务并能正常使用 git 命令,另外为了方便提交代码以及防止泄密,使用 ssh 替代账号密码方式进行 git 鉴权!

使用 ssh 管理 git 仓库

  1. 首先配置基础信息
git config --global user.name "washmore" #提交代码的署名
git config --global user.email "admin@washmore.tech" #提交代码的署名邮箱
  1. 生成 ssh 公钥
    执行下面命令,三次回车即可生成 ssh key:
ssh-keygen -t rsa -C "admin@washmore.tech"
  1. 查看生成的公钥
cat ~/.ssh/id_rsa.pub

将以上命令打印出屏幕的内容添加到码云 https://gitee.com/profile/sshkeys。(注意是三段式全部内容)

  1. 验证配置
ssh -T git@gitee.com

如果输出 Welcome to Gitee.com, your account! 表示配置成功了,没有的话自行排查

  1. 其他 git 基础 clone,commit,push 等基础操作不再赘述,如有不懂请自行查阅资料

接下来开始编写我们的 shell 脚本 data_back.sh,详情请看每个步骤的注释,shell 脚本存放位置请自选

后记

下午被告知数据抢救回来了,仅仅是被要求下架 VPN 服务,不过本文所记录的方案也会被执行起来,以免除后顾之忧,希望能给有此需求的各位童鞋带来一点点帮助

  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    692 引用 • 535 回帖
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    123 引用 • 74 回帖 • 2 关注
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    209 引用 • 358 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • washmore
    作者

    ...

  • 其他回帖
  • someone

    万事问百度...😂 😂 😂

  • someone

    😣 😜 😄 😎

  • someone

    牛逼了