在工作中,生产环境数据库备份的重要性和必要性是必不可少的。备份可以确保数据库的安全性和业务连续性,有助于预防减少因硬件故障、人为错误或恶意攻击等原因导致的意外数据丢失的风险。
那么今天,本文主要介绍
一、MySQL 数据库异地备份脚本
该脚本主要是用于在
使用
使用
使用
使用
使用
#!/bin/bash # Database info DB_USER="root" # 数据库备份用户 DB_PASS="1Q!2W@3E#" # 备份用户密码 DB_HOST="192.168.1.100" # 数据库 IP DBBACK_IP="192.168.1.200" # 远程备份服务器 IP BCK_DIR="/bigdata/mysql" # 本地备份路径 DBBACK_PATH=/bigdata/mysqlbackup # 远程备份路径 DATE=`date +%F` # 获取当前时间 yestoday=$(date -d '-7 day' +%Y-%m-%d) # 取 7 天前的时间,格式为:2023-12-30,用于删除备份文件取文件时间,该参数可自行调整 #BACK_NAME="db_$var.sql" #TB_NAME=("" "" "" "" "") # 需要备份的表名 #create file mkdir -p $BCK_DIR/$DATE # 创建本地备份日期目录 echo "开始本地备份中..." /usr/local/mysql/bin/mysqldump -u$DB_USER -p$DB_PASS -h$DB_HOST --all-databases > $BCK_DIR/$DATE/mysql_backup_$DATE.sql cd $BCK_DIR/$DATE && tar -zcvf mysql_backup_$DATE.sql.tar.gz mysql_backup_$DATE.sql >>/$BCK_DIR/$DATE/$DATE.log && rm -fr mysql_backup_$DATE.sql echo "$DATE db bakcup success!" >>/$BCK_DIR/$DATE/$DATE.log echo "开始删除 7 天前的数据库备份文件..." rm -rf $BCK_DIR/$yestoday echo "7 天前的数据库备份文件删除完毕!" echo "开始远程备份中..." scp -r $BCK_DIR/$DATE/mysql_backup_$DATE.sql.tar.gz root@$DBBACK_IP:$DBBACK_PATH echo "远程备份完毕!"
需要注意的是:远程备份需要做免密,在
ssh-keygen cd ~/.ssh/ scp id_rsa.pub 目标主机IP:~/.ssh/authorized_keys
利用
find / -name mysqldump
给
chmod +x mysql_backup.sh crontab -e # MySQL 数据库备份 0 3 * * 6 root sh /bigdata/mysql_backup.sh >> /bigdata/mysql_backup.log 2>&1 &
二、MySQL 数据库的恢复
首先确保已安装好
可使用以下语法命令从
mysql -u [用户名] -p [密码] [数据库名] < [备份文件名.sql]
三、Oracle 数据库异地备份脚本
该脚本用来自动备份
脚本会检查本地备份目录路径是否存在,如果不存在则创建定义的目录。然后,使用
通过
对当前备份文件进行压缩,并通过
#!/bin/bash echo "开始执行 Oracle 数据库备份..." echo "backup ing -------------------" echo "时间:" nowtime oraclelog=/opt/originbackup/oraclebackup.log # Oracle 日志查看位置 current_date=`date +%Y-%m-%d` # 当前执行日期时间 nowtime=$(date +%F+%T) # 显示当前时间,用于记录脚本运行开始时间 seven_day_date=`date -d -7day '+%Y-%m-%d'` # 保留一星期前 dmp 文件时间 fourteen_day_date=`date -d -14day '+%Y-%m-%d'` # 保留两星期前 dmp 文件时间 ### 需修改参数部分 ### dmpDir=/data/originbackup # 本地备份路径 destination=/opt/backup/ # 远端备份路径 localhost_ip=192.168.1.111 # Oracle 本机 IP backup_ip=192.168.1.110 # 远端备份服务器 IP oracle_user=oracle_db # Oracle 用户名 oracle_password=4r$5t%6y^ # Oracle 密码 [email protected],[email protected] # 告警邮箱 source /home/oracle/.bash_profile ### 判断是否有目录,没有则创建目录 ### echo "---${current_date}--start dmp all-----" if [ ! -d ${dmpDir} ];then echo "${dmpDir} is not exists,try to create" mkdir -p ${dmpDir} fi ### 开始本地备份(exp 为 oracle 备份工具) ### exp $oracle_user/$oracle_password@$localhost_ip:1521/orcl file=$dmpDir/$current_date.dmp full=y > /dev/null 2>&1 #touch $dmpDir/$current_date.dmp > /dev/null 2>&1 ### 连接远端备份 IP 判断是否有目录 ### if [ $? -eq 0 ] then ssh $backup_ip ls $destination > /dev/null 2>&1 if [ $? -eq 0 ] then echo "$destination exist mkdir" else ssh $backup_ip mkdir -p $destination echo "$destination mkdir success" fi ### 本地删除备份文件,保留两个星期前的 ### ssh $backup_ip ls $destination >> /tmp/linshi while read myline do if [ ${myline} == ${seven_day_date}.dmp.gz -o ${myline} == ${fourteen_day_date}.dmp.gz ];then echo "$myline.dmp persist success" else rm -rf `ls ${dmpDir}/*|grep -v ${current_date}|grep -v ${seven_day_date}| grep -v ${fourteen_day_date}` ssh $backup_ip rm -rf `ls ${destination}/*| grep -v ${seven_day_date}| grep -v ${fourteen_day_date}` > /dev/null 2>&1 # ssh $backup_ip rm -rf `ls $destination/*| egrep -v '(${a}|${b})'` if [ $? -eq 0 ] then echo "Two weeks ago file delete success" else echo "Two weeks ago file delete fail" echo $current_date | mail -s "$current_date oracle.dmp file delete faile" $mail # 保留两星期前数据,其他 dmp 文件删除失败 fi fi done < /tmp/linshi rm -rf /tmp/linshi else echo "$current_date 文件备份失败" echo $current_date | mail -s "$current_date file backup fail $localhost_ip" $mail # 文件备份失败 echo -e "-----end dmp all----------------- " exit -1 # 终止后面的所有脚本执行 fi ### 本地压缩,将压缩文件传到远端 IP ### if [ -f $dmpDir/$current_date.dmp ] then gzip -q -r $dmpDir/$current_date.dmp $dmpDir echo "compress success" scp -r $dmpDir/$current_date.dmp.gz root@$backup_ip:$destination > /dev/null 2>&1 if [ $? -eq 0 ] then echo "backup_file transfer success" else echo "backup_file transfer fail" echo $current_date | mail -s "$current_date oracle_dmp_file transfer fail $localhost_ip" $mail # dmp 文件传递失败 fi else echo "backup_file not found" if [ $? -eq 0 ] then #echo "backup_file found fail" echo $current_date | mail -s "$current_date oracle_dmp_file not found $localhost_ip" $mail # dmp 文件未发现 fi fi echo -e "-----end dmp all----------------- "
同样,异地备份免密是必不可少的一步,参考上述
给
chmod +x oracle_backup.sh crontab -e # Oracle 数据库备份 0 3 * * 6 root sh /opt/oracle_backup.sh >> /opt/oraclebackup.log
四、Oracle 数据库的恢复
前提是
然后,创建目录
mkdir -p /opt/oracle/oraclebak cp oracle_db.dmp /opt/oracle/oraclebak
授予
chown oracle:dba /opt/oracle/oraclebak
在数据库中创建备份目录,以便数据库可以访问备份文件。
create or replace directory oracle_exp as '/opt/oracle/oraclebak';
授予
grant read, write on directory oracle_exp to oracle_db;
最后,使用以下命令在数据库服务器上切换到
su - oracle impdp oracle_db/oracle_db@orcl SCHEMAS=oracle_db DUMPFILE=oracle_exp:oracle_db.dmp LOGFILE=oracle_exp:oracle_db.log
-
oracle_exp :备份路径定义的目录别名 -
oracle_db/oracle_db@orcl :本地数据库恢复的用户名、密码和数据库 SID -
SCHEMAS :指定要导入的表空间 -
DUMPFILE :指定数据库恢复文件 -
LOGFILE :指定数据库恢复日志
五、PostgreSQL 数据库异地备份脚本
该脚本是备份
定义了本机 IP 地址、远端备份服务器 IP、PostgreSQL 数据库的端口号、数据库用户名和密码,分别赋给了
指定了本地备份目录和远端备份目录,分别赋给了
使用
最后,输出备份和传输的相关信息,并结束脚本的执行。
#!/bin/bash #Description:备份 PostgreSQL 数据库必能压缩成 gz 文件,最后删除 3 天前的备份文件。 echo "开始执行 PostgreSQL 数据库的备份..." echo "backup ing..." today=$(date +%Y-%m-%d) # 今天的日期 nowtime=$(date +%F+%T) # 当前时间点 yestoday=$(date -d '-7 day' +%Y-%m-%d) # 7天前的日期 host_ip=127.0.0.1 # 本机 IP 地址 backup_ip=192.168.1.111 # 远端备份服务器 IP port_id=5432 # 端口号,PostgreSQL默认的端口号是5432 username=postgres # 数据库用户 export PGPASSWORD=7u&8i*9o( # 数据库密码 dmpDir=/opt/pgbak # 本地备份目录 destination=/bigdata/pg_backup # 远端备份目录 echo "时间:" $nowtime set timeout 600 #/monchickey/bin/ 为 pg_dump 备份工具安装路径,根据实际情况更新此路径。 /monchickey/bin/pg_dumpall --file ""$dmpDir"/pg_backup_"$today".sql" --host "$host_ip" --port "$port_id" --username "$username" #--verbose --role "postgres" --format=c --blobs --encoding "UTF8" 备份转换扩展配置 echo "PostgreSQL 数据库备份完成!" echo "当天备份文件压缩中..." gzip "$dmpDir"/pg_backup_"$today".sql.gz ; echo "7 天前的 PostgreSQL 数据库备份文件已删除!" echo "开始远端备份..." scp -r $dmpDir"/pg_backup_"$today".sql.gz root@backup_ip:destination echo "远端备份完毕,感谢您使用此脚本!" exit;
利用
find / -name pg_dumpall
给
chmod +x pg_dump_backup.sh crontab -e # PostgreSQL 数据库备份 0 3 * * 6 root sh /home/postgres/pg_dump_backup.sh >> /home/postgres/postgres_backup.log 2>&1 &
六、PostgreSQL 数据库的恢复
使用
首先,确保已经登录到拥有足够权限的数据库用户账号。然后,使用以下命令将备份文件恢复到新数据库中:
pg_restore -U <username> -d <database_name> <backup_file_path>
-
<username> :具有足够权限的数据库用户的用户名 -
<database_name> :将备份文件恢复到的目标数据库的名称 -
<backup_file_path> :数据库备份文件的完整路径及文件名
输入用户密码后,
最后,在分享个脚本,该脚本的作用主要是删除指定目录中7天前的数据库备份文件。首先,是在终端中打印一条消息,告诉用户脚本开始删除 7 天前的数据库备份文件。
然后,执行
-
find :是一个用于在指定目录中查找文件的命令 -
/home/postgresql_backup/ :要查找的目录 -
-name "*sql" :查找以.sql 结尾的文件 -
-mtime +7 :查找修改时间在 7 天之前的文件 -
-exec rm -rf {} ; :对查找到的文件执行rm -rf 命令,{} 会被替换为实际的文件名。
最后,在终端中打印一条消息,告诉用户 7 天前的数据库备份文件已经删除完毕!
#!/bin/bash echo "开始删除 7 天前的 数据库备份文件..." find /home/postgresql_backup/ -name "*sql" -mtime +7 -exec rm -rf {} ; set timeout 1000 echo " 7 天前的数据库备份文件删除完毕!"
以上,就是今天分享的全部内容啦!希望对你有所帮助。下期见!
往期精彩回顾 适合初学者入门人工智能的路线及资料下载(图文+视频)机器学习入门系列下载机器学习及深度学习笔记等资料打印《统计学习方法》的代码复现专辑
-
交流群
欢迎加入机器学习爱好者微信群一起和同行交流,目前有机器学习交流群、博士群、博士申报交流、CV、NLP等微信群,请扫描下面的微信号加群,备注:”昵称-学校/公司-研究方向“,例如:”张小明-浙大-CV“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~(也可以加入机器学习交流qq群772479961)