欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Shell腳本實現(xiàn)MySQL、Oracle、PostgreSQL數(shù)據(jù)庫備份

 更新時間:2024年02月23日 09:25:21   作者:川哥編程  
本文主要介紹了Shell腳本實現(xiàn)MySQL、Oracle、PostgreSQL數(shù)據(jù)庫備份,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

在工作中,生產環(huán)境數(shù)據(jù)庫備份的重要性和必要性是必不可少的。備份可以確保數(shù)據(jù)庫的安全性和業(yè)務連續(xù)性,有助于預防減少因硬件故障、人為錯誤或惡意攻擊等原因導致的意外數(shù)據(jù)丟失的風險。

那么今天,本文主要介紹MySQLOraclePostgreSQL數(shù)據(jù)庫的備份腳本及恢復方法,可全面了解不同數(shù)據(jù)庫的備份和恢復方法。

一、MySQL 數(shù)據(jù)庫異地備份腳本

該腳本主要是用于在Linux系統(tǒng)上備份MySQL數(shù)據(jù)庫,自定義數(shù)據(jù)庫用戶名、密碼、IP 地址、遠程備份服務器 IP、本地備份路徑、遠程備份路徑、當前時間、7 天前的日期變量。

使用mkdir -p命令創(chuàng)建以當前日期為名的目錄,存放數(shù)據(jù)庫備份文件。

使用mysqldump命令備份所有數(shù)據(jù)庫,并將輸出重定向至mysql_backup_$DATE.sql文件中。

使用tar命令將備份文件壓縮為:.tar.gz格式的文件內,并附加日志到備份文件中,然后刪除原始的備份文件。

使用rm -rf命令刪除 7 天前的備份文件,刪除的是以 7 天前日期為名的目錄和目錄下的所有文件。

使用scp命令將本地備份文件傳到遠程備份服務器上。

#!/bin/bash
# Database info
DB_USER="root"                          # 數(shù)據(jù)庫備份用戶
DB_PASS="1Q!2W@3E#"                     # 備份用戶密碼
DB_HOST="192.168.1.100"                 # 數(shù)據(jù)庫 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,用于刪除備份文件取文件時間,該參數(shù)可自行調整

#BACK_NAME="db_$var.sql"
#TB_NAME=("" "" "" "" "")               # 需要備份的表名

#create file

mkdir -p $BCK_DIR/$DATE                 # 創(chuàng)建本地備份日期目錄
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 天前的數(shù)據(jù)庫備份文件..."
rm -rf $BCK_DIR/$yestoday
echo "7 天前的數(shù)據(jù)庫備份文件刪除完畢!"

echo "開始遠程備份中..."
scp -r $BCK_DIR/$DATE/mysql_backup_$DATE.sql.tar.gz root@$DBBACK_IP:$DBBACK_PATH
echo "遠程備份完畢!"

需要注意的是:遠程備份需要做免密,在MySQL數(shù)據(jù)庫所在服務器與需要遠程備份的服務器做免密,并進行ssh驗證登錄是否正常。

ssh-keygen
cd ~/.ssh/
scp id_rsa.pub 目標主機IP:~/.ssh/authorized_keys

利用find命令查找mysqldump工具安裝路徑,并按實際路徑更改腳本中的參數(shù)。

find / -name mysqldump

mysql_backup.sh腳本增加可執(zhí)行權限,并創(chuàng)建crontab定時任務。

chmod +x mysql_backup.sh

crontab -e
# MySQL 數(shù)據(jù)庫備份
0 3 * * 6 root sh /bigdata/mysql_backup.sh >> /bigdata/mysql_backup.log 2>&1 &

二、MySQL 數(shù)據(jù)庫的恢復

首先確保已安裝好MySQL數(shù)據(jù)庫

可使用以下語法命令從.sql文件中恢復MySQL數(shù)據(jù)庫

mysql -u [用戶名] -p [密碼] [數(shù)據(jù)庫名] < [備份文件名.sql]

三、Oracle 數(shù)據(jù)庫異地備份腳本

該腳本用來自動備份Oracle數(shù)據(jù)庫。首先,輸出一些提示信息,然后獲取當前時間,并設置日志文件路徑、備份日期時間、保留文件的日期時間、本地備份路徑、遠端備份路徑、Oracle 數(shù)據(jù)庫服務器本機 IP、遠端備份 IP、用戶名、密碼、告警郵箱變量。

腳本會檢查本地備份目錄路徑是否存在,如果不存在則創(chuàng)建定義的目錄。然后,使用 exp 命令進行Oracle數(shù)據(jù)庫的全量備份,并將備份文件保存在指定的本地備份目錄路徑中。

通過SSH連接到遠程備份服務器,檢查遠程備份目錄路徑是否存在,如果不存在則創(chuàng)建定義的路徑。然后刪除本地備份目錄路徑下兩星期前的備份文件,并通過SSH刪除遠程備份路徑下兩星期前的備份文件。

對當前備份文件進行壓縮,并通過SCP將壓縮后的備份文件傳輸?shù)竭h程備份服務器。最后,會根據(jù)備份和傳輸?shù)慕Y果發(fā)送相應的通知郵件。

#!/bin/bash
echo "開始執(zhí)行 Oracle 數(shù)據(jù)庫備份..."
echo "backup ing -------------------"
echo "時間:" nowtime
oraclelog=/opt/originbackup/oraclebackup.log                   # Oracle 日志查看位置
current_date=`date +%Y-%m-%d`                                  # 當前執(zhí)行日期時間
nowtime=$(date +%F+%T)                                         # 顯示當前時間,用于記錄腳本運行開始時間
seven_day_date=`date -d -7day '+%Y-%m-%d'`                     # 保留一星期前 dmp 文件時間
fourteen_day_date=`date -d -14day '+%Y-%m-%d'`                 # 保留兩星期前 dmp 文件時間

### 需修改參數(shù)部分 ###
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 密碼
mail=xxx@163.com,xxx@126.com                                   # 告警郵箱

source /home/oracle/.bash_profile

### 判斷是否有目錄,沒有則創(chuàng)建目錄 ### 
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}|$)'`
                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  # 保留兩星期前數(shù)據(jù),其他 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-----------------\n"
    exit -1      # 終止后面的所有腳本執(zhí)行
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 文件未發(fā)現(xiàn)
                fi
fi

echo -e "-----end dmp all-----------------\n"

同樣,異地備份免密是必不可少的一步,參考上述MySQL配置的免密步驟即可。

oracle_backup.sh腳本增加可執(zhí)行權限,并在Linux/etc/crontab文件中創(chuàng)建定時任務。

chmod +x oracle_backup.sh

crontab -e
# Oracle 數(shù)據(jù)庫備份
0 3 * * 6 root sh /opt/oracle_backup.sh >> /opt/oraclebackup.log

四、Oracle 數(shù)據(jù)庫的恢復

前提是oracle數(shù)據(jù)庫已經安裝好

然后,創(chuàng)建目錄 /opt/oracle/oraclebak 并將數(shù)據(jù)庫備份文件 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

在數(shù)據(jù)庫中創(chuàng)建備份目錄,以便數(shù)據(jù)庫可以訪問備份文件。

create or replace directory oracle_exp as '/opt/oracle/oraclebak';

授予 oracle_db 用戶對備份目錄的讀寫權限。

grant read, write on directory oracle_exp to oracle_db;

最后,使用以下命令在數(shù)據(jù)庫服務器上切換到 oracle 用戶,并執(zhí)行數(shù)據(jù)庫恢復操作:

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:本地數(shù)據(jù)庫恢復的用戶名、密碼和數(shù)據(jù)庫 SID

  • SCHEMAS:指定要導入的表空間

  • DUMPFILE:指定數(shù)據(jù)庫恢復文件

  • LOGFILE:指定數(shù)據(jù)庫恢復日志

五、PostgreSQL 數(shù)據(jù)庫異地備份腳本

該腳本是備份PostgreSQL數(shù)據(jù)庫并將備份文件傳輸?shù)竭h端備份服務器上。首先,使用date命令獲取了今天的日期、當前時間點和 7 天前的日期,分別賦給了today、nowtimeyestoday變量。

定義了本機 IP 地址、遠端備份服務器 IP、PostgreSQL 數(shù)據(jù)庫的端口號、數(shù)據(jù)庫用戶名和密碼,分別賦給了host_ip、backup_ipport_id、usernameexport PGPASSWORD變量。

指定了本地備份目錄和遠端備份目錄,分別賦給了dmpDirdestination變量。

使用pg_dumpall命令來備份整個PostgreSQL數(shù)據(jù)庫,并將備份文件保存在本地備份目錄中。備份完成后,對備份文件進行了壓縮。使用scp命令將壓縮后的備份文件傳輸?shù)竭h端備份服務器上的指定目錄。

最后,輸出備份和傳輸?shù)南嚓P信息,并結束腳本的執(zhí)行。

#!/bin/bash
#Description:備份 PostgreSQL 數(shù)據(jù)庫必能壓縮成 gz 文件,最后刪除 3 天前的備份文件。

echo "開始執(zhí)行 PostgreSQL 數(shù)據(jù)庫的備份..."
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                             # 數(shù)據(jù)庫用戶             
export PGPASSWORD=7u&8i*9o(                   # 數(shù)據(jù)庫密碼
dmpDir=/opt/pgbak                             # 本地備份目錄
destination=/bigdata/pg_backup                # 遠端備份目錄
echo "時間:" $nowtime
set timeout 600

#/monchickey/bin/ 為 pg_dump 備份工具安裝路徑,根據(jù)實際情況更新此路徑。
/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 數(shù)據(jù)庫備份完成!"

echo "當天備份文件壓縮中..."
gzip "$dmpDir"/pg_backup_"$today".sql.gz ;
echo "7 天前的 PostgreSQL 數(shù)據(jù)庫備份文件已刪除!"

echo "開始遠端備份..."
scp -r $dmpDir"/pg_backup_"$today".sql.gz root@backup_ip:destination

echo "遠端備份完畢,感謝您使用此腳本!"
exit;

利用find查找pg_dumpall工具安裝路徑,并修改腳本中的參數(shù)。

find / -name pg_dumpall

pg_dump_backup.sh腳本增加可執(zhí)行權限,并在Linux/etc/crontab文件中創(chuàng)建定時任務。

chmod +x pg_dump_backup.sh

crontab -e
# PostgreSQL 數(shù)據(jù)庫備份
0 3 * * 6 root sh /home/postgres/pg_dump_backup.sh >> /home/postgres/postgres_backup.log 2>&1 &

六、PostgreSQL 數(shù)據(jù)庫的恢復

使用pg_restore命令將備份文件恢復到新數(shù)據(jù)庫中,需確保已創(chuàng)建目標數(shù)據(jù)庫。

首先,確保已經登錄到擁有足夠權限的數(shù)據(jù)庫用戶賬號。然后,使用以下命令將備份文件恢復到新數(shù)據(jù)庫中:

pg_restore -U <username> -d <database_name> <backup_file_path>
  • <username>:具有足夠權限的數(shù)據(jù)庫用戶的用戶名

  • <database_name>:將備份文件恢復到的目標數(shù)據(jù)庫的名稱

  • <backup_file_path>:數(shù)據(jù)庫備份文件的完整路徑及文件名

輸入用戶密碼后,pg_restore將開始從備份文件中恢復數(shù)據(jù)庫。

最后,在分享個腳本,該腳本的作用主要是刪除指定目錄中7天前的數(shù)據(jù)庫備份文件。首先,是在終端中打印一條消息,告訴用戶腳本開始刪除 7 天前的數(shù)據(jù)庫備份文件。

然后,執(zhí)行find /home/postgresql_backup/ -name "*sql" -mtime +7 -exec rm -rf {} \;命令,這行命令實際上是執(zhí)行刪除操作。讓我來解釋一下這個命令:

  • find:是一個用于在指定目錄中查找文件的命令

  • /home/postgresql_backup/:要查找的目錄

  • -name "*sql":查找以.sql結尾的文件

  • -mtime +7:查找修改時間在 7 天之前的文件

  • -exec rm -rf {} \;:對查找到的文件執(zhí)行 rm -rf 命令,{} 會被替換為實際的文件名。

最后,在終端中打印一條消息,告訴用戶 7 天前的數(shù)據(jù)庫備份文件已經刪除完畢!

#!/bin/bash
echo "開始刪除 7 天前的 數(shù)據(jù)庫備份文件..."
find /home/postgresql_backup/ -name "*sql" -mtime +7 -exec rm -rf {} \;
set timeout 1000
echo " 7 天前的數(shù)據(jù)庫備份文件刪除完畢!"

到此這篇關于Shell腳本實現(xiàn)MySQL、Oracle、PostgreSQL數(shù)據(jù)庫備份的文章就介紹到這了,更多相關Shell數(shù)據(jù)庫備份內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

相關文章

  • Linux文件管理方法介紹

    Linux文件管理方法介紹

    這篇文章介紹了Linux文件管理的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • Linux chown命令使用示例

    Linux chown命令使用示例

    Linux chown命令用于設置文件所有者和文件關聯(lián)組的命令,chown 需要超級用戶 root 的權限才能執(zhí)行此命令,本文給大家分享Linux chown命令使用示例,感興趣的朋友一起看看吧
    2023-03-03
  • Linux上安裝和卸載rpm軟件包的方法

    Linux上安裝和卸載rpm軟件包的方法

    這篇文章主要介紹了Linux上安裝和卸載rpm軟件包的方法的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-11-11
  • Linux bc命令實現(xiàn)數(shù)學計算器

    Linux bc命令實現(xiàn)數(shù)學計算器

    這篇文章主要介紹了Linux bc命令實現(xiàn)數(shù)學計算器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • Linux base shell重定向詳解

    Linux base shell重定向詳解

    這篇文章主要介紹了Linux base shell重定向的相關資料,并用一個簡明例子總結了常見用法(在第三節(jié)),需要的朋友可以參考下
    2014-04-04
  • shell中實用eval命令和安全問題

    shell中實用eval命令和安全問題

    eval命令非常強大,但也非常容易被濫用,本文主要介紹了shell中實用eval命令和安全問題,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • shell腳本實現(xiàn)多進程運行的方法示例

    shell腳本實現(xiàn)多進程運行的方法示例

    這篇文章主要給大家分享了shell腳本實現(xiàn)多進程運行的方法示例,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • linux啟動dhcp服務器步驟

    linux啟動dhcp服務器步驟

    在本篇文章里小編給大家整理了關于linux怎么啟動dhcp服務器的相關知識點內容,需要的朋友們跟著學習下。
    2019-05-05
  • linux踢出遠程登錄用戶命令(總結篇)

    linux踢出遠程登錄用戶命令(總結篇)

    本文給大家總結了linux踢出遠程登錄用戶命令,通過linux命令介紹了 tty 踢出登錄的操作方法,本文給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2024-01-01
  • shell腳本實現(xiàn)定時刪除文件或文件夾

    shell腳本實現(xiàn)定時刪除文件或文件夾

    本文主要介紹了shell腳本實現(xiàn)定時刪除文件或文件夾,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08

最新評論