到底问题在那边?PostgreSQL自动备份! crontab对用户权限有什么限制吗?还是哪边出了什么问题?真想有人能交流一下! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 看看你的/home/backup.sh权限是多少? 直接用root执行pg_dump -U postgres dbname > /database/backup/"当天日期"+dbname.dump会得到什么呢? 1."/home/backup.sh"的权限:“用户”、“组”、“其他”都可以“读取”、“写入”、“执行”2.直接用root执行:pg_dump -U postgres dbname > /database/backup/"当天日期"+dbname.dump当然是备份数据库了!生成一个"当天日期"+dbname.dump的源文件,以后用psql命令恢复!我的问题:直接执行./backup.sh,可以备份成功。在cron执行./backup.sh 每天只生成了一个0B大小的空文件,真是头疼啊! 你是把定时进程加入到postgres的cron中的吧,问题应该在于一个环境变量问题,你如果直接在命令行下执行,该用户登陆时已经加载了环境变量了的。如果在cron进程中,要执行某个命令,要把这个命令的目录也写清楚,比如你的可以改为(比如你的psql装在/usr/local/pgsql/下):#!/bin/sh/usr/local/pgsql/bin/pg_dump -U postgres dbname > /database/backup/"当天日期"+dbname.dump这样应该可以正常执行的,或者把你的命令加入的root的cron中,命令改为:#!/bin/shsu - postgres -c 'pg_dump -U postgres dbname > /database/backup/"当天日期"+dbname.dump'这样由root su到postgres时会自动加载该用户的环境变量 多谢楼上!如你所说到postgres的cron中执行:#!/bin/bash/usr/local/pgsql/bin/pg_dump -U postgres dbname > /database/backup/"当天日期"+dbname.dump备份成功!但是你说的第二中方法到root的cron中#!/bin/bashsu - postgres -c 'pg_dump -U postgres dbname > /database/backup/"当天日期"+dbname.dump'就不能定时备份了!而且不能直接执行此命令! 可以执行的,我都试过的,要么就是你shell写的有问题,手工执行比如:su - postgres -c 'pg_dump -U postgres dbname > /database/backup/050426dbname.dump'就可以执行,也可能你根本没把/usr/local/pgsql/bin目录加入的profile中的PATH环境变量中,那当然也会找不到pg_dump这个命令了,还需要你把目录的命令也写出来。 当然手工执行是要在root提示符下 感谢trampwind(随风) ,我习惯把/usr/local/pgsql/bin下的文件复制到/sbin目录下,所以也无所谓设置profile中的PATH环境变量了吧!我确实是不能执行此命令,总是会报错:-bash: line 1: /database/data/050426dbname.dump:Permission denied有点头疼! 看样子象是postgres用户没有在/database/data/目录下写文件的权限,可以用root: chown postgres /database/data/把这个目录赋权,如果该目录下有root创建的050426dbname.dump这个名称的文件,那么postgres也是无权覆盖的,先用root把该文件删除,我随便写了个测试脚本BACKUP.SH:#!/bin/shrq=` date +%m%d `su - postgres -c 'pg_dump -U postgres mydb>/home/postgres/jh/dbname$rq.dump'执行这个脚本没问题的。 还是有点问题!不过还是非常感谢 trampwind 如何提高数据库存在更新、不存在插入的效率?? MySQL PostgreSQL 有集成操作系统身份验证不? 求SQL~~~~~ 列多会影响查询速度吗? 求高手帮下小弟! mysql4.0不支持存储过程及其视图?? 如何把数据库中的内容批量替换? 不知道Mysql是不是支持Sql的嵌套查询! linux下安装mysql找不到mysql.h update语句执行结果请教!!!急 MySQL中文问题 mysql连接时出现的问题
pg_dump -U postgres dbname > /database/backup/"当天日期"+dbname.dump
会得到什么呢?
“用户”、“组”、“其他”都可以“读取”、“写入”、“执行”2.直接用root执行:
pg_dump -U postgres dbname > /database/backup/"当天日期"+dbname.dump
当然是备份数据库了!生成一个"当天日期"+dbname.dump的源文件,以后用psql命令恢复!我的问题:
直接执行./backup.sh,可以备份成功。
在cron执行./backup.sh 每天只生成了一个0B大小的空文件,真是头疼啊!
#!/bin/sh
/usr/local/pgsql/bin/pg_dump -U postgres dbname > /database/backup/"当天日期"+dbname.dump
这样应该可以正常执行的,或者把你的命令加入的root的cron中,命令改为:
#!/bin/sh
su - postgres -c 'pg_dump -U postgres dbname > /database/backup/"当天日期"+dbname.dump'这样由root su到postgres时会自动加载该用户的环境变量
如你所说到postgres的cron中执行:
#!/bin/bash
/usr/local/pgsql/bin/pg_dump -U postgres dbname > /database/backup/"当天日期"+dbname.dump
备份成功!但是你说的第二中方法到root的cron中
#!/bin/bash
su - postgres -c 'pg_dump -U postgres dbname > /database/backup/"当天日期"+dbname.dump'
就不能定时备份了!而且不能直接执行此命令!
su - postgres -c 'pg_dump -U postgres dbname > /database/backup/050426dbname.dump'
就可以执行,也可能你根本没把/usr/local/pgsql/bin目录加入的profile中的PATH环境变量中,那当然也会找不到pg_dump这个命令了,还需要你把目录的命令也写出来。
我习惯把/usr/local/pgsql/bin下的文件复制到/sbin目录下,
所以也无所谓设置profile中的PATH环境变量了吧!
我确实是不能执行此命令,总是会报错:
-bash: line 1: /database/data/050426dbname.dump:Permission denied
有点头疼!
chown postgres /database/data/把这个目录赋权,如果该目录下有root创建的050426dbname.dump这个名称的文件,那么postgres也是无权覆盖的,先用root把该文件删除,我随便写了个测试脚本BACKUP.SH:
#!/bin/sh
rq=` date +%m%d `
su - postgres -c 'pg_dump -U postgres mydb>/home/postgres/jh/dbname$rq.dump'
执行这个脚本没问题的。
不过还是非常感谢 trampwind