这个脚本,在 su - postgres用户下,无法输出日志,却可以正常备份数据库。
而在root用户下,可以输出日志,但是却不能正常备份数据库。
现在我只想解决,如何在su - postgres可以正常输出日志,请问有谁能帮我优化一下脚本,
或者告诉我具体的操作方法,使用这个脚本,如何才能正确的输出日志,又可以备份数据库,谢谢。
#!/bin/bash
# Configuration(现在目标文件夹创建好pgsql和log文件夹给与权限)
BACKUP_DIR="/mnt/pgbak"
DB_USER="postgres"
DB_NAME="davinci"
LOG_FILE="/mnt/1.log"
# Error handling
set -e
if [ ! -d "$BACKUP_DIR" ]; then
echo "Error: Backup directory $BACKUP_DIR does not exist."
exit 1
fi
# Redirect output to log file
exec >> "$LOG_FILE" 2>&1
# Generate filename
NOW=$(date +"%Y-%m-%d_%H:%M:%S")
FILE="$BACKUP_DIR/$NOW.sql.gz"
# Backup database
pg_dump -U $DB_USER -d $DB_NAME |gzip > "$FILE"
# Set file permissions
chmod 600 "$FILE"
# Delete backups older than 7 days
find $BACKUP_DIR -type f -mtime +7 -exec rm {} \;
给你一个新脚本 其实只需要使用chmod 755 给文件权限再将备份的日志输出到一个文件就可
#!/bin/bash
start1(){
cat <<EOF
1.PGPASSWORD=${} pg_dump -h 10.0.0.134 -U postgres -p 5432 -d zabbix | gzip > /opt/zabbix20210108.sql.gz
EOF
}
start2() {
#PGHOME=/workspace/postgresql # PostgreSQL安装目录
PGHOST=10.0.0.190 # Host
PGPORT=5432 # 监听端口
PGUSER=postgres # 用户
passwd_pg=12123321 # 密码
dbname="zabbix postgres" # 数据库
TIME_NAME=`date +%F%H%M` #时间
pg_dir="/home/gegewu/pgbak/" #数据备份目录
pgbak_file="/home/gegewu/pgbak/pgbak.log"
#localhost_passwd="123456"
echo "开始备份数据库"
if [ ! -d ${pg_dir} ];then
mkdir -p ${pg_dir}
chmod 777 ${pg_dir} # echo ${localhost_passwd} |sudo -S
else
echo "目录已存在"
fi
[ -f "${pgbak_file}" ] || touch ${pgbak_file}
chmod 777 ${pgbak_file} # echo ${localhost_passwd} |sudo -S
for zznn in ${dbname};do
PGPASSWORD="${passwd_pg}" pg_dump -h ${PGHOST} -U ${PGUSER} -p ${PGPORT} -d ${zznn} | gzip > ${pg_dir}${zznn}_${TIME_NAME}.sql.gz
echo "执行脚本$0时间:${TIME_NAME}" >> ${pgbak_file} 2>&1
#PGPASSWORD=123456 psql -h 10.0.0.190 -p 5432 -d zabbix -U postgres < mydb-20211203142616.bak
done
}
start3() {
echo "删除旧备份 开始执行"
find ${pg_dir} -type f -mtime +5 |xargs rm -f
}
main() {
start1
start2
start3
}
main
在su - postgres用户下无法输出日志的问题可能是由于权限不足导致的。你可以尝试使用以下方法解决这个问题:
确保log文件夹对postgres用户有写入权限:
执行以下命令来更改文件夹的所有者和权限:
chown postgres:postgres /mnt/log
chmod 755 /mnt/log
修改脚本,显式指定日志文件的路径,并设置其权限:
将LOG_FILE="/mnt/1.log"修改为LOG_FILE="/mnt/log/1.log",然后执行以下命令:
touch /mnt/log/1.log
chown postgres:postgres /mnt/log/1.log
chmod 644 /mnt/log/1.log
在脚本中切换到postgres用户并执行备份操作:
在备份数据库之前,添加以下代码切换到postgres用户:
su - postgres -c "
pg_dump -U $DB_USER -d $DB_NAME | gzip > "$FILE"
"
确保postgres用户对数据库具有足够的权限:
可以通过在pg_hba.conf配置文件中更改访问权限来确认。确保在该文件中允许postgres用户使用trust认证方式或者其他适当的认证方式访问数据库。
请注意,在以上步骤完成之后,使用su - postgres用户执行脚本时,日志应该能够正确输出,并且数据库备份也能正常进行。