一熟掂、了解innobackupex
1、mysqldump
- mysql邏輯備份工具骡楼,作用于服務(wù)器本地熔号,不需要額外安裝插件
- 可以單表備份,備份為sql文件形式鸟整、方便引镊,在多個(gè)場景通用
- 可通過shell命令實(shí)現(xiàn)定時(shí)備份,<font color="Red">但備份時(shí)如果用戶有操作篮条,容易造成臟數(shù)據(jù)</font>
- 將數(shù)據(jù)庫備份到服務(wù)器本地sql文件弟头,屬于邏輯備份,不受數(shù)據(jù)庫引擎限制
- 只能全量備份涉茧,恢復(fù)的話只能覆蓋原有數(shù)據(jù)赴恨,或者恢復(fù)到新的表中,再手動(dòng)處理
- 單線程伴栓,數(shù)據(jù)量大時(shí)備份耗時(shí)較長伦连,且鎖表容易引對(duì)不支持事務(wù)的表造成影響
2、mysqlhotcopy
- 需要安裝perl-DBD-mysql包钳垮,只能運(yùn)行除师、備份在服務(wù)器本地
- 文件的快速備份,屬于物理備份扔枫,恢復(fù)時(shí)只需要復(fù)制文件到目錄下替換源文件
- 只支持MyISAM引擎的MySQL數(shù)據(jù)庫備份
3汛聚、innobackupex
- 屬于物理備份,需要安裝額外的插件短荐,支持全量備份&增量備份
- 備份倚舀、恢復(fù)速度快,支持遠(yuǎn)程忍宋、并發(fā)痕貌、限速備份,支持加密傳輸?shù)奖镜?/li>
- 支持 MyISAM (會(huì)鎖表糠排,似乎不支持增量舵稠?)跟 InnoDB
二、安裝
注意innobackup版本與mysql版本,innobackup2.2不支持mysql5.7+
1哺徊、查看最新版本:https://www.percona.com/downloads/XtraBackup/LATEST/
2室琢、開始安裝
[root@localhost ~]# yum -y install 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
三、配置遠(yuǎn)程免密登錄
如果要實(shí)現(xiàn)遠(yuǎn)程備份落追,必須配置遠(yuǎn)程免密登錄盈滴,否則備份過程會(huì)沒有報(bào)錯(cuò),但是一直卡死在‘log scanned up to’轿钠,導(dǎo)致無法繼續(xù)備份
180920 17:15:39 >> log scanned up to (1023762231)
180920 17:15:40 >> log scanned up to (1023762231)
180920 17:15:41 >> log scanned up to (1023762231)
....
但如果log scanned up to后面括號(hào)中的數(shù)值有變動(dòng)巢钓,則并未卡死,仍在備份中
- 生成秘鑰疗垛,如果已經(jīng)生成過症汹,則跳過這一步
ll ~/.ssh/ //如果已有rsa文件,則是已生成
ssh-keygen -t rsa
一路回車贷腕,不需要其他信息
- 添加公鑰到遠(yuǎn)程主機(jī)
ssh-copy-id -i ~/.ssh/id_rsa.pub 用戶名@主機(jī)IP
會(huì)提示輸入遠(yuǎn)程主機(jī)用戶名對(duì)應(yīng)的密碼烈菌,必須輸入不能留空
最后會(huì)提示通過‘ssh 用戶名@IP’命令確認(rèn)是否成功開啟免密登錄
四、備份
定時(shí)備份
定時(shí)通過innobackupex備份數(shù)據(jù)庫花履、scp傳送到指定
#!/bin/bash
cd /home
if [ ! -d "crontab" ];then
mkdir crontab
else
echo "文件夾已經(jīng)存在"
fi
cd crontab
date=`date +%Y%m%d`
echo `date +%Y%m%d-%H%M`:開始備份 >> backup_db.log
echo "------ start backup db ------"
ssh root@39.108.123.165 \ "mkdir /home/backup/database/`date +%Y%m%d`"
echo `date +%Y%m%d-%H%M`:創(chuàng)建目錄-$date >> backup_db.log
innobackupex --defaults-file=/etc/my.cnf --no-lock --user 'root' --password 'password123' --stream=tar ./ | ssh root@192.1168.2.100 \ "cat - > /home/backup/database/`date +%Y%m%d`/`date +%H-%M`-backup.tar"
echo `date +%Y%m%d-%H%M`:備份結(jié)束 >> backup_db.log
echo "------ end backup db ------"
五芽世、還原
1、全量還原
1)解壓tar包到目錄/backup/full/05-00-backup中
tar -xvf 05-00-backup.tar -C /backup/full/05-00-backup
2)停止mysql服務(wù)诡壁,并移除mysql目錄下的文件济瓢,當(dāng)然可以先打包備份下以防萬一
service mysqld stop
rm -rf /var/lib/mysql/*
mysql目錄并不一定是
/var/lib/mysql/
,可以運(yùn)行innobackupex看下目錄所在
[root@localhost ~]# innobackupex
xtrabackup: recognized server arguments: --datadir=/var/lib/mysql
190116 16:37:40 innobackupex: Missing argument
可以看到--datadir=/var/lib/mysql
3)開始恢復(fù)(apply-log)妹卿,應(yīng)用備份文件旺矾,回滾未提交的事務(wù)
innobackupex --defaults-file=/etc/my.cnf --user=root --password=hello12345 --use-memory=1G --apply-log /backup/full/05-00-backup
--use-memory=1G是為了加快速度,apply-log之后目標(biāo)文件下的文件已經(jīng)準(zhǔn)備就緒
innobackupex --defaults-file=/etc/my.cnf --user=root --password=hello12345 --copy-back /backup/full/05-00-backup
4)重新設(shè)定mysql文件夾及子文件用戶群組為mysql
chown -R mysql:mysql /var/lib/mysql/
5)啟動(dòng)MySQL
service mysqld start