mysql數(shù)據(jù)庫異地備份的倆種思路與實(shí)踐

一账胧、直連數(shù)據(jù)庫備份
1比藻、使用navicat進(jìn)行定時(shí)備份
這種備份方法詳見http://tech.huweishen.com/gongju/1182.html赔硫,該方法在windows和centos中都可以實(shí)現(xiàn)伞梯,直接連接數(shù)據(jù)庫進(jìn)行定時(shí)備份蛛蒙。
2衣式、在centos下使用腳本文件進(jìn)行備份
以下腳本測試可以實(shí)現(xiàn)備份寸士,參考http://www.jb51.net/article/84514.htm實(shí)現(xiàn)

!/bin/sh

BACKUP_BIN=/usr/bin/mysqlbinlog
LOCAL_BACKUP_DIR=/opt/mysql_log_data/mysqllog
BACKUP_LOG=/opt/mysql_log_data/baklog
REMOTE_HOST=...
REMOTE_PORT=端口號
REMOTE_USER=用戶名
REMOTE_PASS=用戶密碼
FIRST_BINLOG=logbin.000001

time to wait before reconnecting after failure

SLEEP_SECONDS=10

create local_backup_dir if necessary

mkdir -p ${LOCAL_BACKUP_DIR}
cd ${LOCAL_BACKUP_DIR}

運(yùn)行while循環(huán),連接斷開后等待指定時(shí)間碴卧,重新連接

while :
do
if [ ls -A "${LOCAL_BACKUP_DIR}" |wc -l -eq 0 ];then
LAST_FILE=${FIRST_BINLOG}
else
LAST_FILE=ls -l ${LOCAL_BACKUP_DIR} | grep -v backuplog |tail -n 1 |awk '{print $9}'
fi
${BACKUP_BIN} --raw --read-from-remote-server --stop-never --host=${REMOTE_HOST} --port=${REMOTE_PORT} --user=${REMOTE_USER} --password=${REMOTE_PASS} ${LAST_FILE}
echo "date +"%Y/%m/%d %H:%M:%S" mysqlbinlog停止弱卡,返回代碼:$?" | tee -a ${BACKUP_LOG}
echo "${SLEEP_SECONDS}秒后再次連接并繼續(xù)備份" | tee -a ${BACKUP_LOG}
sleep ${SLEEP_SECONDS}
done
3、缺點(diǎn):
個(gè)人認(rèn)為這種方法最顯著的缺點(diǎn)就是:數(shù)據(jù)庫直接暴露在公網(wǎng)環(huán)境中螟深,實(shí)際的生產(chǎn)環(huán)境是不允許的谐宙。
二、間接拷貝備份文件(詳細(xì)介紹這種思路)
1界弧、開啟mysql的binlog日志文件
修改mysql的my.cnf(Linux)或者my.ini(Windows)文件凡蜻,添加如下內(nèi)容
[mysqld]

skip-grant-tables

lower_case_table_names = 1 #大小寫不敏感
log-bin = logbin.log #log-bin若不顯示制定存儲目錄,則默認(rèn)存儲在mysql的data目錄下
log-bin-index = logindex
expire_logs_days = 7#日志保留天數(shù)為七天
server-id=1 #在設(shè)置log-bin的同時(shí)需要設(shè)置server-id,否則會報(bào)錯(cuò)
binlog_format=row #row基于行的存儲,啟動后會產(chǎn)生mysql-bin.*這樣的文件,每啟動一次就會增加一個(gè)


重啟mysql--systemctl restart mysqld
進(jìn)入mysql中查看日志文件是否開啟-show variables like '%log_bin%';
彈出以下內(nèi)容:
+---------------------------------+-------------------------------+
| Variable_name | Value |
+---------------------------------+-------------------------------+
| log_bin | ON |
| log_bin_basename | /var/lib/mysql/logbin |
| log_bin_index | /var/lib/mysql/logindex.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+-------------------------------+
log_bin_basename和log_bin_index屬性是可以修改垢箕,上述是默認(rèn)位置
修改只需在/etc/my.cnf中l(wèi)og-bin = logbin.log 和log-bin-index = logindex加入絕對路徑即可划栓;
2、做一次全量備份
mysqldump -h IP地址 -P端口號 -u用戶 -p密碼 --databases 數(shù)據(jù)庫名稱> /opt/mysql_log_data/date +%Y%m%d.sql
3条获、定時(shí)做增量備份

!/bin/bash

export LANG=en_US.UTF-8
BakDir=本地路勁
BinDir=/var/lib/mysql
LogFile=logbin文件的存放路徑忠荞,具體看你設(shè)置為多少
BinFile=logindex.logindex路徑
mysqladmin -u用戶名-p密碼 flush-logs

這個(gè)是用于產(chǎn)生新的mysql-bin.00000*文件,必須使用mysqladmin

Counter=wc -l $BinFile |awk '{print $1}'
NextNum=0

這個(gè)for循環(huán)用于比對$Counter,$NextNum這兩個(gè)值來確定文件是不是存在或最新的。

for file in cat $BinFile
do
base=basename $file
#basename用于截取mysql-bin.00000*文件名帅掘,去掉./mysql-bin.000005前面的./
NextNum=expr $NextNum + 1
if [ $NextNum -eq $Counter ]
then
echo $base skip! >> $LogFile
else
dest=$BakDir/$base
if(test -e $dest)
#test -e用于檢測目標(biāo)文件是否存在委煤,存在就寫exist!到$LogFile去。
then
echo $base exist! >> $LogFile
else
cp $BinDir/$base $BakDir
echo $base copying >> $LogFile
fi
fi
done
echo date +"%Y年%m月%d日 %H:%M:%S" Bakup succussful! >> $LogFile


開啟定時(shí)器vim /etc/crontab
加入腳本文件的執(zhí)行
00 00 * * * 腳本文件路徑 >/dev/null 2>&1
定時(shí)器的設(shè)置詳見https://www.cnblogs.com/wt645631686/p/6868672.html
開啟定時(shí)器crontab /etc/crontab
查看定時(shí)器 crontab -l
4修档、安裝expect ---yum -install expect
5碧绞、寫scp拷貝腳本(需要首先安裝ssh服務(wù),并配置端口)

!/usr/bin/expect

set timeout 100
set password "密碼"
spawn scp -r -P 端口root@IP地址:目標(biāo)文件夾/. 本地文件夾
expect "終端提示要輸入密碼的前面內(nèi)容"
send "$password\n"
interact


6吱窝、寫定時(shí)執(zhí)行scp拷貝腳本(因?yàn)閟ource sh執(zhí)行出錯(cuò))

!/bin/sh

cd scp存放的絕對路徑
./腳本名稱
加入定時(shí)器
完成以上6步就實(shí)現(xiàn)了遠(yuǎn)程數(shù)據(jù)庫的備份讥邻,這種基于ssh的備份是相對安全的
歡迎批評指正

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市院峡,隨后出現(xiàn)的幾起案子兴使,更是在濱河造成了極大的恐慌,老刑警劉巖照激,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件发魄,死亡現(xiàn)場離奇詭異,居然都是意外死亡俩垃,警方通過查閱死者的電腦和手機(jī)欠母,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門欢策,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赏淌,你說我怎么就攤上這事∽那澹” “怎么了六水?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長辣卒。 經(jīng)常有香客問我掷贾,道長,這世上最難降的妖魔是什么荣茫? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任想帅,我火速辦了婚禮,結(jié)果婚禮上啡莉,老公的妹妹穿的比我還像新娘港准。我一直安慰自己,他們只是感情好咧欣,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布浅缸。 她就那樣靜靜地躺著,像睡著了一般魄咕。 火紅的嫁衣襯著肌膚如雪衩椒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天哮兰,我揣著相機(jī)與錄音毛萌,去河邊找鬼。 笑死喝滞,一個(gè)胖子當(dāng)著我的面吹牛阁将,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播囤躁,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼冀痕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了狸演?” 一聲冷哼從身側(cè)響起言蛇,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宵距,沒想到半個(gè)月后腊尚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡满哪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年婿斥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了劝篷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡民宿,死狀恐怖娇妓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情活鹰,我是刑警寧澤哈恰,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站志群,受9級特大地震影響着绷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜锌云,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一荠医、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧桑涎,春花似錦彬向、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至讲衫,卻和暖如春缕棵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背涉兽。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工招驴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人枷畏。 一個(gè)月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓别厘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拥诡。 傳聞我的和親對象是個(gè)殘疾皇子触趴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 這幾日濟(jì)南的天空格外的藍(lán),云朵亦被襯托成近似于透明的白渴肉,有時(shí)一天的忙碌過后可能還留有余熱冗懦,趁著還未...
    微微安0902閱讀 384評論 0 2