MySQL之定时备份及还原
最近update 自动化测试数据库的某个表的数据(一些修改其他数据库的SQL)时,发现where条件还漏了一些(400+条SQL就这样被误操作了)。。。而且之前没有对自动化测试的数据库进行备份。。。。
简单记录下这次的备份操作。。
要备份的数据库部署在Linux上:
1.切换到安装MySQL(不记得的话,可以用whereis mysql查找)的bin目录:
2.使用bin目录下的mysqldump工具进行数据库备份:
1)备份表和数据:
./mysqldump -h数据库所在ip -uroot -p密码 -P3306 库名 >/root/Desktop/MySQLbackup/backdata.sql
2)备份存储过程和函数:
./mysqldump -h数据库所在ip -uroot -p密码 -P3306 -R -ndt --triggers=false 库名>/root/Desktop/MySQLbackup/backprocedure.sql
注:
1)还原存储过程时,会报错
故备份存储过程时,加上--triggers=false
还原备份的数据(以Windows为例):
1.同样切换到安装MySQL的bin目录下:
cd C:\Program Files\MySQL\MySQL Server 5.7\bin
2.还原数据(还原表、数据及存储过程的命令一样,只需修改要备份好的SQL文件)
mysql 库名 --default-character-set=utf8 -u 账号 -p密码<G:\备份SQL路径\backdata.sql
注:
1)因为还原时报错
,所以加了--default-character-set=utf8
添加定时任务:
# 备份前把前一天备份的数据移到另一个目录 30 17 * * * mkdir /root/Desktop/MySQLbackup1;mv /root/Desktop/MySQLbackup/*.sql /root/Desktop/MySQLbackup1 # 备份数据 20 18 * * * /usr/java/mysql/bin/mysqldump -h要备份数据ip -uroot -p数据库密码. 要备份的库 > /root/Desktop/MySQLbackup/backdata$(date +"\%Y\%m\%d").sql # 备份存储过程 20 18 * * * /usr/java/mysql/bin/mysqldump -h要备份数据ip -uroot -p数据库密码. -R -ndt --triggers=false 要备份的库> /root/Desktop/MySQLbackup/backpro$(date +"\%Y\%m\%d").sql # 检查当天是否备份成功,并删除前一天数据的脚本 30 19 * * * /root/delLastBacSQL.sh
# delLastBacSQL.sh的具体内容: backdata=/root/Desktop/MySQLbackup/backdata$(date +"%Y%m%d").sql backpro=/root/Desktop/MySQLbackup/backpro$(date +"%Y%m%d").sql if [[ -e $backdata && -e $backpro ]] then `rm -rf /root/Desktop/MySQLbackup1` echo success else echo fail fi
参考资料:
https://www.2cto.com/database/201211/168571.html
https://www.jianshu.com/p/984e876706b1