Centos下mysql数据库备份与恢复的方法
一、mysqldump工具備份
mysqldump由于是mysql自帶的備份工具,所以也是最常用的mysql數(shù)據(jù)庫的備份工具。支持基于InnoDB的熱備份。但由于是邏輯備份,所以速度不是很快,適合備份數(shù)據(jù)量比較小的場(chǎng)景。
mysqldump完全備份+二進(jìn)制日志 —>實(shí)現(xiàn)時(shí)間點(diǎn)恢復(fù)
溫備:
在使用MyISAM引擎中,只能使用溫備份,這時(shí)候要防止數(shù)據(jù)的寫入,所以先加上讀鎖
這時(shí)候可以進(jìn)入數(shù)據(jù)庫手動(dòng)加讀鎖。這樣比較麻煩,在mysqldump工具中直接有一個(gè)加鎖的選項(xiàng)
mysqldump --databases mydatabase --lock-all-tables --flush-logs> /tmp/backup-`date +%F-%H-%M`.sql
如果是針對(duì)某張表備份,只要在數(shù)據(jù)庫名稱后面加上表名稱就行了
這里注意,要實(shí)現(xiàn)時(shí)間點(diǎn)的恢復(fù),加上--flush-logs選項(xiàng),在使用備份文件恢復(fù)后,然后再基于二進(jìn)制日志進(jìn)行時(shí)間點(diǎn)的恢復(fù)
時(shí)間點(diǎn)的恢復(fù)方法
mysqlbinlog mysql-bin.000000x > /tmp/PointTime.sql
然后用mysql命令導(dǎo)入這個(gè)sql腳本就行了
熱備:
如果使用的是InnoDB引擎,就不必進(jìn)行對(duì)數(shù)據(jù)庫加鎖的操作,加一個(gè)選項(xiàng)既可以進(jìn)行熱備份:--single-transaction
mysqldump --databases mydb --single-transaction? --flush-logs --master-data=2 > /tmp/backup-`date +%F-%H-%M`.sql
注意點(diǎn)
恢復(fù)的時(shí)刻關(guān)閉二進(jìn)制日志
mysql>set sql_log_bin=0;
例子:
# vim /usr/work/newsbackup.sh
# //填寫以下內(nèi)容
#!/bin/bash
# Program
# use mysqldump to Fully backup? news database data per week!
#History(版本)
#? 2015-07-27 first
#path(定義目錄)
BakDir=/usr/work/mysql/backup
Days=7? #DAYS=7代表刪除7天前的備份,即只保留最近7天的備份
DelDate=` date -d -7day +%Y%m%d `?? #刪除ftp服務(wù)器空間7天前的備份
echo "You are in backup dir"
FileDate=$(date +%Y%m%d).sql.gz
echo $FileDate
cd $BakDir
File=$Date.sql
#簡(jiǎn)單的備份
#mysqldump -u root news > $FileDate
#如果使用的是InnoDB引擎,就不必進(jìn)行對(duì)數(shù)據(jù)庫加鎖的操作,加一個(gè)選項(xiàng)既可以進(jìn)行熱備份:--single-transaction
#mysqldump -u root news? --single-transaction >$FileDate
#對(duì)備份的數(shù)據(jù)繼續(xù)壓縮
mysqldump -u root news? --single-transaction |gzip >/$BakDir/$FileDate
echo "Your database backup successfully completed"
#壓縮有的數(shù)據(jù)進(jìn)行傳
echo FTP to FtpServer
ftp -ivn << EOF
#打開服務(wù)器連接
open 192.168.1.125
#用戶 密碼
user administrator zzf
#打開路徑
cd?? newsbackup
#放入文件
put? $FileDate
#把服務(wù)上7天前的數(shù)據(jù)進(jìn)行刪除
delete $DelDate.sql.tz $DelDate.sql.tz
#退出ftp服務(wù)器
bye
EOF
echo? delete $Days days ago files(刪除ftp服務(wù)器上7天前的文件)
cd $BakDir
#刪除7天前的備份文件(注意:{} \;中間有空格)
find $BakDir/ "*.sql.gz" -mtime +$Days -exec rm {} \;
?
二、基于LVM快照備份
在物理備份中 ,有基于文件系統(tǒng)的物理備份(LVM的快照),也可以直接用tar之類的命令打包。但這些只能進(jìn)行冷備份
不同的存儲(chǔ)引擎能備份的級(jí)別也不一樣,MyISAM能備份到表級(jí)別,而InnoDB不開啟每表一文件的話就只能備份整個(gè)數(shù)據(jù)庫。
下面就介紹下使用LVM的快照功能進(jìn)行備份
為了安全 首先在數(shù)據(jù)庫上施加讀鎖
mysql>FLUSH TABLES WITH READ LOCK;
刷新一下二進(jìn)制日志,便于做時(shí)間點(diǎn)恢復(fù)
mysql>FLUSH LOGS;
然后創(chuàng)建快照卷
lvcreate –L 1G –s –n data-snap –p –r /dev/myvg/mydata
最后進(jìn)入數(shù)據(jù)庫釋放讀鎖
UNLOCK TABLES;
掛載快照卷進(jìn)行備份
mount –r /dev/myvg/data-snap /mnt/snap
然后對(duì)/mnt/snap下的文件進(jìn)行打包備份
還原的時(shí)候,關(guān)閉mysqld,然后備份二進(jìn)制日志后將原來備份的文件還原進(jìn)去,然后通過二進(jìn)制日志還原到出錯(cuò)的時(shí)間點(diǎn)(通過二進(jìn)制還原時(shí)間點(diǎn)的時(shí)候不要忘了暫時(shí)關(guān)閉二進(jìn)制日志)
轉(zhuǎn)載于:https://www.cnblogs.com/running-mydream/p/4682182.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的Centos下mysql数据库备份与恢复的方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vivox23分辨率在哪里调
- 下一篇: 滴滴行程单能核实吗