免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5356 | 回复: 14
打印 上一主题 下一主题

数据库备份脚本共享 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-26 15:21 |只看该作者 |倒序浏览
测试能正常运行,并寻求异常处理方案。如在备份过程中出现异常如何处理。

  1. #!/bin/bash
  2. #定义数据库连接字段
  3. db_user="root"
  4. db_passwd="**********"
  5. db_host="localhost"

  6. #定义备份目录,备份时间及用到的命令
  7. backup_dir="/vhost/backup"
  8. date=`date +%Y-%m-%d`
  9. #date=`date -d yesterday +%Y%m%d|cut -c3-8`

  10. #删除旧的备份数据
  11. find $backup_dir/mysql_* -name "*.gz" -type f -ctime +7 -exec rm {} \;

  12. #检测备份目录是否存在,不存在则建立目录
  13. test ! -d "$backup_dir/mysql_$date" && mkdir "$backup_dir/mysql_$date/"

  14. #列出所有数据库
  15. all_db="$(mysql -u $db_user -h $db_host -p$db_passwd -Bse 'show databases')"

  16. #循环备份数据库
  17. for db in $all_db
  18. do
  19.         $mysqldump -u $db_user -h $db_host -p$db_passwd  $db > $backup_dir/mysql_$date/$db.sql
  20.         $TAR -czf $backup_dir/mysql_$date/$db.tgz $backup_dir/mysql_$date/$db.sql
  21.         rm -f $backup_dir/mysql_$date/$db.sql
  22. done
复制代码

论坛徽章:
0
2 [报告]
发表于 2008-11-26 15:29 |只看该作者
缺了--opt这个参数啊。

论坛徽章:
0
3 [报告]
发表于 2008-11-26 15:34 |只看该作者
这个开关默认应该是启用的吧

不知道大家在备份的时候是否会出错,比如某个表不完整抑或损坏了。这个要怎么处理?还是将这个程序输出记录后续再比对?

[ 本帖最后由 智勇双全 于 2008-11-26 15:50 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2008-11-26 16:04 |只看该作者
db_passwd=
这种选项我一般都改成:密码放在一个属性为400别人够不到的文件里,比如/root/password/1.password
然后
db_passwd=`cat /root/password/1.password`

另外老兄有没有用binlog日志恢复数据的经验呢?
我保存了很多binlog日志,但是恢复的过程中经常出现类似
ERROR 1062 (23000) at line 33: Duplicate entry 'XXX' for key 1
的问题,我不太明白为何总会这样。

论坛徽章:
0
5 [报告]
发表于 2008-11-26 16:12 |只看该作者
原帖由 iamshiyu 于 2008-11-26 16:04 发表
db_passwd=
这种选项我一般都改成:密码放在一个属性为400别人够不到的文件里,比如/root/password/1.password
然后
db_passwd=`cat /root/password/1.password`

另外老兄有没有用binlog日志恢复数据的经 ...


binlog是保存所有(除了replication之外,当然也可以保存replication对数据库的更改)对数据库的所有更改,如果在恢复之后,直接运行mysqlbinlog ... | mysql会出问题的,因为你某些数据相当于插入了两次,对于unique key 和primary key,当然会出现duplicate这样的情况了。解决的问题嘛,嘿嘿,不同的情况有不同的说法的,自己琢磨琢磨吧~

论坛徽章:
0
6 [报告]
发表于 2008-11-26 16:40 |只看该作者
原帖由 iamshiyu 于 2008-11-26 16:04 发表
db_passwd=
这种选项我一般都改成:密码放在一个属性为400别人够不到的文件里,比如/root/password/1.password
然后
db_passwd=`cat /root/password/1.password`

另外老兄有没有用binlog日志恢复数据的经 ...



嗯 密码问题后续改进。

不好意思,binlog日志恢复还没尝试过!

论坛徽章:
0
7 [报告]
发表于 2008-11-26 16:44 |只看该作者
mysqldump: Got error: 1044: Access denied for user 'root'@'localhost' to database 'information_schema' when using LOCK TABLES
mysqldump: Got error: 145: Table './ibluexporg/cdb_posts' is marked as crashed and should be repaired when using LOCK TABLES
mysqldump: Got error: 1146: Table 'sik3.ptj_member' doesn't exist when using LOCK TABLES

比如我尝试一次备份的时候出现上面的典型错误。是否可以在备份之前先check一下呢?还是记录错误事后修复?还是有另外的处理办法?

论坛徽章:
8
综合交流区版块每周发帖之星
日期:2015-12-02 15:03:53数据库技术版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-09-14 06:20:00金牛座
日期:2014-10-10 11:23:34CU十二周年纪念徽章
日期:2013-10-24 15:41:34酉鸡
日期:2013-10-19 10:17:1315-16赛季CBA联赛之北京
日期:2017-03-06 15:12:44
8 [报告]
发表于 2008-11-27 11:29 |只看该作者
修复错误之类的还是在dba的监控下完成吧

论坛徽章:
8
综合交流区版块每周发帖之星
日期:2015-12-02 15:03:53数据库技术版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-09-14 06:20:00金牛座
日期:2014-10-10 11:23:34CU十二周年纪念徽章
日期:2013-10-24 15:41:34酉鸡
日期:2013-10-19 10:17:1315-16赛季CBA联赛之北京
日期:2017-03-06 15:12:44
9 [报告]
发表于 2008-11-27 11:31 |只看该作者
原帖由 iamshiyu 于 2008-11-26 16:04 发表
db_passwd=
这种选项我一般都改成:密码放在一个属性为400别人够不到的文件里,比如/root/password/1.password
然后
db_passwd=`cat /root/password/1.password`

另外老兄有没有用binlog日志恢复数据的经 ...



学习下你和LZ的备份优点

论坛徽章:
0
10 [报告]
发表于 2008-11-27 14:24 |只看该作者
原帖由 智勇双全 于 2008-11-26 15:21 发表
测试能正常运行,并寻求异常处理方案。如在备份过程中出现异常如何处理。

#!/bin/bash
#定义数据库连接字段
db_user="root"
db_passwd="**********"
db_host="localhost"

#定义备份目录,备份时间及用 ...
  1. #!/bin/bash
  2. #定义数据库连接字段
  3. db_user="root"
  4. db_passwd="*********"
  5. db_host="localhost"

  6. #定义备份目录,备份时间及用到的命令
  7. backup_dir="/vhost/backup"
  8. date=`date +%Y-%m-%d`
  9. del_date=`date +%Y\-%m\-%d -d'-7 day'`   #该命令是GUN date,可在RedHat系统下使用
  10. #date=`date -d yesterday +%Y%m%d|cut -c3-8`
  11. GZIP='/bin/gzip'
  12. TAR='/bin/tar'
  13. #mysqldump='mysqldump'
  14. mysqldump="$(which mysqldump)"
  15. myisamchk="/usr/local/mysql/bin/myisamchk"
  16. #删除旧的备份数据
  17. #find $backup_dir/mysql_* -name "*.gz" -type f -ctime +7 -exec rm {} \;
  18. rm -fr $backup_dir/mysql_$del_date
  19. #检测备份目录是否存在,不存在则建立目录
  20. test ! -d "$backup_dir/mysql_$date" && mkdir "$backup_dir/mysql_$date/"

  21. #列出所有数据库
  22. all_db="$(mysql -u $db_user -h $db_host -p$db_passwd -Bse 'show databases')"
  23. #all_db=`cat list.txt`
  24. #循环备份数据库
  25. for db in $all_db
  26. do
  27. #         $imysqldump -u $db_user -h $db_host -p$db_passwd  $db | $GZIP -9 > "$backup_dir/mysql_$date/$db.gz"  
  28.     $myisamchk -s /usr/local/mysql/var/$db/*.MYI
  29.        $mysqldump -u $db_user -h $db_host -p$db_passwd  $db > $backup_dir/mysql_$date/$db.sql
  30.   if [ $? == 0 ];
  31.        then
  32.          $TAR -czf $backup_dir/mysql_$date/$db.tgz $backup_dir/mysql_$date/$db.sql
  33.         rm -f $backup_dir/mysql_$date/$db.sql
  34.        else
  35.              $TAR -czf $backup_dir/mysql_$date/$db.tgz /usr/local/mysql/var/$db
  36.             rm -f $backup_dir/mysql_$date/$db.sql
  37.   fi   
  38. done
复制代码


加入检查表,如果dump有误就直接备份数据文件。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP