MYSQL定時備份(一)

weixin_45992487發表於2020-11-29

當Linxu伺服器進行定時備份時,需要配置scp服務。
如下:

本地伺服器(A)主伺服器
遠端伺服器(B)從伺服器

1,本地伺服器A執行ssh-keygen -t rsa,一直回車即可。出現這個頁面表示執行成功,會在/root/.ssh下生成id.rsa和id_rsa.pub兩個檔案。

[root@localhost ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/fdipzone/.ssh/id_rsa): 這裡輸入要生成的檔名
Enter passphrase (empty for no passphrase):                       這裡輸入密碼 
Enter same passphrase again:                                      這裡重複輸入密碼
Your identification has been saved in /home/fdipzone/.ssh/id_rsa.
Your public key has been saved in /home/fdipzone/.ssh/id_rsa.pub.
The key fingerprint is:
f2:76:c3:6b:26:10:14:fc:43:e0:0c:4d:51:c9:a2:b0 fdipzone@ubuntu
The key's randomart image is:
+--[ RSA 2048]----+
|    .+=*..       |
|  .  += +        |
|   o oo+         |
|  E . . o        |
|      ..S.       |
|      .o .       |
|       .o +      |
|       ...oo     |
|         +.      |
+-----------------+

2,把主服務A的id_rsa.pub檔案拷貝到遠端伺服器B的/root/.ssh下,如果遠端伺服器B的/root/.ssh的資料夾不存在,執行mkdir 檔名建立。通過ssh工具下載上傳的方式,也可以用scp拷貝,scp第一次是需要輸入密碼,複製完之後,信任關係就已經建立如下:

#/root/.ssh為資料夾路徑,127.0.0.1是備份伺服器IP。scp的同時會修改資料夾為authorized_keys
[root@localhost .ssh]# scp /root/.ssh/id_rsa.pub root@127.0.0.1:/root/.ssh/authorized_keys
root@127.0.0.1's password: 
id_rsa.pub                                      100%  408    41.7KB/s   00:00    
[root@localhost .ssh]#

3,在Linux下Mysqldump備份資料,會提示輸入密碼。在my.cnf配置檔案中[client]模組下新增資料庫賬號和密碼,如下圖

[client]
port = 3306
default-character-set=utf8
user = root
password = 123456

4,在指定的路徑執行編寫好的shell指令碼,執行之前需要在遠端伺服器B建立/home/mysql_backup資料夾。因為scp相互信任步驟完成,my.cnf配置中已設定資料庫賬號和密碼,所以不需要在輸入密碼,如下圖:

[root@localhost home]# sh mysql_backup.sh 
20201129-1445-test1.sql-tar.gz                                        100%  341KB  14.0MB/s   00:00    
20201129-1445-test2.sql-tar.gz                                         100% 5483   387.3KB/s   00:00    
20201129-1445-test3.sql-tar.gz                                         100%   31MB  31.3MB/s   00:01    
20201129-1445-test4sql-tar.gz                                         100%   23KB 827.6KB/s   00:00    
20201129-1445-test5.sql-tar.gz                                      100%   46MB  45.8MB/s   00:01    
[root@localhost home]# 

5,指令碼如下

#建立mysql備份目錄
file_dir="/home/mysql_backup"

if [ ! -d "$file_dir" ]; then
        echo "建立資料夾"
        mkdir $file_dir
else
        echo "資料夾已存在,正在備份mysql,請等待。"
fi

    rm -rf /home/mysql_backup/*
    HOST=127.0.0.1
    DATABASE1=test
    BACKUP_DIR=/home/mysql_backup/  #備份資料庫檔案的路徑 
    LOGFILE=/home/mysql_backup/data_backup.log    #備份資料庫指令碼的日誌檔案 
    DATE=`date +%Y%m%d-%H%M -d -3minute`     #獲取當前系統時間-3分鐘 
    DUMPFILE1=$DATE-test.sql                #需要備份的資料庫名稱 
    ARCHIVE1=$DUMPFILE1-tar.gz                #備份的資料庫壓縮後的名稱 

    if [ ! -d $BACKUP_DIR ];                 #判斷備份路徑是否存在,若不存在則建立該路徑 
    then  
    mkdir -p "$BACKUP_DIR" 
    fi  

    echo -e "\n" >> $LOGFILE   

    echo "------------------------------------" >> $LOGFILE  
    echo "BACKUP DATE:$DATE">> $LOGFILE  
    echo "------------------------------------" >> $LOGFILE  

    cd $BACKUP_DIR                           
    #跳到備份路徑下
mysqldump -h$HOST -R --databases $DATABASE1 --hex-blob > $DUMPFILE1    
    #使用mysqldump備份資料庫 
    if [[ $? == 0 ]]; then 
    tar czvf $ARCHIVE1 $DUMPFILE1 >> $LOGFILE 2>&1
    #判斷是否備份成功,若備份成功,則壓縮備份資料庫,否則將錯誤日誌寫入日誌檔案中去。 
    echo "$ARCHIVE1 BACKUP SUCCESSFUL!" >> $LOGFILE  
    rm -f $DUMPFILE1 
    else  
    echo$ARCHIVE1 Backup Fail!>> $LOGFILE  
    fi 
	
scp /home/mysql_backup/* root@127.0.0.1:/home/mysql_backup/

6,到主伺服器A,遠端伺服器B指定的MYSQL備份目錄看下是否成功,備份成功!
在這裡插入圖片描述

7,接下來設定定時備份任務,在主伺服器A執行crontab -e,設定指令碼執行的時間,下面語句中的路徑及時間請根據實際情況填寫。如下

30 23 * * * /bin/bash /home/mysql_backup.sh

8,如未生效,執行 service crond reload 過載crond服務!

相關文章