mysql用sql语句怎么做个脚本备份_mysql备份脚本
一、介紹兩種日志
1、redo log是InnoDB存儲(chǔ)引擎層的日志,又稱重做日志文件,用于記錄事務(wù)操作的變化,記錄的是數(shù)據(jù)修改之后的值,不管事務(wù)是否提交都會(huì)記錄下來。在實(shí)例和介質(zhì)失敗(media failure)時(shí),redo log文件就能派上用場(chǎng),如數(shù)據(jù)庫(kù)掉電,InnoDB存儲(chǔ)引擎會(huì)使用redo log恢復(fù)到掉電前的時(shí)刻,以此來保證數(shù)據(jù)的完整性。
在一條更新語(yǔ)句進(jìn)行執(zhí)行的時(shí)候,InnoDB引擎會(huì)把更新記錄寫到redo log日志中,然后更新內(nèi)存,此時(shí)算是語(yǔ)句執(zhí)行完了,然后在空閑的時(shí)候或者是按照設(shè)定的更新策略將redo log中的內(nèi)容更新到磁盤中,這里涉及到WAL即Write Ahead logging技術(shù),他的關(guān)鍵點(diǎn)是先寫日志,再寫磁盤。
有了redo log日志,那么在數(shù)據(jù)庫(kù)進(jìn)行異常重啟的時(shí)候,可以根據(jù)redo log日志進(jìn)行恢復(fù),也就達(dá)到了crash-safe。
redo log日志的大小是固定的,即記錄滿了以后就從頭循環(huán)寫。
2、binlog是屬于MySQL Server層面的,又稱為歸檔日志,屬于邏輯日志,是以二進(jìn)制的形式記錄的是這個(gè)語(yǔ)句的原始邏輯,依靠binlog是沒有crash-safe能力的
3、區(qū)別:
redo log是屬于innoDB層面,binlog屬于MySQL Server層面的,這樣在數(shù)據(jù)庫(kù)用別的存儲(chǔ)引擎時(shí)可以達(dá)到一致性的要求。
redo log是物理日志,記錄該數(shù)據(jù)頁(yè)更新的內(nèi)容;binlog是邏輯日志,記錄的是這個(gè)更新語(yǔ)句的原始邏輯
redo log是循環(huán)寫,日志空間大小固定;binlog是追加寫,是指一份寫到一定大小的時(shí)候會(huì)更換下一個(gè)文件,不會(huì)覆蓋。
binlog可以作為恢復(fù)數(shù)據(jù)使用,主從復(fù)制搭建,redo log作為異常宕機(jī)或者介質(zhì)故障后的數(shù)據(jù)恢復(fù)使用。
二、xtra+binlog增量備份腳本
1、特點(diǎn)
mysqldump優(yōu)點(diǎn):mysqldump的優(yōu)點(diǎn)就是邏輯備份,把數(shù)據(jù)生成SQL形式保存,在單庫(kù),單表數(shù)據(jù)遷移,備份恢復(fù)等場(chǎng)景方便,SQL形式的備份文件通用,也方便在不同數(shù)據(jù)庫(kù)之間移植。對(duì)于InnoDB表可以在線備份。
mysqldump缺點(diǎn):mysqldump是單線程,數(shù)據(jù)量大的時(shí)候,備份時(shí)間長(zhǎng),甚至有可能在備份過程中非事務(wù)表長(zhǎng)期鎖表對(duì)業(yè)務(wù)造成影響(SQL形式的備份恢復(fù)時(shí)間也比較長(zhǎng))。mysqldump備份時(shí)會(huì)查詢所有的數(shù)據(jù),這可能會(huì)把內(nèi)存中的熱點(diǎn)數(shù)據(jù)刷掉
innobackupex優(yōu)點(diǎn):物理備份可以繞過MySQL Server層,加上本身就是文件系統(tǒng)級(jí)別的備份,備份速度塊,恢復(fù)速度快,可以在線備份,支持并發(fā)備份,支持加密傳輸,支持備份限速
innobackupex缺點(diǎn):要提取部分庫(kù)表數(shù)據(jù)比較麻煩,不能按照基于時(shí)間點(diǎn)來恢復(fù)數(shù)據(jù),并且不能遠(yuǎn)程備份,只能本地備份,增量備份的恢復(fù)也比較麻煩。如果使用innobackupex的全備+binlog增量備份就可以解決基于時(shí)間點(diǎn)恢復(fù)的問題。
2、備份策略
根據(jù)需求,使用innobackupex全備份+innobackupex增量備份+binlog方式進(jìn)行備份。
在出現(xiàn)問題時(shí)使用innobackupex快速的恢復(fù)
3、環(huán)境準(zhǔn)備
開啟binlog
編輯/etc/my.cnf文件添加在[mysqld]版塊下添加如下變量,添加后重啟服務(wù)。
#開啟,并且可以將mysql-bin改為其它的日志名
log-bin=mysql-bin
#添加id號(hào),如果做主從,就不能一樣
server-id=1#超過200M將生產(chǎn)新的文件,最大和默認(rèn)值是1GB
max_binlog_size=1G
#此參數(shù)表示binlog使用最大內(nèi)存的數(shù),默認(rèn)1M。
max_binlog_cache_size=1M
#此參數(shù)表示binlog日志保留的時(shí)間,默認(rèn)單位是天。
expire_logs_days=7
創(chuàng)建授權(quán)用戶
create user 'back'@'localhost' identified by '123456';
grant reload,lock tables,replication client,create tablespace,process,super on*.* to 'back'@'localhost';
grant create,insert,select on percona_schema.* to 'back'@'localhost';
安裝innobackupex
1.安裝依賴yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL libev-devel2.下載安裝wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.12/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm
yum -y install percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm
三.添加腳本
全量備份
創(chuàng)建備份目錄mkdir -p /root/binmkdir -p /bak/mysql-xback
編寫腳本,要指定備份命令的賬號(hào)和密碼
vim/root/bin/mybak-all.sh#!/bin/bash
#全量備份,只備份一次
#指定備份目錄
backup_dir="/bak/mysql-xback"#檢查
[[-d ${backup_dir} ]] || mkdir -p ${backup_dir}if [[ -d ${backup_dir}/all-backup ]];then
echo "全備份已存在"exit1
fi#命令,需要設(shè)置
innobackupex--defaults-file=/etc/my.cnf --user=back --password='123456' --no-timestamp ${backup_dir}/all-backup &> /tmp/mysql-backup.logtail -n 1 /tmp/mysql-backup.log | grep 'completed OK!'
if [[ $? -eq 0 ]];then
echo "all-backup" > /tmp/mysql-backup.txtelse
echo "備份失敗"exit1
fi
增量備份
編寫腳本,要指定備份目錄
vim/root/bin/mybak-section.sh#!/bin/bash
#增量備份
#備份目錄
backup_dir="/bak/mysql-xback"#新舊備份
old_dir=`cat /tmp/mysql-backup.txt`
new_dir=`date +%F-%H-%M-%S`
#檢查if [[ ! -d ${backup_dir}/all-backup ]];then
echo "還未全量備份"exit1
fi#命令/usr/bin/innobackupex --user=back --password='123456' --no-timestamp --incremental --incremental-basedir=${backup_dir}/${old_dir} ${backup_dir}/${new_dir} &> /tmp/mysql-backup.logtail -n 1 /tmp/mysql-backup.log | grep 'completed OK!'
if [[ $? -eq 0 ]];then
echo "${new_dir}" > /tmp/mysql-backup.txtelse
echo "備份失敗"exit1
fi
binlog
創(chuàng)建備份目錄mkdir -p /bak/mysql-binback
用于單點(diǎn),備份binlog,要指定備份目錄位置和其它變量
vim/root/bin/mybak-binlog.sh#!/bin/bash
#
# 注意:執(zhí)行腳本前修改腳本中的變量
# 功能:cp方式增量備份
#
# 適用:centos6+# 語(yǔ)言:中文
#
#使用:./xx.sh -uroot -p'123456',將第一次增量備份后的binlog文件名寫到/tmp/binlog-section中,若都沒有,自動(dòng)填寫mysql-bin.000001#過程:增量先刷新binlog日志,再查詢/tmp/binlog-section中記錄的上一次備份中最新的binlog日志的值
# cp中間的binlog日志,并進(jìn)行壓縮。再將備份中最新的binlog日志寫入。
#恢復(fù):先進(jìn)行全量恢復(fù),再根據(jù)全量備份附帶的time-binlog.txt中的記錄逐個(gè)恢復(fù)。當(dāng)前最新的Binlog日志要去掉有問題的語(yǔ)句,例如drop等。
#[變量]
#mysql這個(gè)命令所在絕對(duì)路徑
my_sql="/usr/local/mysql/bin/mysql"#mysqldump命令所在絕對(duì)路徑
bak_sql="/usr/local/mysql/bin/mysqldump"#binlog日志所在目錄
binlog_dir=/usr/local/mysql/data
#mysql-bin.index文件所在位置
binlog_index=${binlog_dir}/mysql-bin.index
#備份到哪個(gè)目錄
bak_dir=/bak/mysql-binback
#這個(gè)腳本的日志輸出到哪個(gè)文件
log_dir=/tmp/mybak-binlog.log
#保存的天數(shù),4周就是28天
save_day=10#[自動(dòng)變量]
#當(dāng)前年
date_nian=`date +%Y-`
begin_time=`date +%F-%H-%M-%S`
#所有天數(shù)的數(shù)組
save_day_zu=($(for i in `seq 1 ${save_day}`;do date -d -${i}days "+%F";done))
#開始/usr/bin/echo >>${log_dir}/usr/bin/echo "time:$(date +%F-%H-%M-%S) info:開始增量備份" >>${log_dir}
#檢查
${my_sql} $* -e "show databases;" &> /tmp/info_error.txtif [[ $? -ne 0 ]];then
/usr/bin/echo "time:$(date +%F-%H-%M-%S) info:登陸命令錯(cuò)誤" >>${log_dir}/usr/bin/cat /tmp/info_error.txt #如果錯(cuò)誤則顯示錯(cuò)誤信息
exit1
fi#移動(dòng)到目錄
cd ${bak_dir}
bak_time=`date +%F-%H-%M`
bak_timetwo=`date +%F`
#刷新
${my_sql} $* -e "flush logs"
if [[ $? -ne 0 ]];then
/usr/bin/echo "time:$(date +%F-%H-%M-%S) error:刷新binlog失敗" >>${log_dir}
exit1
fi#獲取開頭和結(jié)尾binlog名字
last_bin=`cat /tmp/binlog-section`
next_bin=`tail -n 1 ${binlog_dir}/mysql-bin.index`echo ${last_bin} |grep 'mysql-bin' &> /dev/null
if [[ $? -ne 0 ]];then
echo "mysql-bin.000001" > /tmp/binlog-section #不存在則默認(rèn)第一個(gè)
last_bin=`cat /tmp/binlog-section`fi#截取需要備份的binlog行數(shù)
a=`/usr/bin/sort ${binlog_dir}/mysql-bin.index | uniq | grep -n ${last_bin} | awk -F':' '{print $1}'`
b=`/usr/bin/sort ${binlog_dir}/mysql-bin.index | uniq | grep -n ${next_bin} | awk -F':' '{print $1}'`
let b--#輸出最新節(jié)點(diǎn)/usr/bin/echo "${next_bin}" > /tmp/binlog-section
#創(chuàng)建文件rm -rf mybak-section-${bak_time}/usr/bin/mkdir mybak-section-${bak_time}for i in `sed -n "${a},${b}p" ${binlog_dir}/mysql-bin.index | awk -F'./' '{print $2}'`do
if [[ ! -f ${binlog_dir}/${i} ]];then
/usr/bin/echo "time:$(date +%F-%H-%M-%S) error:binlog文件${i} 不存在" >>${log_dir}
exit1
fi
cp -rf ${binlog_dir}/${i} mybak-section-${bak_time}/
if [[ ! -f mybak-section-${bak_time}/${i} ]];then
/usr/bin/echo "time:$(date +%F-%H-%M-%S) error:binlog文件${i} 備份失敗" >>${log_dir}
exit1
fi
done#壓縮if [[ -f mybak-section-${bak_time}.tar.gz ]];then
/usr/bin/echo "time:$(date +%F-%H-%M-%S) info:壓縮包mybak-section-${bak_time}.tar.gz 已存在" >>${log_dir}/usr/bin/rm -irf mybak-section-${bak_time}.tar.gzfi
/usr/bin/tar -cf mybak-section-${bak_time}.tar.gz mybak-section-${bak_time}if [[ $? -ne 0 ]];then
/usr/bin/echo "time:$(date +%F-%H-%M-%S) error:壓縮失敗" >>${log_dir}
exit1
fi#刪除binlog文件夾/usr/bin/rm -irf mybak-section-${bak_time}if [[ $? -ne 0 ]];then
/usr/bin/echo "time:$(date +%F-%H-%M-%S) info:刪除sql文件失敗" >>${log_dir}
exit1
fi#整理壓縮的日志文件for i in `ls | grep "^mybak-section.*tar.gz$"`do
echo $i | grep ${date_nian} &> /dev/null
if [[ $? -eq 0 ]];thena=`echo ${i%%.tar.gz}`
b=`echo ${a:(-16)}` #當(dāng)前日志年月日
c=`echo ${b%-*}`
d=`echo ${c%-*}`
#看是否在數(shù)組中,不在其中,并且不是當(dāng)前時(shí)間,則刪除。echo ${save_day_zu[*]} |grep -w $d &> /dev/null
if [[ $? -ne 0 ]];then[["$d" != "$bak_timetwo" ]] && rm -rf $ifi
else#不是當(dāng)月的,其他類型壓縮包,跳過
continuefi
done#結(jié)束
last_time=`date +%F-%H-%M-%S`/usr/bin/echo "begin_time:${begin_time} last_time:${last_time}" >>${log_dir}/usr/bin/echo "time:$(date +%F-%H-%M-%S) info:增量備份完成" >>${log_dir}/usr/bin/echo >>${log_dir}
用于主從,備份relay-bin,要指定備份目錄位置和其它變量
vim/root/bin/mybak-binlog.sh#!/bin/bash
#
# 注意:執(zhí)行腳本前修改腳本中的變量
# 功能:cp方式增量備份
#
# 適用:centos6+# 語(yǔ)言:中文
#
#使用:./xx.sh -uroot -p'123456'#[變量]
#mysql這個(gè)命令所在絕對(duì)路徑
my_sql="/usr/local/mysql/bin/mysql"#mysqldump命令所在絕對(duì)路徑
bak_sql="/usr/local/mysql/bin/mysqldump"#binlog日志所在目錄
binlog_dir=/usr/local/mysql/data
#mysql-bin.index文件所在位置
binlog_index=${binlog_dir}/mysql-bin.index
#備份到哪個(gè)目錄
bak_dir=/bak/mysql-binback
#這個(gè)腳本的日志輸出到哪個(gè)文件
log_dir=/tmp/mybak-binlog.log
#保存的天數(shù),4周就是28天
save_day=10#[自動(dòng)變量]
#當(dāng)前年
date_nian=`date +%Y-`
begin_time=`date +%F-%H-%M-%S`
#所有天數(shù)的數(shù)組
save_day_zu=($(for i in `seq 1 ${save_day}`;do date -d -${i}days "+%F";done))
#開始/usr/bin/echo >>${log_dir}/usr/bin/echo "time:$(date +%F-%H-%M-%S) info:開始增量備份" >>${log_dir}
#檢查
${my_sql} $* -e "show databases;" &> /tmp/info_error.txtif [[ $? -ne 0 ]];then
/usr/bin/echo "time:$(date +%F-%H-%M-%S) info:登陸命令錯(cuò)誤" >>${log_dir}/usr/bin/cat /tmp/info_error.txt #如果錯(cuò)誤則顯示錯(cuò)誤信息
exit1
fi#移動(dòng)到目錄
cd ${bak_dir}
bak_time=`date +%F-%H-%M`
bak_timetwo=`date +%F`
#創(chuàng)建文件rm -rf mybak-section-${bak_time}/usr/bin/mkdir mybak-section-${bak_time}for i in `ls ${binlog_dir}| grep relay-bin`do
cp -rf ${binlog_dir}/${i} mybak-section-${bak_time}/
if [[ ! -f mybak-section-${bak_time}/${i} ]];then
/usr/bin/echo "time:$(date +%F-%H-%M-%S) error:binlog文件${i} 備份失敗" >>${log_dir}
exit1
fi
done#壓縮if [[ -f mybak-section-${bak_time}.tar.gz ]];then
/usr/bin/echo "time:$(date +%F-%H-%M-%S) info:壓縮包mybak-section-${bak_time}.tar.gz 已存在" >>${log_dir}/usr/bin/rm -irf mybak-section-${bak_time}.tar.gzfi
/usr/bin/tar -cf mybak-section-${bak_time}.tar.gz mybak-section-${bak_time}if [[ $? -ne 0 ]];then
/usr/bin/echo "time:$(date +%F-%H-%M-%S) error:壓縮失敗" >>${log_dir}
exit1
fi#刪除binlog文件夾/usr/bin/rm -irf mybak-section-${bak_time}if [[ $? -ne 0 ]];then
/usr/bin/echo "time:$(date +%F-%H-%M-%S) info:刪除sql文件失敗" >>${log_dir}
exit1
fi#整理壓縮的日志文件for i in `ls | grep "^mybak-section.*tar.gz$"`do
echo $i | grep ${date_nian} &> /dev/null
if [[ $? -eq 0 ]];thena=`echo ${i%%.tar.gz}`
b=`echo ${a:(-16)}` #當(dāng)前日志年月日
c=`echo ${b%-*}`
d=`echo ${c%-*}`
#看是否在數(shù)組中,不在其中,并且不是當(dāng)前時(shí)間,則刪除。echo ${save_day_zu[*]} |grep -w $d &> /dev/null
if [[ $? -ne 0 ]];then[["$d" != "$bak_timetwo" ]] && rm -rf $ifi
else#不是當(dāng)月的,其他類型壓縮包,跳過
continuefi
done#結(jié)束
last_time=`date +%F-%H-%M-%S`/usr/bin/echo "begin_time:${begin_time} last_time:${last_time}" >>${log_dir}/usr/bin/echo "time:$(date +%F-%H-%M-%S) info:增量備份完成" >>${log_dir}/usr/bin/echo >> ${log_dir}
重寫備份
創(chuàng)建備份目錄mkdir -p /bak/xback
編寫腳本,要指定備份目錄位置
vim/root/bin/mybak-rewrite.sh#!/bin/bash
#xbak備份腳本
#每周六執(zhí)行一次
#10 4 * * 6 /bin/bash /root/bin/mybak-rewrite.sh#清理并備份
[[-d /bak/xback ]] || mkdir -p /bak/xback
cd/bak/xbackrm -rf *.tar.gz
[[-d bak/mysql-xback ]] || echo "bak-dir not found"cd/bak/mysql-xbacktar -cf XtraBackup.tar.gz *
mv XtraBackup.tar.gz /bak/xbackrm -rf /bak/mysql-xback/*#全備份一次
bash /root/bin/mybak-all.sh
備份周期
添加權(quán)限chmod +x /root/bin/*先進(jìn)行一次innobackupex全量備份,后面的增量均在全量的基礎(chǔ)上備份。
bash /root/bin/mybak-all.sh
每天2點(diǎn)進(jìn)行一次innobackupex增量備份+binlog日志備份
每周4點(diǎn)將之前的innobackupex備份打包,并啟動(dòng)新的全量備份
crontab -e
30 2 * * * /bin/bash /root/bin/mybak-binlog.sh -uback -p'123456'
40 2 * * * /bin/bash /root/bin/mybak-section.sh
10 4 * * 6 /bin/bash /root/bin/mybak-rewrite.sh
四.容災(zāi)測(cè)試
寫入測(cè)試數(shù)據(jù)
創(chuàng)建腳本,腳本將創(chuàng)建一個(gè)single庫(kù),s1表,持續(xù)寫入數(shù)據(jù)。
vim/root/bin/mysql_test.sh#!/bin/bash
#混合測(cè)試數(shù)據(jù)庫(kù)腳本
#將創(chuàng)建一個(gè)single數(shù)據(jù)庫(kù),其中創(chuàng)建一個(gè)s1表
#如果數(shù)據(jù)庫(kù)存在,將會(huì)寫入數(shù)據(jù),可以在寫入部分sleep1來讓數(shù)據(jù)持續(xù)寫入
#使用方法 ./xx.sh -uroot -p'123456'#檢查
mysql $* -e "show databases;" &> /tmp/info_error.txtif [[ $? -ne 0 ]];then
echo "time:$(date +%F-%H-%M-%S) info:登陸命令錯(cuò)誤"
cat /tmp/info_error.txt #如果錯(cuò)誤則顯示錯(cuò)誤信息echo
echo "./xx.sh -uroot -p'123456'"exit1
fi#檢查庫(kù)是否存在
mysql $* -e "use single;" &> /tmp/info_error.txtif [[ $? -eq 0 ]];thenmysql $* -e "use single;select * from s1 where id=1;"
if [[ $? -ne 0 ]];thenmysql $* -e "use single;drop table s1;"mysql $* -e "use single;create table s1(id int AUTO_INCREMENT PRIMARY KEY,name char(20),age int);"
fi
elsemysql $* -e "create database single;"mysql $* -e "use single;create table s1(id int AUTO_INCREMENT PRIMARY KEY,name char(20),age int);"
fi#name隨機(jī)數(shù)
random_name() {
local zu=(q we r t y u i o p a s d f g h j k l z x c v b n m)for i in `seq 1 5`dolocal a=`echo $[RANDOM%24]`echo -n ${zu[a]}done}
#age隨機(jī)數(shù)
random_age() {
local a=`echo $[RANDOM%99]`echo$a
}
#寫入部分for i in `seq 1 1000`dob=`random_name`
c=`random_age`sleep 2mysql $* -e "use single;insert into s1(name,age) values('${b}',${c});"
done執(zhí)行腳本,持續(xù)寫入測(cè)試數(shù)據(jù)
bash/root/bin/mysql_test.sh -uroot -p'123456'
模擬備份
1.開啟另一個(gè)終端,檢查數(shù)據(jù)是否在寫入
mysql-uroot -p'123456' -e "use single;select count(*) from s1;"
2.進(jìn)行全備份,返回ok正確
cd/root/bin
bash mybak-all.sh
3.模擬第一天晚上,因?yàn)樵诔掷m(xù)寫入數(shù)據(jù),等一會(huì)再進(jìn)行增量備份,并備份binlog
bash mybak-section.shbash mybak-binlog.sh -uback -p'123456'
4.等一會(huì),模擬第二天晚上
bash mybak-section.shbash mybak-binlog.sh -uback -p'123456'
錯(cuò)誤恢復(fù)
1.模擬出現(xiàn)問題了,停止寫入
ctl+c2.查看當(dāng)前總數(shù)據(jù),為129條
mysql-uroot -p'123456' -e "use single;select count(*) from s1;"
3.模擬誤刪除數(shù)據(jù)庫(kù)
mysql-uroot -p'123456' -e "drop database single;"
4.對(duì)最新的狀態(tài)備份binlog
bash mybak-binlog.sh -uback -p'123456'
5.關(guān)閉mysql
systemctl stop mysql6.刪除數(shù)據(jù)目錄,否則無法恢復(fù)rm -fr /usr/local/mysql/data/*7.對(duì)全備份進(jìn)行封裝,返回ok正確
innobackupex --apply-log --redo-only /bak/mysql-xback/all-backup/
8.合并第一次模擬到全備份,最后一個(gè)參數(shù)是指定全備份
innobackupex --apply-log --redo-only --incremental-dir=/bak/mysql-xback/2018-12-12-14-51-26/ /bak/mysql-xback/all-backup/
9.合并第二次模擬到全備份
innobackupex --apply-log --redo-only --incremental-dir=/bak/mysql-xback/2018-12-12-14-52-47/ /bak/mysql-xback/all-backup/
10.開始恢復(fù)
innobackupex --copy-back /bak/mysql-xback/all-backup/
11.添加權(quán)限并啟動(dòng)
chown -R mysql.mysql /usr/local/mysql/data/
systemctl start mysql
12.查看數(shù)據(jù)恢復(fù)到125條,正常前是129條
mysql -uroot -p'123456' -e "use single;select count(*) from s1;"
13.查看備份時(shí)的pos點(diǎn)
cat /bak/mysql-xback/2018-12-12-14-52-47/xtrabackup_info | grep binlog_pos
顯示如下
binlog_pos = filename ‘mysql-bin.000003’, position ‘1509’
14.解壓最后2個(gè)binlog壓縮包
cd /bak/mysql-binback/
tar -xf mybak-section-2018-12-12-15-07.tar.gz
tar -xf mybak-section-2018-12-12-15-15.tar.gz
15.進(jìn)入第二個(gè)包,它是在最后一次增量備份后才執(zhí)行的binlog
cd mybak-section-2018-12-12-15-07
將1509pos點(diǎn)之前的行刪除,每個(gè)binlog文件前18行要保留
mysqlbinlog mysql-bin.000003 > 03.log
cat 03.log | grep -n 1509
恢復(fù)數(shù)據(jù)
cat 03.log | mysql -uroot -p'123456'
當(dāng)前總是為128
mysql -uroot -p'123456' -e "use single;select count(*) from s1;"
16.進(jìn)入倒數(shù)第一個(gè)包,它存放出問題之前的數(shù)據(jù)
cd mybak-section-2018-12-12-15-15
將drop這個(gè)有問題的指令之后的行刪除
mysqlbinlog mysql-bin.000004 > 04.log
cat 04.log | grep -n drop
恢復(fù)數(shù)據(jù)
cat 04.log | mysql -uroot -p'123456'
當(dāng)前總是為129
mysql -uroot -p'123456' -e "use single;select count(*) from s1;"
五.重寫測(cè)試
進(jìn)入到腳本目錄
cd/root/bin
執(zhí)行重寫腳本
bash mybak-rewrite.sh可以看到原先目錄只有一個(gè)全備份ls /bak/mysql-xback/原先的全備份和增量備份的打包ls -lh /bak/xback/
總結(jié)
以上是生活随笔為你收集整理的mysql用sql语句怎么做个脚本备份_mysql备份脚本的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue 接口数据排序_Vue 使用 ax
- 下一篇: python车辆轨迹分析_Ngsim数据