免费注册 查看新帖 |

Chinaunix

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

怎么样备份这个数据库 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-19 11:11 |只看该作者 |倒序浏览
5可用积分
有两个数据库分别是INFO和CLASS数据库INFO下面有这么几个表INFO.user、INFO.admin、INFO.data、INFO.tmp和CLASS下面有CLASS.teacher、CLASS.student、CLASS.number、CLASS.conter要求每天备份这两个数据库备份到、/root/backup/db/    相同数据库中内容要备份到相同文件夹下,同一个表的内容要追加的备份到这个表下。其中CLASS.student这个表只备份最近两天的内容可以使用两个shell完成

论坛徽章:
0
2 [报告]
发表于 2009-04-19 12:19 |只看该作者
#!/bin/bash

function sqlbak
{
mysqldump  --add-drop-table -c --default-character-set=gbk --allow-keywords --force --password=**** --user=root $1 $2 \
|bzip2 -9 >$3/`date  +%G%m%d`_$1_$2.sql.bz2
}

sqlbak INFO user /root/backup/db/
sqlbak INFO admin /root/backup/db/
sqlbak INFO data /root/backup/db/
sqlbak INFO tmp /root/backup/db/
sqlbak CLASS teacher /root/backup/db/
sqlbak CLASS student /root/backup/db/
sqlbak CLASS number /root/backup/db/
sqlbak CLASS conter /root/backup/db/

论坛徽章:
1
丑牛
日期:2014-05-22 15:38:58
3 [报告]
发表于 2009-04-19 14:26 |只看该作者
弄个简单的shell就可以了

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
4 [报告]
发表于 2009-04-20 09:24 |只看该作者
看似简单,其实还是不那么简单,有点繁锁的。

同一个表的内容要追加的备份到这个表下

论坛徽章:
0
5 [报告]
发表于 2009-04-20 11:12 |只看该作者

回复 #2 刘世伟 的帖子

楼主的方法不能实现这个呀!其中CLASS.student这个表只备份最近两天的内容,还有同一个表的内容要追加的备份到这个表下

论坛徽章:
0
6 [报告]
发表于 2009-04-20 22:24 |只看该作者
原帖由 misos 于 2009-4-20 11:12 发表
楼主的方法不能实现这个呀!其中CLASS.student这个表只备份最近两天的内容,还有同一个表的内容要追加的备份到这个表下


time=`date "+%H:%I:%S"`
mysqlbinlog --start-datetime="`date +%Y-%m-%d -d -2day` $time" \
  --stop-datetime="`date +%Y-%m-%d` $time" /var/mysql/mysql-bin.*  \
|grep \`student\` \
|bzip2 >/home/bak/student_`date +%Y-%m-%d`.sql.bz2

[ 本帖最后由 刘世伟 于 2009-4-20 22:38 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2009-04-21 13:17 |只看该作者
搞不明白这种追加备份有啥用,万一里面某个备份包坏了,备份就统统没用了。
这些操作都在二进制日志里,如果没到看二进制日志的水平,就搞个主从复制,连这个都不行的话,就老老实实备份整个表吧

论坛徽章:
0
8 [报告]
发表于 2009-04-21 14:56 |只看该作者

回复 #6 刘世伟 的帖子

从binlog得到的sql语句如果是多行的话,“grep \`student\` \” 就不行。
如果是多行的话,估计得用awk取出这些语句。

另外,mysqldump 用管道输出给gzip,会增加dump的时间,对业务可能产生影响。我觉得mysqldump完了再gzip会好。

[ 本帖最后由 wlong2000joint 于 2009-4-21 14:59 编辑 ]

评分

参与人数 1可用积分 +2 收起 理由
枫影谁用了 + 2 精品文章

查看全部评分

论坛徽章:
0
9 [报告]
发表于 2009-04-24 12:39 |只看该作者
如果能够知道student的字段结构,就简单多了。

mysql -u root -p**** -e "select concat ('insert into student set \`field1\`=\'',\`field1\`,",`field1`=\"',\`field2\`,'\`date\`=\"',\`date\`,'\';\n') where \`date\`>`date +%Y%m%d` " >>/home/sqlbak_day.sql

论坛徽章:
0
10 [报告]
发表于 2009-04-25 22:00 |只看该作者
楼上正解,不过,我觉的最用用replace 去替换那个insert.

mysql -u root -p**** -e "select concat ('replace into student set \`field1\`=\'',\`field1\`,",`field1`=\"',\`field2\`,'\`date\`=\"',\`date\`,'\';\n') where \`date\`>`date +%Y%m%d` " >>/home/sqlbak_day.sql
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP