网站dns修改,中国楼市未来发展趋势,正规企业网站开发使用方法,大连网站制作团队文章目录 一、概要二、MySQL 数据库备份与还原异地备份脚本2.1 MySQL 数据库异地备份脚本2.2 MySQL 数据库的恢复 三、Oracle 数据库备份与还原脚本3.1 Oracle 数据库异地备份脚本3.2 Oracle 数据库的恢复 四、PostgreSQL 数据库异地备份与还原脚本4.1 PostgreSQL 数据库备份脚… 文章目录 一、概要二、MySQL 数据库备份与还原异地备份脚本2.1 MySQL 数据库异地备份脚本2.2 MySQL 数据库的恢复 三、Oracle 数据库备份与还原脚本3.1 Oracle 数据库异地备份脚本3.2 Oracle 数据库的恢复 四、PostgreSQL 数据库异地备份与还原脚本4.1 PostgreSQL 数据库备份脚本4.2 PostgreSQL 数据库的恢复 一、概要
在工作中生产环境数据库备份的重要性和必要性是必不可少的。备份可以确保数据库的安全性和业务连续性有助于预防减少因硬件故障、人为错误或恶意攻击等原因导致的意外数据丢失的风险。
那么今天本文主要介绍MySQL、Oracle和PostgreSQL数据库的备份脚本及恢复方法可全面了解不同数据库的备份和恢复方法。
二、MySQL 数据库备份与还原异地备份脚本
2.1 MySQL 数据库异地备份脚本
该脚本主要是用于在Linux系统上备份MySQL数据库自定义数据库用户名、密码、IP 地址、远程备份服务器 IP、本地备份路径、远程备份路径、当前时间、7 天前的日期变量。
使用mkdir -p命令创建以当前日期为名的目录存放数据库备份文件。
使用mysqldump命令备份所有数据库并将输出重定向至mysql_backup_$DATE.sql文件中。
使用tar命令将备份文件压缩为.tar.gz格式的文件内并附加日志到备份文件中然后删除原始的备份文件。
使用rm -rf命令删除 7 天前的备份文件删除的是以 7 天前日期为名的目录和目录下的所有文件。
使用scp命令将本地备份文件传到远程备份服务器上。
#!/bin/bash
# Database info
DB_USERroot # 数据库备份用户
DB_PASS1Q!2W3E# # 备份用户密码
DB_HOST192.168.1.100 # 数据库 IP
DBBACK_IP192.168.1.200 # 远程备份服务器 IP
BCK_DIR/bigdata/mysql # 本地备份路径
DBBACK_PATH/bigdata/mysqlbackup # 远程备份路径
DATEdate %F # 获取当前时间
yestoday$(date -d -7 day %Y-%m-%d) # 取 7 天前的时间格式为2023-12-30用于删除备份文件取文件时间该参数可自行调整#BACK_NAMEdb_$var.sql
#TB_NAME( ) # 需要备份的表名#create filemkdir -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.logecho 开始删除 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 远程备份完毕需要注意的是远程备份需要做免密在MySQL数据库所在服务器与需要远程备份的服务器做免密并进行ssh验证登录是否正常。
ssh-keygen
cd ~/.ssh/
scp id_rsa.pub 目标主机IP~/.ssh/authorized_keys利用find命令查找mysqldump工具安装路径并按实际路径更改脚本中的参数。
find / -name mysqldump给mysql_backup.sh脚本增加可执行权限并创建crontab定时任务。
chmod x mysql_backup.shcrontab -e
# MySQL 数据库备份
0 3 * * 6 root sh /bigdata/mysql_backup.sh /bigdata/mysql_backup.log 21 2.2 MySQL 数据库的恢复
首先确保已安装好MySQL数据库详情可参考文章MySQL 数据库系统的安装
可使用以下语法命令从.sql文件中恢复MySQL数据库详情可参考文章MySQL 数据库系统的备份与恢复
mysql -u [用户名] -p [密码] [数据库名] [备份文件名.sql]三、Oracle 数据库备份与还原脚本
3.1 Oracle 数据库异地备份脚本
该脚本用来自动备份Oracle数据库。首先输出一些提示信息然后获取当前时间并设置日志文件路径、备份日期时间、保留文件的日期时间、本地备份路径、远端备份路径、Oracle 数据库服务器本机 IP、远端备份 IP、用户名、密码、告警邮箱变量。
脚本会检查本地备份目录路径是否存在如果不存在则创建定义的目录。然后使用 exp 命令进行Oracle数据库的全量备份并将备份文件保存在指定的本地备份目录路径中。
通过SSH连接到远程备份服务器检查远程备份目录路径是否存在如果不存在则创建定义的路径。然后删除本地备份目录路径下两星期前的备份文件并通过SSH删除远程备份路径下两星期前的备份文件。
对当前备份文件进行压缩并通过SCP将压缩后的备份文件传输到远程备份服务器。最后会根据备份和传输的结果发送相应的通知邮件。
#!/bin/bash
echo 开始执行 Oracle 数据库备份...
echo backup ing -------------------
echo 时间 nowtime
oraclelog/opt/originbackup/oraclebackup.log # Oracle 日志查看位置
current_datedate %Y-%m-%d # 当前执行日期时间
nowtime$(date %F%T) # 显示当前时间用于记录脚本运行开始时间
seven_day_datedate -d -7day %Y-%m-%d # 保留一星期前 dmp 文件时间
fourteen_day_datedate -d -14day %Y-%m-%d # 保留两星期前 dmp 文件时间### 需修改参数部分 ###
dmpDir/data/originbackup # 本地备份路径
destination/opt/backup/ # 远端备份路径
localhost_ip192.168.1.111 # Oracle 本机 IP
backup_ip192.168.1.110 # 远端备份服务器 IP
oracle_useroracle_db # Oracle 用户名
oracle_password4r$5t%6y^ # Oracle 密码
mailxxx163.com,xxx126.com # 告警邮箱source /home/oracle/.bash_profile### 判断是否有目录没有则创建目录 ###
echo ---${current_date}--start dmp all-----
if [ ! -d ${dmpDir} ];thenecho ${dmpDir} is not exists,try to createmkdir -p ${dmpDir}
fi### 开始本地备份exp 为 oracle 备份工具 ###
exp $oracle_user/$oracle_password$localhost_ip:1521/orcl file$dmpDir/$current_date.dmp fully /dev/null 21#touch $dmpDir/$current_date.dmp /dev/null 21### 连接远端备份 IP 判断是否有目录 ###
if [ $? -eq 0 ]
thenssh $backup_ip ls $destination /dev/null 21if [ $? -eq 0 ]thenecho $destination exist mkdirelsessh $backup_ip mkdir -p $destinationecho $destination mkdir successfi
### 本地删除备份文件保留两个星期前的 ### ssh $backup_ip ls $destination /tmp/linshiwhile read mylinedoif [ ${myline} ${seven_day_date}.dmp.gz -o ${myline} ${fourteen_day_date}.dmp.gz ];thenecho $myline.dmp persist successelserm -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 21
# ssh $backup_ip rm -rf ls $destination/*| egrep -v (${a}|${b})if [ $? -eq 0 ]thenecho Two weeks ago file delete successelseecho Two weeks ago file delete failecho $current_date | mail -s $current_date oracle.dmp file delete faile $mail # 保留两星期前数据其他 dmp 文件删除失败fifidone /tmp/linshirm -rf /tmp/linshi
elseecho $current_date 文件备份失败 echo $current_date | mail -s $current_date file backup fail $localhost_ip $mail # 文件备份失败echo -e -----end dmp all-----------------\nexit -1 # 终止后面的所有脚本执行
fi
### 本地压缩将压缩文件传到远端 IP ###
if [ -f $dmpDir/$current_date.dmp ]
thengzip -q -r $dmpDir/$current_date.dmp $dmpDirecho compress successscp -r $dmpDir/$current_date.dmp.gz root$backup_ip:$destination /dev/null 21if [ $? -eq 0 ]thenecho backup_file transfer successelseecho backup_file transfer failecho $current_date | mail -s $current_date oracle_dmp_file transfer fail $localhost_ip $mail # dmp 文件传递失败fi
else echo backup_file not foundif [ $? -eq 0 ]then#echo backup_file found failecho $current_date | mail -s $current_date oracle_dmp_file not found $localhost_ip $mail # dmp 文件未发现fi
fiecho -e -----end dmp all-----------------\n同样异地备份免密是必不可少的一步参考上述MySQL配置的免密步骤即可。
给oracle_backup.sh脚本增加可执行权限并在Linux的/etc/crontab文件中创建定时任务。
chmod x oracle_backup.shcrontab -e
# Oracle 数据库备份
0 3 * * 6 root sh /opt/oracle_backup.sh /opt/oraclebackup.log3.2 Oracle 数据库的恢复
前提是oracle数据库已经安装好详情可参考文章Oracle 数据库环境搭建 和 手把手教你在 Linux 环境下部署 Oracle 数据库
然后创建目录 /opt/oracle/oraclebak 并将数据库备份文件 oracle_db.dmp 复制到该目录中。
mkdir -p /opt/oracle/oraclebak
cp oracle_db.dmp /opt/oracle/oraclebak授予 /opt/oracle/oraclebak 目录权限给 oracle 用户和 dba 组。
chown oracle:dba /opt/oracle/oraclebak在数据库中创建备份目录以便数据库可以访问备份文件
create or replace directory oracle_exp as /opt/oracle/oraclebak;授予 oracle_db 用户对备份目录的读写权限
grant read, write on directory oracle_exp to oracle_db;最后使用以下命令在数据库服务器上切换到 oracle 用户并执行数据库恢复操作
su - oracle
impdp oracle_db/oracle_dborcl SCHEMASoracle_db DUMPFILEoracle_exp:oracle_db.dmp LOGFILEoracle_exp:oracle_db.logoracle_exp备份路径定义的目录别名oracle_db/oracle_dborcl本地数据库恢复的用户名、密码和数据库 SIDSCHEMAS指定要导入的表空间DUMPFILE指定数据库恢复文件LOGFILE指定数据库恢复日志
四、PostgreSQL 数据库异地备份与还原脚本
4.1 PostgreSQL 数据库备份脚本
该脚本是备份PostgreSQL数据库并将备份文件传输到远端备份服务器上。首先使用date命令获取了今天的日期、当前时间点和 7 天前的日期分别赋给了today、nowtime和yestoday变量。
定义了本机 IP 地址、远端备份服务器 IP、PostgreSQL 数据库的端口号、数据库用户名和密码分别赋给了host_ip、backup_ip、port_id、username和export PGPASSWORD变量。
指定了本地备份目录和远端备份目录分别赋给了dmpDir和destination变量。
使用pg_dumpall命令来备份整个PostgreSQL数据库并将备份文件保存在本地备份目录中。备份完成后对备份文件进行了压缩。使用scp命令将压缩后的备份文件传输到远端备份服务器上的指定目录。
最后输出备份和传输的相关信息并结束脚本的执行。
#!/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_ip127.0.0.1 # 本机 IP 地址
backup_ip192.168.1.111 # 远端备份服务器 IP
port_id5432 # 端口号PostgreSQL默认的端口号是5432
usernamepostgres # 数据库用户
export PGPASSWORD7u8i*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 --formatc --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 rootbackup_ip:destinationecho 远端备份完毕感谢您使用此脚本
exit;利用find查找pg_dumpall工具安装路径并修改脚本中的参数。
find / -name pg_dumpall给pg_dump_backup.sh脚本增加可执行权限并在Linux的/etc/crontab文件中创建定时任务。
chmod x pg_dump_backup.shcrontab -e
# PostgreSQL 数据库备份
0 3 * * 6 root sh /home/postgres/pg_dump_backup.sh /home/postgres/postgres_backup.log 21 4.2 PostgreSQL 数据库的恢复
使用pg_restore命令将备份文件恢复到新数据库中需确保已创建目标数据库。
首先确保已经登录到拥有足够权限的数据库用户账号。然后使用以下命令将备份文件恢复到新数据库中
pg_restore -U user_name -d database_name backup_file_pathuser_name具有足够权限的数据库用户的用户名 database_name将备份文件恢复到的目标数据库的名称 backup_file_path数据库备份文件的完整路径及文件名
输入用户密码后pg_restore将开始从备份文件中恢复数据库。
最后在分享个脚本该脚本的作用主要是删除指定目录中7天前的数据库备份文件。首先是在终端中打印一条消息告诉用户脚本开始删除 7 天前的数据库备份文件。
然后执行命令:
find /home/postgresql_backup/ -name *sql -mtime 7 -exec rm -rf {} \这行命令实际上是执行删除操作。让我来解释一下这个命令 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 天前的数据库备份文件删除完毕