mysql備份服務器中的_使用 Shell 備份遠程服務器上的 MySQL 數據庫到本機

適用場景:遠程服務器上的 MySQL 不允許遠程訪問,此時我們需要先登錄服務器,備份數據庫后,將備份文件拉取到本機。

源碼 mysqlDumpRemote2Local.sh

#!/bin/bash

################################################

# TODO: 登錄遠程服務器,備份指定數據庫并下載到本地

# 示例:

# ./mysqlDumpRemote2Local.sh

#

# Author: whoru.S.Q

# Link: https://github.com/whorusq/linux-learning/blob/master/shell/mysqlDumpRemote2Local.sh

# Version: 1.0

################################################

# 待操作待服務器列表

# 格式:"描述,數據庫名,數據庫用戶名,數據庫密碼,數據庫端口號,SSH登錄用戶名,SSH服務器IP,SSH登錄密碼,SSH端口號"

HOSTS=(

"test,db_demo,root,pwd123456,3306,root,192.168.1.127,pwd3333,22"

)

HOSTS_LEN=`echo ${#HOSTS[*]}`

HOST_KEY=

# 服務器上備份文件的存放目錄

DB_BACKUP_PATH=/opt/backup

# 當前腳本所處目錄

BASE_PATH=$(cd "$(dirname "$0")";pwd)

# 入口

function main {

#檢查基礎設置

if [ "$HOST_LEN" == "0" ]; then

echo "您還沒有配置待操作的服務器參數"

exit 1

fi

# 顯示菜單

MENU="\n"

INDEX=1

for host in ${HOSTS[*]}

do

local host_name=`echo $host | awk -F ',' '{ print $1" ===> "$2}'`

MENU=$MENU"\t"$INDEX". "$host_name"\n"

INDEX=`expr $INDEX + 1`

done

echo -en $MENU"\n"

# 檢查選擇

checkChoice

# 開始導出操作

doDump

}

function checkChoice {

read -p "請輸入序號選擇待備份的數據庫:" HOST_NUM

len=`echo "$HOST_NUM"|sed 's/[1-9]//g'`

if [ -n "$len" ]; then

ifGoon "輸入有誤,只支持1-9的數字,是否重新輸入[y/n]:"

else

KEY=`expr $HOST_NUM - 1`

if [ $KEY -le $HOSTS_LEN ]; then

HOST_KEY=$KEY

else

ifGoon "未知的序號,是否重新輸入[y/n]:"

fi

fi

}

function ifGoon {

echo -en "\033[32m==>\033[0m "

read -p $1 GOON

if [ "$GOON" == "y" ]; then

checkChoice

else

exit 0

fi

}

function doDump {

if [ -n "$SERVER_KEY" ]; then

echo "未知的序號"

exit 0

fi

# 從對應的配置中解析數據庫和 SSH 參數

HOST=${HOSTS[$HOST_KEY]}

HOST_NAME=`echo $HOST | awk -F ',' '{ print $1 }'`

DB_NAME=`echo $HOST | awk -F ',' '{ print $2 }'`

DB_USER=`echo $HOST | awk -F ',' '{ print $3 }'`

DB_PWD=`echo $HOST | awk -F ',' '{ print $4 }'`

DB_PORT=`echo $HOST | awk -F ',' '{ print $5 }'`

SSH_USER=`echo $HOST | awk -F ',' '{ print $6 }'`

SSH_IP=`echo $HOST | awk -F ',' '{ print $7 }'`

SSH_PWD=`echo $HOST | awk -F ',' '{ print $8 }'`

SSH_PORT=`echo $HOST | awk -F ',' '{ print $9 }'`

# 備份文件名

DUMP_FILENAME=$HOST_NAME"_"`date +%Y%m%d%H%M%S`

echo -e "\n\033[32m==>\033[0m 操作開始 "

sleep 1

echo -e "\n\033[32m==>\033[0m 登錄 ${HOST_NAME} 正式服務器,備份數據庫"

sleep 1

expect -c "

spawn ssh ${SSH_USER}@${SSH_IP} -p ${SSH_PORT}

expect {

\"yes/no\" {send \"yes\n\"; exp_continue;}

\"*assword\" { send \"${SSH_PWD}\r\n\"; exp_continue ; sleep 3; }

\"Last*\" { send_user \"\n 登錄成功 \n\";}

}

expect \"*]#\"

send \"ls ${DB_BACKUP_PATH} &>/dev/null && cd ${DB_BACKUP_PATH} || mkdir -p ${DB_BACKUP_PATH} && cd ${DB_BACKUP_PATH} \r\"

send \"mysqldump -u${DB_USER} -p${DB_PWD} -P ${DB_PORT} ${DB_NAME} > ${DUMP_FILENAME}.sql \r\"

send \"tar -zcvf ${DUMP_FILENAME}.tar.gz ${DUMP_FILENAME}.sql \r\"

send \"exit \r\"

interact

"

echo -e "\n\033[32m==>\033[0m 退出 ${HOST_NAME} 正式服務器 \n"

sleep 1

echo -e "\n\033[32m==>\033[0m 將備份文件拉取到本機 \n"

sleep 1

expect -c "

spawn scp -P $SSH_PORT $SSH_USER@$SSH_IP:$DB_BACKUP_PATH/$DUMP_FILENAME.tar.gz $BASE_PATH

expect {

\"*assword\" { send \"${SSH_PWD}\r\n\"; exp_continue ; }

}

"

echo -e "\n\033[32m==>\033[0m 操作結束,文件位置:"$BASE_PATH/$DUMP_FILENAME.tar.gz" \n"

}

# 運行

main

使用示例:

? ./mysqlDumpRemote2Local.sh

1. test ===> db_demo

請輸入序號選擇待備份的數據庫:1

==> 操作開始

==> 登錄 test 正式服務器,備份數據庫

spawn ssh root@192.168.1.127 -p 22

root@192.168.1.127's password:

Last login: Tue Nov 13 13:43:53 2018 from xxxxxxxxx

登錄成功

[root@ test ~]# ls /opt/backup &>/dev/null && cd /opt/backup || mkdir -p /opt/backup && cd /opt/backup

[root@ test backup]# mysqldump -uroot -ppwd123456 -P 3306 db_demo > test_20181113135359.sql

Warning: Using a password on the command line interface can be insecure.

[root@dbhs backup]# tar -zcvf test_20181113135359.tar.gz test_20181113135359.sql

test_20181113135359.sql

[root@dbhs backup]# exit

logout

Connection to 192.168.1.127 closed.

==> 退出 test 正式服務器

==> 將備份文件拉取到本機

spawn scp -P 22 root@192.168.1.127:/opt/backup/test_20181113135359.tar.gz /Users/xxxxx/mydev/linux-learning/shell

root@218.29.103.28's password:

test_20181113135359.tar.gz 100% 66KB 941.5KB/s 00:00

==> 操作結束,文件位置:/Users/xxxxx/mydev/linux-learning/shell/test_20181113135359.tar.gz

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534937.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534937.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534937.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

date轉timestamp格式_技術分享 | MySQL:timestamp 時區轉換導致 CPU %sy 高的問題

作者:高鵬文章末尾有他著作的《深入理解 MySQL 主從原理 32 講》,深入透徹理解 MySQL 主從,GTID 相關技術知識。本文為學習記錄,可能有誤請諒解。本文建議PC端觀看,效果更佳。這個問題是一個朋友遇到的風云&#xff0c…

mysql架構組成_第 2 章 MySQL 架構組成

麻雀雖小,五臟俱全。MySQL 雖然以簡單著稱,但其內部結構并不簡單。本章從MySQL物理組成、邏輯組成,以及相關工具幾個角度來介紹 MySQL 的整體架構組成,希望能夠讓讀者對 MySQL 有一個更全面深入的了解。2.1 MySQL物理文…

python列表生成器語法_python列表生產式和生成器

1.列表生成式:通過簡潔的語法可以對一組元素進行過濾 格式:[exp for val in collection if condition] 例子1: a [x*xforxinxrange(1,10)ifx%20] print(a) 1)append(): 該方法用于在列表末尾添加新的對象,…

win2008 mysql端口_使用自定義端口連接SQL Server 2008的方法

使用過SQL Server的人大多都知道,SQL Server服務器默認監聽的端口號是1433,但是我今天遇到的問題是我的機器上有三個數據庫實例,這樣使用TCP/IP遠程連接時就產生了問題。如何在Microsoft SQL Server Management Studio里加入端口號連接呢&…

python基本命令range_Python的Range()函數(指南)

當需要執行特定次數的操作時,Python內置的range函數十分方便。 讀罷本文,你將: 理解Python的range函數是如何工作的 了解Python 2和Python 3中的實現方式有何不同 看過了不少range()函數操作實例 有能力解決它的一些局限性 讓我們開始吧&…

天涯python_python 網絡爬蟲(一)爬取天涯論壇評論

我是一個大二的學生,也是剛接觸python,接觸了爬蟲感覺爬蟲很有趣就爬了爬天涯論壇,中途碰到了很多問題,就想把這些問題分享出來,都是些簡單的問題,希望大佬們以寬容的眼光來看一個小菜鳥😄&…

python快遞費用計算_[Python]簡單用Python寫個查詢快遞的程序最后附源代碼

[Python] 純文本查看 復制代碼from requests_html import HTMLSession session HTMLSession() def sb(dh): 用來識別快遞 返回快遞種類! url http://www.kuaidi100.com/autonumber/autoComNum?resultv21&text dh header { Referer: http://www.kuaidi100.com/, User-A…

qos的_QoS 概述

QoS 是一個很大的領域,涉及到網絡中的多個層次和環節。本文僅簡要的談談 Endpoint 側的 QoS 概念,將這些紛繁的概念名詞串起來,便于理解。QoS 技術背景下圖說明了 QoS workflow 中,各項技術的位置和關系摘自 < 端到端Q…

為什么python 為什么沒有接口_python做接口測試的必要性

什么是接口測試 接口測試主要用于檢測外部系統與內部系統之間,以及系統內部各 個子系統之間的交互點。其測試的重點是,檢查數據的交換、傳遞和控 制管理過程,以及系統間的邏輯依賴關系等。 為什么要做接口測試 1.傳統的測試方法成本急劇增加&…

路由器mysql密碼重置密碼_【驗證】mysql root密碼恢復

1.首先確認服務器出于安全的狀態,也就是沒有人能夠任意地連接MySQL數據庫。因為在重新設置MySQL的root密碼的期間,MySQL數據庫完全出于沒有密碼保護的狀態下,其他的用戶也可以任意地登錄和修改MySQL的信息。可以采用將MySQL對外的…

centos daemonize_手把手教你在centos上配置Django項目(超詳細步驟)

前言關于Django的部署,本人也踩了很多坑,這篇文章一步一步教你怎么進行部署,只需要你按照我的步驟來就OK了!這里我們使用的服務器是一個全新的服務器,沒有安裝任何東西。基礎環境搭建步驟★ 注意:下面的步驟…

mysql8.0.17壓縮包安裝教程_mysql 8.0.16 壓縮包安裝配置方法圖文教程

本文為大家分享了mysql 8.0.16 壓縮包安裝配置方法,供大家參考,具體內容如下運行環境:windows 10 x641、下載zip安裝包:mysql8.0 for windows zip包:,進入頁面后可以不用登錄。后點擊底部“no thanks, just…

python收集數據程序_基于Python語言的互聯網數據收集軟件的設計

軟件建立所需的工具及其版本 編寫環境與 IDE Python3.5.2 Windows10 PyCharm 2016.3 Sublime Text3 第三方庫與版本號 Requests 2.12.1 BeautifulSoup 4.5.1 PYQT5 5.8.1 Pyinstaller 庫的作用 用于爬蟲編寫 用于爬蟲編寫 用于軟件 GUI 設計 用于封裝 python 程序 1.1 百度地圖…

Mysql保存是事件驅動嗎_【CHRIS RICHARDSON 微服務系列】事件驅動的數據管理-5

編者的話 |本文來自 Nginx 官方博客,是「Chris Richardson 微服務」系列的第五篇文章。第一篇文章介紹了微服務架構模式,并且討論了使用微服務的優缺點;第二和第三篇描述了微服務架構模塊間通訊的不同方面;第四篇研究了服務發現中…