做数据库都喜欢数据,但是数据备份是保存数据的方法,下面分享下我的备份文件
备份分为增量备份(即二进制备份bin日志)和全量备份,对于生产数据库是都要启动的但是我建议测试数据库也要使用相同的备份要求。
增量备份:
开启增量备份在my.cnf(我的my.cnf文件在/etc下linux环境下,可以使用find / -name my.cnf查找)加入log-bin=mysql-bin即可,生成的日志名就是mysql-bin.*(linux下的位置也可以用find / -name mysql-bin*查找).
全量备份:
使用mysqldump,命令是mysqldump -u***** -p******** 数据库名 | gzip > /备份数据库的文件夹/数据库名(可以是任意的,但是最好是与要备份的数据库同名)`date +%Y-%m-%d_%H%M%S`.sql.gz,这样就可以将备份的数据库生成压缩文件,如果不需要压缩文件只需要mysqldump -u***** -p******** 数据库名 > 数据库名.sql
下面是我用于备份的文件
#!/bin/sh
echo "---Today is--$(date +"%Y-%m-%d %H:%M:%S")-----start backup---" >> /mysqlbackup/mysqldb_backup.log
mysqldump -u***** -p******** ***** | gzip > /mysqlbackup/******`date +%Y-%m-%d_%H%M%S`.sql.gz
insert_sql1="insert into c_userinfo_his (create_time,update_time,appid,openid,nickname,sex,province,city,country,headimgurl,unionid,shark_no,log1) select create_time,update_time,appid,openid,nickname,sex,province,city,country,headimgurl,unionid,shark_no,log1 from c_userinfo"
delete_sql1="truncate table c_userinfo"
call_xprocedure="call insert_xtotal()"
exit_sql="exit"
mysql -u***** -p******** ***** -e "${insert_sql1}"
mysql -u***** -p******** ***** -e "${delete_sql1}"
#mysql -u***** -p******** ***** -e "${call_xprocedure}"
mysql -u***** -p******** ***** -e "${exit_sql}"
cd /mysqlbackup
echo $(date +"%Y-%m-%d_%H:%M:%S") >> /mysqlbackup/mysqldb_backup.log
echo "---today is--$(date +"%Y-%m-%d %H:%M:%S")---backup success-----" >> /mysqlbackup/mysqldb_backup.log
由于业务需要所以每天要删除有些表并且将数据放到历史表里,call insert_xtotal()这个是mysql的存储过程。
之后将这个这个脚本放到任务管理器中(在linux中命令crontab -e),进入编辑输入
00 01 * * * source /etc/profile && /mysqlbackup/backup.sh >> /mysqlbackup/mysqldb_backup.log 2>&1
* * * * *
分 时 日 月 周
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
我是每晚1点备份
source /etc/profile是引用环境变量,防止定时任务无效(很重要)
mysqlbackup/backup.sh表示我的脚本名是backup.sh并且在mysqlbackup文件夹下,mysqldb_backup.log是备份的日志名。
下一篇是怎样恢复数据利用增量备份和全量备份