mysql數據庫備份腳本

1. 備份腳本

#!/bin/bash

# MySQL連接信息
DB_HOST="localhost"
DB_USERNAME="root"
DB_PASSWORD="password"

# 要備份的數據庫名稱
DATABASES=("database1" "database2")

# 備份文件存放路徑
BACKUP_DIR="/path/to/backup/"
DATE=$(date +%Y-%m-%d)
TIMESTAMP=$(date +%H:%M:%S)
FILENAME="${BACKUP_DIR}/backup_${DATE}_${TIMESTAMP}.tar.gz"

# 創(chuàng)建備份目錄(如果不存在)
mkdir -p $BACKUP_DIR

for db in ${DATABASES[@]}; do
    # 使用mysqldump命令進行備份,并重定向輸出到tar壓縮文件中
     mysqldump --host=$DB_HOST --user=$DB_USERNAME --password=$DB_PASSWORD --default-character-set=utf8mb4 $db > "$BACKUP_DIR/$db.sql"
done

# 使用tar命令將每個數據庫的備份文件壓縮為一個tar.gz文件
tar -czvf "$FILENAME" -C "$BACKUP_DIR" *.sql

# 刪除單個備份文件
rm -f "$BACKUP_DIR"/*.sql

echo "數據庫備份完成!"

這個腳本將使用mysqldump命令備份每個數據庫,并將結果保存為單獨的SQL文件。然后,使用tar命令將這些文件壓縮為一個.tar.gz格式的壓縮文件。最后,刪除備份的SQL文件,并輸出提示消息“數據庫備份完成”。

2. 清理腳本

#刪除七天前備份,也就是只保存7天內的備份
#!/bin/bash
# 備份文件存放路徑
BACKUP_DIR="/path/to/backup/"
find $BACKUP_DIR -name "*.tar.gz" -type f -mtime +7 | xargs -I {} rm -rf {}

3. 設置定時任務

1.輸入 crontab -e 并按回車鍵,這會打開cron定時任務的配置文件。
2.在配置文件中,添加以下行來設置每天凌晨執(zhí)行備份、清理腳本:
0 1 * * * /path/to/backup_script.sh
0 2 * * * /path/to/clean_script.sh

4. 可能遇到的問題

4.1 mysql部署在容器中

docker exec mysql sh -c 'exec mysqldump --host=$DB_HOST --user=$DB_USERNAME --password=$DB_PASSWORD --default-character-set=utf8mb4 $db' > "$BACKUP_DIR/$db.sql"
腳本通過如上命令進行備份無效,因為容器內讀不到變量,可以將腳本放置容器內,或者建mysql的時候設置env

4.2 導出的sql文件存在亂碼

這個可能和服務器及文件的字符集有關。
實踐過程中我遇到cat中文顯示正常,vim中文顯示異常的現象,通過vim中的set fileencoding 查看文件編碼,異常的sql文件編碼為latin1,通過:set fileencoding=utf-8轉換仍是顯示異常?并且導出多個庫只有一個sql文件存在這種問題?求指教

vim編碼方面的基礎知識:

存在3個變量:

encoding—-該選項使用于緩沖的文本(你正在編輯的文件),寄存器,Vim 腳本文件等等。你可以把 ‘encoding’ 選項當作是對 Vim 內部運行機制的設定。

fileencoding—-該選項是vim寫入文件時采用的編碼類型。

termencoding—-該選項代表輸出到客戶終端(Term)采用的編碼類型。

此3個變量的默認值:

encoding—與系統(tǒng)當前l(fā)ocale相同,所以編輯文件的時候要考慮當前l(fā)ocale,否則要設置的東西就比較多了。

fileencoding—vim打開文件時自動辨認其編碼,fileencoding就為辨認的值。如果fileencoding為空則保存文件時采用encoding的編碼,如果沒有修改encoding,那值就是系統(tǒng)當前l(fā)ocale了。

termencoding—默認空值,也就是輸出到終端時不進行編碼轉換。

4.3 source導入亂碼

登錄時候加上編碼

mysql --host=$DB_HOST --user=$DB_USERNAME --password=$DB_PASSWORD --default-character-set=utf8mb4

4.4 高版本mysqldump導出低版本mysql數據報錯

出現如下報錯信息:
Unknown table 'COLUMN_STATISTICS' in information_schema (1109)
這是由于在mysqldump 8中默認啟用了一個新標志,
可以通過添加--column-statistics=0 來禁用它

4.5 crontab不生效

現象:手動執(zhí)行命令可以成功,cron定時任務發(fā)現失敗
原因:傳入了一個日期參數$(date +%Y%m%d),但是 %在crontab文件里是個特殊符號,相當于回車,因此命令不能正常執(zhí)行
解決:在%前加上反斜杠\,進行轉義就可以了

另外cron執(zhí)行docker失敗是可能因為exec加了-it參數

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容