mysql異地備份方案經驗總結


Mysql 數據庫異地備份腳本

實驗環境:關閉防火牆不然不能授權登錄

Mysql-server192.168.30.25

Mysql-client:  192.168.30.24

 

實驗要求:對mysql-server authclient庫實現異地備份,每天凌晨2:00進行備份

並寫一個數據恢復腳本(庫里有數據)

 

mysql服務端授權,給予selectlock tables 權限,已備份

[root@localhost ~]# mysql -uroot -p123456

mysql> grant select,lock tables on auth.* to 'admin'@'192.168.30.24'identified by '123456';

mysql> grant select,lock tables on client.* to 'admin'@'192.168.30.24' identified by '123456';

mysql> flush privileges;

連接測試

這個需要安裝好后的mysql,連接測試

[root@client ~]# mysql -uadmin -p -h192.168.30.25

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| auth               |

| client             |

+--------------------+

3 rows in set (0.09 sec)

 

寫客戶端腳本

vim /opt/bakmysql.sh

#!/bin/bash

#mysql數據庫備份腳本

#設置登錄變量

MY_USER="admin"

MY_PASS="123456"

MY_HOST="192.168.30.25"

MY_CONN="-u$MY_USER -p$MY_PASS -h$MY_HOST"

#設置備份的數據庫

MY_DB1="auth"

MY_DB2="client"

#定義備份路徑,工具,時間,文件名

BF_DIR="backup"

BF_CMD="/usr/bin/mysqldump"            這里是mariadbmysqldump路徑

BF_TIME=$(date +%Y%m%d-%H%M)

NAME_1="$MY_DB1-$BF_TIME"

NAME_2="$MY_DB2-$BF_TIME"

#備份為.sql腳本,然后打包壓縮(打包后刪除原文件)

[ -d $BF_DIR ] || mkdir -p $BF_DIR

cd $BF_DIR

$BF_CMD $MY_CONN --databases $MY_DB1 > $NAME_1.sql

$BF_CMD $MY_CONN --databases $MY_DB2 > $NAME_2.sql

tar zcf $NAME_1.tar.gz $NAME_1.sql --remove &> /dev/null

tar zcf $NAME_2.tar.gz $NAME_2.sql --remove &> /dev/null

 

 

 

[root@client backup]#chmod +x /opt/bakmysql.sh

[root@client backup]#/opt/bakmsyql.sh

[root@client backup]#ls backup

[root@client backup]#crontab -e

0    2   *    *   * /opt/bakmsyql.sh

systemctl restart crond

[root@client backup]#date 040601592019.59        //MMDDhhmmYY.SS   月日小時分鍾年.

可以用這個命令也可以主要修改系統時間,讓備份多做幾天的,然后我們讓后面的腳本選擇性恢復date -s 2019-05-26 01:59:55

20190406日 星期日 01:59:59 CST

[root@client backup]# date 040701592019.59

20190407日 星期日 01:59:59 CST

[root@client backup]# date 040801592019.59

20190408日 星期一 01:59:59 CST

 

 

撰寫數據恢復腳本

 

vim /opt/restore_mysql.sh

#!/bin/bash

#恢復mysql數據庫數據腳本

#設置變量

MY_USER="admin"

MY_PASS="123456"

MY_HOST="192.168.30.23"

BF_DIR="backup"

mkdir .aaa &> /dev/null

ls $BF_DIR |column -t > .aaa/db_list

awk -F'-' '{print $2}' .aaa/db_list > .aaa/dt.txt

read -p "請指定要恢復數據庫的日期(YYYYMMDD):" dt

if [ $dt -ge 20190501 ] && [ $dt -le 20190601 ]

        then

        grep "$dt" .aaa/dt.txt &> /dev/null

        if [ $? -ne 0 ]

        then

                echo "很抱歉,您恢復的數據庫備份日期不在備份日期范圍內"

        else

                echo "搜索到的可恢復數據庫如下:"

                awk -F'-' /$dt/'{print NR,$1}' .aaa/db_list

                read -p "請選擇您要恢復數據庫的編號:" nb

                nm=$(awk -F'-' /$dt/'{print NR,$1}' .aaa/db_list |awk /$nb/'{print $2}')

                echo "現在開始恢復數據庫:$nm $dt"

        cd $BF_DIR

        onm=$(ls |grep "$nm-$dt")

        mkdir .bbb

        tar xf $onm -C .bbb

    mysql -u$MY_USER -p$MY_PASS -h$MY_host $nm < .bbb/*

    echo "$nm 已經恢復到$dt"

rm -rf .bbb

    cd - &> /dev/null

    rm -rf .aaa

    fi

    else

    echo "很抱歉,您恢復數據庫的備份日期不在備份日期范圍內"

    fi

 

 

 

server端授權

chmod +x /opt/restore_mysql.sh

Mysql >grant all on auth.* to admin@192.168.30.24;

Mysql >grant all on client.* to admin@192.168.30.24;

Mysql > flush privileges;

恢復測試

執行腳本

/opt/restore_mysql.sh


免責聲明!

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



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