備份MySQL數據庫並上傳到阿里雲OSS存儲


1. 環境配置

要將本地文件上傳到阿里雲oss中, 必須使用阿里雲提供的工具 ossutil, 有32位,也有64位的, Linux和Windows都有.具體可以到阿里雲官網下載

官網及文檔: https://helpcdn.aliyun.com/document_detail/120075.html?spm=a2c4g.11186623.2.45.637b1c7aEqbumo

本文以Linux系統為例:

下載工具:
wget http://gosspublic.alicdn.com/ossutil/1.6.7/ossutil64
修改文件執行權限:
chmod 755 ossutil64
使用交互式配置生成配置文件:
./ossutil64 config

該命令將創建一個配置文件,在其中存儲配置信息。
請輸入配置文件路徑(默認為:/home/user/.ossutilconfig,回車將使用默認路徑。如果用戶設置為其它路徑,在使用命令時需要將--config-file選項設置為該路徑):
未輸入配置文件路徑,將使用默認配置文件:/home/user/.ossutilconfig。
對於下述配置,回車將跳過相關配置項的設置,配置項的具體含義,請使用"help config"命令查看。
請輸入endpoint:http://oss-cn-hangzhou.aliyuncs.com
請輸入accessKeyID:yourAccessKeyID
請輸入accessKeySecret:yourAccessKeySecret
請輸入stsToken:
endpoint:填寫Bucket所在地域的域名信息,可參考訪問域名和數據中心。
accessKeyID:查看方式請參考創建AccessKey。
accessKeySecret:查看方式請參考創建AccessKey。
stsToken:非必配項,若采用STS臨時授權方式訪問OSS需要配置該項,否則置空即可。stsToken生成方式參考臨時訪問憑證。
說明 更詳細的配置文件說明可參考 https://helpcdn.aliyun.com/document_detail/120072.html?spm=a2c4g.11186623.2.21.409c448ahCrIHZ#concept-303826 。

配置完成后,可以用如下命令進行測試:

ossutil64 cp /etc/fatab oss://aliyunoss-backup/DB_DATA/

# aliyunoss-backup 為我的oss Bucket名稱.DB_DATA為數據庫備份目錄.

如果你在第一步輸入了 config file path, 執行上傳命令的時候必須要加上指定的 config file path, 否則到默認的地方/root/.ossutilconfig是找不到的.如:

ossutil64 cp /etc/fatab oss://aliyunoss-backup/DB_DATA/ --config-file=/path to config file/filename

2. 配置示例

說明, 如下腳本是本人用的備份MySQL數據庫並上傳到阿里雲oss存儲.

 1 #!/bin/bash
 2 # mysql_backup.sh: backup mysql databases and keep newest 7 days backup.  
 3 #  
 4 # ${db_user} is mysql username  
 5 # ${db_password} is mysql password  
 6 # ${db_host} is mysql host   
 7 # —————————–  
 8 #/root/mysql_backup.sh
 9 # everyday 3:00 AM execute database backup
10 # 0 3 * * * /root/mysql_backup_to_oss.sh
11 #/etc/cron.daily
12 
13 # the directory for story your backup file.  #
14 backup_dir="/opt/backup/mysql/"
15 
16 # 要備份的數據庫名 #
17 all_db="mydb1 mydb2 mydb3"
18 
19 # 要保留的備份天數 #
20 backup_day=7
21 
22 #數據庫備份日志文件存儲的路徑
23 logfile="/var/log/mysql_backup.log"
24 
25 # Aliyun OSS Bucket Name.
26 bucket_name=aliyunoss-backup
27 
28 # local IP address
29 local_ip=`hostname -i`
30 
31 # date format for backup file (dd-mm-yyyy)  #
32 time="$(date +"%Y-%m-%d")"
33 
34 # mysql, ${mysqldump} and some other bin's path  #
35 mysql="/usr/bin/mysql"
36 mysqldump="/usr/bin/mysqldump"
37 
38 # the directory for story the newest backup  #
39 test ! -d ${backup_dir} && mkdir -p ${backup_dir}
40 
41 #備份數據庫函數#
42 mysql_backup()
43 {
44     # 取所有的數據庫名 #
45     for db in ${all_db}
46     do
47         backname=${db}.${time}
48         dumpfile=${backup_dir}${backname}
49         
50         #將備份的時間、數據庫名存入日志
51         echo "------"$(date +'%Y-%m-%d %T')" Beginning database "${db}" backup--------" >>${logfile}
52         ${mysqldump} --login-path=my3306 ${db} > ${dumpfile}.sql 2>>${logfile} 2>&1
53         
54         #開始將壓縮數據日志寫入log
55         echo $(date +'%Y-%m-%d %T')" Beginning zip ${dumpfile}.sql" >>${logfile}
56         
57         #將備份數據庫文件庫壓成ZIP文件,並刪除先前的SQL文件. #
58         tar -czvf ${backname}.tar.gz ${backname}.sql 2>&1 && rm ${dumpfile}.sql 2>>${logfile} 2>&1 
59         
60         #將壓縮后的文件名存入日志。
61         echo "backup file name:"${dumpfile}".tar.gz" >>${logfile}
62         echo -e "-------"$(date +'%Y-%m-%d %T')" Ending database "${db}" backup-------\n" >>${logfile}    
63     done
64 }
65 
66 delete_old_backup()
67 {    
68     echo "delete backup file:" >>${logfile}
69     # 刪除舊的備份 查找出當前目錄下七天前生成的文件,並將之刪除
70     find ${backup_dir} -type f -mtime +${backup_day} | tee delete_list.log | xargs rm -rf
71     cat delete_list.log >>${logfile}
72 }
73 
74 upload_backups_toAliyunOSS()
75 {
76     # upload backfile to Aliyun OSS bucket
77     for db in ${all_db}
78     do
79         backname=${db}.${time}
80         echo "upload ${backname}.tar.gz to AliyunOSS begin at "$(date +'%Y-%m-%d %T') >>${logfile}
81         ### Upload to AliyunOSS by storage Monthly ### 
82         ossutil64 cp ${backname}.tar.gz oss://${bucket_name}/DB_DATA/$(date +'%Y%m')/${local_ip}/ -f
83         echo "upload ${backname}.tar.gz to AliyunOSS done at "$(date +'%Y-%m-%d %T') >>${logfile}
84     done
85 }
86 
87 #進入數據庫備份文件目錄
88 cd ${backup_dir}
89 
90 mysql_backup
91 delete_old_backup
92 upload_backups_toAliyunOSS
93 
94 echo -e "========== mysql backup && upload_to_AliyunOSS done at "$(date +'%Y-%m-%d %T')" ==========\n\n">>${logfile}
95 #cat ${logfile}
MySQL備份腳本(壓縮並上傳到阿里雲OSS)

OSS中存儲格式:

 

 備份日志:

 

 

3. MySQL認證登錄配置

在上述腳本中使用到了MySQL認證登錄, 使用mysql_config_editor工具提前配置好MySQL的認證登錄.

mysql_config_editor是在MySQL-5.6以后提供的, 這個工具可以認證信息加密存儲在.mylogin.cnf中,通常這個文件在Linux用戶的家目錄,當然password信息是加密的,無需擔心泄露問題, 當然也不需要每次登錄都輸入密碼, 更不用講密碼寫入腳本或配置文件中, 登錄MySQL只需要使用認證信息登錄即可. 在一定程度上保障了數據庫的安全.

mysql_config_editor使用方法:

mysql_config_editor set --login-path=[認證信息名] user=[用戶名] --password
#認證信息名是該條認證信息的名稱,后續登錄時直接使用認證信息名即可登錄,無需再次輸入密碼。
#這里需要注意的是密碼里面不能含有特殊字符,建議創建一個新的用戶來進行備份操作
mysql --login-path=[認證信息名]
#直接使用認證信息名來登錄

如:

mysql_config_editor set --login-path=my3306 --user=root --socket=/opt/mysql/mysql.sock --password

輸入密碼后,就建立了認證信息文件my3306, 下次登錄MySQL數據庫, 就不用輸入密碼了,使用如下命令即可免密登錄mysql:

mysql --login-path=my3306

MySQL備份:
mysqldump --login-path=my3306 py3db > py3db.sql

 

 

 無需輸入MySQL密碼, 即可執行命令.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM