一、前言
备份数据真的很很很重要,在项目中有时误操作,因为我对mysql的redolog的那些知识不太熟悉,本人目前身兼运维(伪)加后台开发,这段时间项目中经常涉及到一些还没开发的业务,目前解决方案是,写少量代码在测试环境下修改数据库的内容,然后对生成环境下的库进行执行测试环境备份出来的sql来实现业务的需求。
就试过几次,备份的版本不是最新,导致有部分业务数据受到影响,狠下心来,好好搞一下MYSQL自动备份
本次方案很简单,用的是定时任务加mysqldump命令实现
二、知识准备
知道mysql 在命令行怎么执行sql和备份
2.1执行sql
mysql -u root -p db_1 </home/update.sql
这一句就是mysql 在命令行直接运行在/home 路径下的update.sql
这里要注意你的sql中有没有use database 的命令 有的话 可以不用在命令行指定数据库
然后执行之后会输入密码,完事之后就执行完了。
2.2备份
可以指定表,也可以整个库备份
mysqldump -u root -p db_1 tb_1 >/home/bk1.sql
这里的意思是 把db_1数据库中的表tb_1 备份到bk1.sql
拿到sql 自己在可视化工具中看看sql是长什么样子的
有没有drop database 之类的语句 能不能直接执行到你要复原的库中
还有就是 假如直复制运行 检查 “-”是否为英文的 -
输入root的密码之后就能在home下看到备份的sql了
三、脚本准备
3.1文件准备
cd /home
mkdir backup
cd backup
3.2新建脚本
注意把以下命令中的DatabaseName换为实际的数据库名称;
随你
vi bkDatabaseName.sh
3.3写命令
输入/粘贴以下内容:
这里 不要在windows下搞成一个sh再去复制,会有小问题,linux windows问题
#!/bin/bash
mysqldump -uusername -ppassword DatabaseName > /home/backup/DatabaseName_$(date +%Y%m%d_%H%M%S).sql
#!/bin/bash
mysqldump -uusername -ppassword DatabaseName | gzip > /home/backup/DatabaseName_$(date +%Y%m%d_%H%M%S).sql.gz
第一条指令就是备份,第二条指令就行压缩
注意:
把 username 替换为实际的用户名;
把 password 替换为实际的密码;
把 DatabaseName 替换为实际的数据库名;
3.4添加可执行权限:
chmod u+x bkDatabaseName.sh
添加可执行权限之后先执行一下,看看脚本有没有错误,能不能正常使用;
./bkDatabaseName.sh
四、添加定时任务
4.1 crontab
定时任务用的是crontab
安装要去找教程,我用的是阿里云服务,似乎自带的,学校的服务器好像也是自带了。
4.2 crontab -e
执行crontab -e后 可能有两种情况
第一种可能是初次使用,然后让你选择一种方式,他会有提示哪一种最简单,选那个就好
然后输入
第二种进去之后和vim进去的文件一样 就直接写就好
例子:每天的凌晨1点运行一次
00 01 * * * /home/backup/bkDatabaseName.sh
这个是他具体的命令格式,参考下图
4.2 crontab -l
可以看到安排了的定时任务
五、感悟
一定要养成备份的习惯,例如数模比赛提交了md5码之后,那个文件要在多台电脑,多个设备备份。
重要的文件,写的时候提前设置好自动备份和路径,我设置的word是1分钟备份一次。
然后在网盘,U盘,邮箱备份。
还有一点就是,以后都尽量不要通过直接操作mysql来实现业务,这样测试不到位很容易就误操作,这样麻烦事一堆,十分难顶。效率十分低下!