电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

MySQL如何使用使用Xtrabackup進行備份和恢復

瀏覽:7日期:2023-10-01 15:37:02
目錄1 備份1.1 全備1.2 增備2 備份恢復2.1 準備數據2.2 進行恢復3 目錄結構4 備份腳本4.1 腳本4.2 配置文件5 恢復腳本5.1 腳本5.2 配置文件1 備份

進行備份前需要先創建備份用戶,直接使用 root 用戶進行備份也行,但是這樣不太規范。

create user backup@’localhost’ identified by ’123456’; grant reload,process,lock tables,replication client on *.* to backup@localhost;1.1 全備

備份整個庫,使用的是備份用戶,備份文件存放地址為 /backup/

innobackupex --defaults-file=/etc/my.cnf --user=backup --password=123456 /backup/1.2 增備

指定為增量備分,使用的是備份用戶,增量的基礎為上一次的全備,已經使用 --incremental-basedir 進行指定了,備份后存放的文件為 /backup/

innobackupex --defaults-file=/etc/my.cnf --user=backup --password=123456 --incremental --incremental-basedir=/backup/2021-06-01_14-44-54 /backup/2 備份恢復2.1 準備數據

回滾未提交的事務及同步已經提交的事務至數據文件使數據文件處于一致性狀態

innobackupex --apply-log --redo-only /backup/2021-06-01_14-44-54/2.2 進行恢復

在恢復前,需要確保 MySQL 的數據目錄為已經刪除了。

innobackupex --copy-back --datadir=/usr/local/mysql/data /backup/2021-06-01_14-44-54/

恢復后,需要對 MySQL 的data 目錄進行重新賦權:

chown -R mysql:mysql data/

到這恢復就完成了。

3 目錄結構

MySQL如何使用使用Xtrabackup進行備份和恢復

4 備份腳本4.1 腳本

backup.sh

#!/bin/bash # 獲得程序路徑名 program_dir=`dirname $0`/.. # 讀取配置文件中的所有變量值, 設置為全局變量 # 配置文件 conf_file='$program_dir/conf/backup.conf' # mysql 用戶 user=`sed ’/^user=/!d;s/.*=//’ $conf_file` # mysql 密碼 password=`sed ’/^password=/!d;s/.*=//’ $conf_file` # mysql 備份目錄 backup_dir=`sed ’/^backup_dir=/!d;s/.*=//’ $conf_file` # mysql 備份壓縮打包目錄 gzip_dir=`sed ’/^gzip_dir=/!d;s/.*=//’ $conf_file` # percona-xtrabackup命令xtrabackup路徑 xtrabackup_bin=`sed ’/^xtrabackup_bin=/!d;s/.*=//’ $conf_file` # mysql 全備前綴標識 full_backup_prefix=`sed ’/^full_backup_prefix=/!d;s/.*=//’ $conf_file` # mysql 增量備前綴標識 increment_prefix=`sed ’/^increment_prefix=/!d;s/.*=//’ $conf_file` # 備份錯誤日志文件 error_log=$program_dir/var/`sed ’/^error_log=/!d;s/.*=//’ $conf_file` # 備份索引文件 index_file=$program_dir/var/`sed ’/^index_file=/!d;s/.*=//’ $conf_file` # 備份日期 backup_date=`date +%F` # 備份時間 backup_time=`date +%H-%M-%S` # 備份時的周幾 backup_week_day=`date +%u` # 創建相關目錄 log_dir=$program_dir/log/backup var_dir=$program_dir/var mkdir -p $backup_dir mkdir -p $log_dir mkdir -p $var_dir mkdir -p $gzip_dir # 全量備份 function full_backup() { backup_folder=${full_backup_prefix}_${backup_date}_${backup_time}_${backup_week_day} mkdir -p $backup_dir/$backup_folder $xtrabackup_bin --user=$user --password=$password --backup --target-dir=$backup_dir/$backup_folder > $log_dir/${backup_folder}.log 2>&1 return $? } # 增量備份 function increment_backup() { backup_folder=${increment_prefix}_${backup_date}_${backup_time}_${backup_week_day} incr_base_folder=`sed -n ’$p’ $index_file |awk -F ’[, {}]*’ ’{print $3}’ |awk -F ’:’ ’{print $2}’` mkdir -p $backup_dir/$backup_folder $xtrabackup_bin --user=$user --password=$password --backup --target-dir=$backup_dir/$backup_folder --incremental-basedir=$backup_dir/$incr_base_folder > $log_dir/${backup_folder}.log 2>&1 return $? } # 刪除之前的備份(一般在全備完成后使用) function delete_before_backup() { cat $index_file | awk -F ’[, {}]*’ ’{print $3}’ | awk -v backup_dir=$backup_dir -F ’:’ ’{if($2!=''){printf('rm -rf %s/%sn', backup_dir, $2)}}’ | /bin/bash cat $index_file | awk -F ’[, {}]*’ ’{print $3}’ | awk -v gzip_dir=$gzip_dir -F ’:’ ’{if($2!=''){printf('rm -rf %s/%sn', gzip_dir, $2)}}’ | /bin/bash cat $index_file | awk -F ’[, {}]*’ ’{print $3}’ | awk -v log_dir=$log_dir -F ’:’ ’{if($2!=''){printf('rm -rf %s/%s.logn', log_dir, $2)}}’ | /bin/bash } # 備份索引文件 function backup_index_file() { cp $index_file ${index_file}_$(date -d '1 day ago' +%F) } # 備份索引文件 function send_index_file_to_remote() { # ./expect_scp ip地址 賬號 密碼 ${index_file} 目標服務器存放的文件夾 端口號 echo ’send index file ok’ } # 添加索引, 索引記錄了當前最新的備份 function append_index_to_file() { echo '{week_day:$backup_week_day, dir:${1}_${backup_date}_${backup_time}_${backup_week_day}, type:${1}, date:${backup_date}}' >> $index_file } # 記錄錯誤消息到文件 function logging_backup_err() { echo '{week_day:$backup_week_day, dir:${1}_${backup_date}_${backup_time}_${backup_week_day}, type:${1}, date:${backup_date}}' >> $error_log } # 清空索引 function purge_index_from_file() { > $index_file } # 清空錯誤日志信息 function purge_err_log() { > $error_log } # 打包備份 function tar_backup_file() { cd $backup_dir tar -jcf ${gzip_dir}/${1}_${backup_date}_${backup_time}_${backup_week_day}.tar.bz2${1}_${backup_date}_${backup_time}_${backup_week_day} cd - > /dev/null rm -rf ${backup_dir}/${1}_${backup_date}_${backup_time}_${backup_week_day} } # 發送備份到遠程 function send_backup_to_remote() { # ./expect_scp ip地址 賬號 密碼 ${gzip_dir}/${1}_${backup_date}_${backup_time}_${backup_week_day}.tar.bz2 目標服務器存放的文件夾 端口號 echo 'send $1 remote ok' } # 判斷是應該全備還是增量備份 # 0:full, 1:incr function get_backup_type() { backup_type=0 if [ 1 -eq `date +%H` ]; thenbackup_type=0 elsebackup_type=1 fi touch $index_file if [ ! -n '`cat $index_file`' ]; thenbackup_type=0 fi return $backup_type } # 測試配置文件正確性 function test_conf_file() { # 判斷每個變量是否在配置文件中有配置,沒有則退出程序 if [ ! -n '$user' ]; then echo ’fail: configure file user not set’; exit 2; fi if [ ! -n '$password' ]; then echo ’fail: configure file password not set’; exit 2; fi if [ ! -n '$backup_dir' ]; then echo ’fail: configure file backup_dir not set’; exit 2; fi if [ ! -n '$gzip_dir' ]; then echo ’fail: configure file backup_dir not set’; exit 2; fi if [ ! -n '$full_backup_prefix' ]; then echo ’fail: configure file full_backup_prefix not set’; exit 2; fi if [ ! -n '$increment_prefix' ]; then echo ’fail: configure file increment_prefix not set’; exit 2; fi if [ ! -n '$error_log' ]; then echo ’fail: configure file error_log not set’; exit 2; fi if [ ! -n '$index_file' ]; then echo ’fail: configure file index_file not set’; exit 2; fi } # 執行 function main() { # 檢測配置文件值 test_conf_file # 判斷是執行全備還是增量備份 get_backup_type backup_type=$? case $backup_type in0 ) # 全量備份 full_backup backup_ok=$? if [ 0 -eq '$backup_ok' ]; then # 全備成功 # 打包最新備份 tar_backup_file $full_backup_prefix # # 將tar備份發送到遠程 send_backup_to_remote $full_backup_prefix # 備份索引文件 backup_index_file # 清除之前的備份 delete_before_backup # 清除索引文件 purge_index_from_file # 添加索引, 索引記錄了當前最新的備份 append_index_to_file $full_backup_prefix # 發送索引文件到遠程 send_index_file_to_remote else # 全備失敗 # 刪除備份目錄 rm -rf ${backup_dir}/${full_backup_prefix}_${backup_date}_${backup_time}_${backup_week_day} # 記錄錯誤日志 logging_backup_err $full_backup_prefix fi ;;1 ) # 增量備份 increment_backup backup_ok=$? if [ '$backup_ok' -eq 0 ]; then # 增量備份成功 # 打包最新備份 tar_backup_file $increment_prefix # # 將tar備份發送到遠程 send_backup_to_remote $increment_prefix # 添加索引, 索引記錄了當前最新的備份 append_index_to_file $increment_prefix # # 發送索引文件到遠程 send_index_file_to_remote else # 增量備份失敗 # 刪除備份目錄 rm -rf ${backup_dir}/${increment_prefix}_${backup_date}_${backup_time}_${backup_week_day} # 記錄錯誤日志 logging_backup_err $increment_prefix fi ;; esac } main4.2 配置文件

backup.conf

# mysql 用戶名 user=backup # mysql 密碼 password=123456 # 備份路徑 backup_dir=/data/backup # 備份壓縮打包目錄 gzip_dir=/data/backups/backups_zip # innobackupex 命令路徑 xtrabackup_bin=/opt/xtrabackup/bin/xtrabackup # 全量備信息名稱 前綴 full_backup_prefix=full # 增量備信息名稱 前綴 increment_prefix=incr # 錯誤日志文件(根據此文件知道備份是否成功) # format: # {week_day:1,dir:full/incr_2015-12-29_00-00-00_7,type:full/incr,date:2015-12-30} error_log=mysql_increment_hot_backup.err # 索引文件 # format: # {week_day:1,dir:full/incr_2015-12-29_00-00-00_7,type:full/incr,date:2015-12-30} index_file=mysql_increment_hot_backup.index5 恢復腳本5.1 腳本

restore.sh

#!/bin/bash # 獲得程序路徑名 program_dir=`dirname $0`/.. # 讀取配置文件中的所有變量值, 設置為全局變量 # 配置文件 conf_file='$program_dir/conf/restore.conf' # MySQL 數據文件夾 data_dir=`sed ’/^data_dir=/!d;s/.*=//’ $conf_file` # 備份索引文件路徑 backup_index_file=`sed ’/^backup_index_file=/!d;s/.*=//’ $conf_file` # percona-xtrabackup命令xtrabackup路徑 xtrabackup_bin=`sed ’/^xtrabackup_bin=/!d;s/.*=//’ $conf_file` # 備份文件目錄 backup_restore_dir=`sed ’/^backup_restore_dir=/!d;s/.*=//’ $conf_file` # 檢查配置文件正確性 function exam_conf_file() {# 判斷每個變量是否在配置文件中有配置,沒有則退出程序if [ ! -n '$data_dir' ]; then echo ’fail: configure file data_dir not set’; exit 2; fiif [ ! -n '$backup_index_file' ]; then echo ’fail: configure file backup_index_file not set’; exit 2; fiif [ ! -n '$xtrabackup_bin' ]; then echo ’fail: configure file xtrabackup_bin not set’; exit 2; fiif [ ! -n '$backup_restore_dir' ]; then echo ’fail: configure file backup_restore_dir not set’; exit 2; fi } # 檢查備份文件是否是壓縮格式 function exam_backup_restore_file(){file_backup_restore_name_arr=`ls $backup_restore_dir`for file_name in $file_backup_restore_name_arr;do if [ '${file_name##*.}'x = 'bz2'x ];thentar -jxf $backup_restore_dir/$file_name -C $backup_restore_dirrm -rf $backup_restore_dir/$file_name fidone } # 檢查 MySQL 是否停止 function exam_mysql_is_stop(){if [ 0 -eq `ps -ef | grep mysql | grep -v grep | wc -l` ]; then echo 'MySQL 服務已停止'else /etc/init.d/mysqld stop echo '正在停止 MySQL 服務' sleep 3 echo '已停止 MySQL 服務'fi } # 檢查 MySQL data 文件是否刪除 function exam_data_is_del(){if [ -d $data_dir ];then echo '正在刪除 MySQL 的data文件' rm -rf $data_direlse echo 'MySQL 的數據文件已刪除 'fi } # 讀取備份索引文件 function read_backup_index() {cat $backup_index_file | awk ’{print $2}’ | awk -F: ’{print $2}’ | awk ’{sub(/.$/,'')}1’ } # 準備全備文件 function ready_full(){full_file_name=`echo ${1} | awk ’{print $1}’`$xtrabackup_bin/innobackupex --apply-log --redo-only $backup_restore_dir/$full_file_nameecho '全備文件已準備好' } # 準備增備文件 function ready_incr(){backup_index=$(read_backup_index)full_file_name=`echo $backup_index | awk ’{print $1}’`for file_name in $backup_index;do if [ 1 -eq `echo '$file_name' | grep incr | wc -l` ]; then $xtrabackup_bin/innobackupex --apply-log --redo-only $backup_restore_dir/$full_file_name --incremental-dir=$backup_restore_dir/$file_name fidoneecho '增備文件已準備好' } # 執行備份恢復 function exec_backup_restore(){echo '開始進行備份恢復'full_file_name=`echo ${1} | awk ’{print $1}’ `$xtrabackup_bin/innobackupex --copy-back --datadir=$data_dir $backup_restore_dir/$full_file_name } # 執行 function main() {# 檢查配置文件正確性exam_conf_file# 檢查備份文件是否是壓縮格式exam_backup_restore_file# 檢查 MySQL 是否停止exam_mysql_is_stop# 檢查 MySQL data 文件是否刪除exam_data_is_del# 讀取索引文件backup_index=$(read_backup_index)# 準備全備文件ready_full $backup_index# 準備增備文件ready_incr# 執行備份恢復exec_backup_restore $backup_index# 對數據文件進行賦權echo '重新對數據目錄賦權'chown -R mysql:mysql $data_direcho '正在啟動MySQL'/etc/init.d/mysqld startecho '備份恢復成功' } main5.2 配置文件

restore.conf

# MySQL 數據文件夾 data_dir=/opt/mysql/data #備份索引文件路徑 backup_index_file=/opt/xtrabackup/backup/var/mysql_increment_hot_backup.index #xtrabackup bin 的目錄 xtrabackup_bin=/opt/xtrabackup/bin # 備份文件目錄 backup_restore_dir=/data/backups/backups_zip

以上就是MySQL如何使用使用Xtrabackup進行備份和恢復的詳細內容,更多關于MySQL 用Xtrabackup備份和恢復的資料請關注好吧啦網其它相關文章!

標簽: MySQL 數據庫
相關文章:
主站蜘蛛池模板: 缓蚀除垢剂_循环水阻垢剂_反渗透锅炉阻垢剂_有机硫化物-郑州威大水处理材料有限公司 | 健身器材-健身器材厂家专卖-上海七诚健身器材有限公司 | 纯化水设备-纯水设备-超纯水设备-[大鹏水处理]纯水设备一站式服务商-东莞市大鹏水处理科技有限公司 | 防火板_饰面耐火板价格、厂家_品牌认准格林雅 | 数控车床-立式加工中心-多功能机床-小型车床-山东临沂金星机床有限公司 | 无线联网门锁|校园联网门锁|学校智能门锁|公租房智能门锁|保障房管理系统-KEENZY中科易安 | 深圳希玛林顺潮眼科医院(官网)│深圳眼科医院│医保定点│香港希玛林顺潮眼科中心连锁品牌 | 铝板冲孔网,不锈钢冲孔网,圆孔冲孔网板,鳄鱼嘴-鱼眼防滑板,盾构走道板-江拓数控冲孔网厂-河北江拓丝网有限公司 | LED灯杆屏_LED广告机_户外LED广告机_智慧灯杆_智慧路灯-太龙智显科技(深圳)有限公司 | 西门子代理商_西门子变频器总代理-翰粤百科 | 定制防伪标签_防伪标签印刷_防伪标签厂家-510品保防伪网 | 合肥弱电工程_安徽安防工程_智能化工程公司-合肥雷润 | 深圳富泰鑫五金_五金冲压件加工_五金配件加工_精密零件加工厂 | 青岛球场围网,青岛车间隔离网,青岛机器人围栏,青岛水源地围网,青岛围网,青岛隔离栅-青岛晟腾金属制品有限公司 | PSI渗透压仪,TPS酸度计,美国CHAI PCR仪,渗透压仪厂家_价格,微生物快速检测仪-华泰和合(北京)商贸有限公司 | 超细粉碎机|超微气流磨|气流分级机|粉体改性设备|超微粉碎设备-山东埃尔派粉碎机厂家 | 家用净水器代理批发加盟_净水机招商代理_全屋净水器定制品牌_【劳伦斯官网】 | 不锈钢/气体/液体玻璃转子流量计(防腐,选型,规格)-常州天晟热工仪表有限公司【官网】 | 卫生型双针压力表-高温防腐差压表-安徽康泰电气有限公司 | 手机游戏_热门软件app下载_好玩的安卓游戏下载基地-吾爱下载站 | 超声骨密度仪-动脉硬化检测仪器-人体成分分析仪厂家/品牌/价格_南京科力悦 | 东莞动力锂电池保护板_BMS智能软件保护板_锂电池主动均衡保护板-东莞市倡芯电子科技有限公司 | 陕西视频监控,智能安防监控,安防系统-西安鑫安5A安防工程公司 | 对辊式破碎机-对辊制砂机-双辊-双齿辊破碎机-巩义市裕顺机械制造有限公司 | PU树脂_水性聚氨酯树脂_聚氨酯固化剂_聚氨酯树脂厂家_宝景化工 | 永嘉县奥阳陶瓷阀门有限公司 | 【铜排折弯机,钢丝折弯成型机,汽车发泡钢丝折弯机,线材折弯机厂家,线材成型机,铁线折弯机】贝朗折弯机厂家_东莞市贝朗自动化设备有限公司 | 深圳APP开发公司_软件APP定制开发/外包制作-红匣子科技 | 北京模型公司-军事模型-工业模型制作-北京百艺模型沙盘公司 | 沈阳液压泵_沈阳液压阀_沈阳液压站-沈阳海德太科液压设备有限公司 | 钢结构厂房造价_钢结构厂房预算_轻钢结构厂房_山东三维钢结构公司 | 混合生育酚_醋酸生育酚粉_琥珀酸生育酚-山东新元素生物科技 | MOOG伺服阀维修,ATOS比例流量阀维修,伺服阀维修-上海纽顿液压设备有限公司 | 深圳离婚律师咨询「在线免费」华荣深圳婚姻律师事务所专办离婚纠纷案件 | 今日娱乐圈——影视剧集_八卦娱乐_明星八卦_最新娱乐八卦新闻 | 定制奶茶纸杯_定制豆浆杯_广东纸杯厂_[绿保佳]一家专业生产纸杯碗的厂家 | 组织研磨机-高通量组织研磨仪-实验室多样品组织研磨机-东方天净 传递窗_超净|洁净工作台_高效过滤器-传递窗厂家广州梓净公司 | 软文发布-新闻发布推广平台-代写文章-网络广告营销-自助发稿公司媒介星 | 盛源真空泵|空压机-浙江盛源空压机制造有限公司-【盛源官网】 | 超声骨密度仪,双能X射线骨密度仪【起草单位】,骨密度检测仪厂家 - 品源医疗(江苏)有限公司 | RV减速机-蜗轮蜗杆减速机-洗车机减速机-减速机厂家-艾思捷 |