一、關(guān)于備份
1.備份原因
丟/刪
2.備份目標(biāo)
1.數(shù)據(jù)的一致性
2.服務(wù)的可用性
3.備份技術(shù)
3.1物理備份/冷備份
直接復(fù)制數(shù)據(jù)庫文件,適用于大型數(shù)據(jù)庫環(huán)境,不受存儲(chǔ)引擎的限制,但不能恢復(fù)到不同的mysql
tar,cp,scp
拷貝數(shù)據(jù),有點(diǎn)快,缺點(diǎn)服務(wù)停止
3.2邏輯備份/熱備份
備份的是建表,建庫,插入等操作所執(zhí)行SQL語句(DDL,DML,DCL),
mysqldump,mydumper
效率相對(duì)較低
4.備份方式
4.1完全備份
4.2增量備份
4.3差異備份
二、實(shí)戰(zhàn)案例1
percona-xtrabackup
簡介
它是開源免費(fèi)的支持MySQL 數(shù)據(jù)庫熱備份的軟件,它能對(duì)InnoDB和XtraDB存儲(chǔ)引擎的數(shù)據(jù)庫非阻塞地備份。它不暫停服務(wù)創(chuàng)建Innodb熱備份;為mysql做增量備份:在mysql服務(wù)器之間做在線表遷移:使創(chuàng)建replication更加容易;備份mysql而不增加服務(wù)器的負(fù)載。
percona是一家老牌的mysql技術(shù)咨詢公司。它不僅提供mysal的技術(shù)支持、培訓(xùn)、咨詢,還發(fā)布了mysql的分支版本--percona Server。并圍繞perconaServer還發(fā)布了一系列的mysql工具。
獲得軟件包
官網(wǎng)站點(diǎn):https://www.percona.com/
選擇版本
安裝
安裝YUM倉庫
安裝percona需要的mysql包
安裝precona的yum倉庫
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
YUM安裝percona-xtrabackup
yum install -y ?percona-xtrabackup-24.x86_64
查詢安裝結(jié)果
yum ?list | ?grep percona-xtrabackup
1.完全備份流程
innobackupex? --user=root? ?--password='Root123@'? ?/xtrabackup/full
ls??/xtrabackup/full? ? ? ? ? ? ? ? 查看備份目錄,數(shù)據(jù)庫,配置文件,日志文件
/xtrabackup/full/2017-08-01 00-00-02/
觀察二進(jìn)制日志位置? ??
cat /xtrabackup/full/2017-08-01 00-00-18/xtrabackup_binlog_info
2.完全恢復(fù)流程
停止數(shù)據(jù)庫? ?
systemctl? ?stop? mysql
清理環(huán)境(模擬損壞)
rm? -rf? ?/var/lib/mysql/*
rm? -rf? ?/var/log/mysqld.log
生成回滾日志
innobackupex? ?--apply-log? ?/xtrabackup/full/2017-08-01 00-00-18/? ? 指定被分點(diǎn)
恢復(fù)文件
innobackupex? ?--copy-back? ?/xtrabackup/full/2017-08-01 00-00-18/?
登錄驗(yàn)證
ls? ?/var/lib/mysql
chown? -R? ?mysql.mysql? ?/var/lib/mysql
systemctl? ?start? ?mysqld
mysql? ?-uroot? ?-p'Root123@'
3.增量備份流程
準(zhǔn)備工作
完整備份:周一
rm? -rf? ?/xtrabackup/*
date? 09010000
innobackupex? ?--user=root? ? --password='Root123@'? ?/xtrabackup
ll? ?/xtrabackup/? ? ?2017-09-01 00-00-04
請(qǐng)問數(shù)據(jù)庫中的增量是多少?? ? ? 1?
增量備份:周二
date? ?09020000? ? ? 更新時(shí)間
mysql? ? -uroot? ?-p'Root123@'? ?-e? ?'insert? into? testdb.test? ?value(2)'
innobackupex? ?--user=root? ?--password='Root123@'? ?--incremental? /xtrabackup? ? ? ? ? ? ? ? --incremental-basedir=/xtrabackup/2017-09-01 00-00-04
basedir基于周一的備份,會(huì)生成一個(gè)今天的
ls? /xtrabackup/
增量備份:周三
date? ?09030000? ? ? 更新時(shí)間
mysql? ? -uroot? ?-p'Root123@'? ?-e? ?'insert? into? testdb.test? ?value(3)'
innobackupex? ?--user=root? ?--password='Root123@'? ?--incremental? /xtrabackup? ? ? ? ? ? ? ? --incremental-basedir=/xtrabackup/2017-09-02 00-00-04
basedir基于周2的備份,會(huì)生成一個(gè)今天的
ls? /xtrabackup/
周四。。周五。。周六
4.增量恢復(fù)流程
停止數(shù)據(jù)庫
systemctl? ?stop? ?mysqld
清理環(huán)境
rm? -rf? /var/lib/mysql/*
周一
innobackupex? --apply-log? --redo-only? /xtrabackup/2017-09-01_00-00-04? ? 回滾合并
周二
innobackupex? --apply-log? --redo-only? /xtrabackup/2017-09-01_00-00-04
--incremental-dir=/xtrabackup/2017-09-02 00-00-04
恢復(fù)
innobackupex? ?--copy-back? ?/xtrabackup/2017-09-01 00-00-06/ .
chown? -R? mysql.mysql? /var/lib/mysql
systemctl? ?start? mysqld
登錄查詢記錄,請(qǐng)思考記錄是第幾天的,想恢復(fù)3,怎么辦?
systemctl stop mysqld
innobackupex? --apply-log? --redo-only? /xtrabackup/2017-09-01_00-00-04? ?--incremental-dir=/xtrabackup/2017-09-03_00-00-27
rm -rf /var/lib/mysql*
innobackupex -copy-back /xtrabackup/2017-09-01_00-00-04
chown -R? ?mysq.mysql? ?/var/lib/mysql
systemctl start mysqld
mysql -uroot -p'Root123@'? ?-e 'select * from testdb.test'請(qǐng)思考,如何一次性把數(shù)據(jù),周一,周二,周三恢復(fù)出來?
5.差異備份流程
rm? -rf? ?/xtrabackup/*
1.完整備份
周一?
date? 10010000
create? database testdb;
use? testdb;
create? table? test(id? int);
insert? ?into? ?test2? ?values(1);
select? *? from? test2;
innobackupex? ?--user=root? ?--password='Root123@'? ? /xtrabackup
ls? /xtrabackup? ?看是否備份成功
2.差異備份
周二
date? ?10020000
mysql? ? -uroot? ?-p'Root123@'? ?-e? ?'insert? into? testdb.test2? ?value(2)'
innobackupex? ?--user=root? ?--password='Root123@'? ?--incremental? /xtrabackup? ? ? ? ? ? ? ? --incremental-basedir=/xtrabackup/2017-10-01 00-01-12
周三
date? ?10030000
mysql? ? -uroot? ?-p'Root123@'? ?-e? ?'insert? into? testdb.test2? ?value(3)'
innobackupex? ?--user=root? ?--password='Root123@'? ?--incremental? /xtrabackup? ? ? ? ? ? ? ? --incremental-basedir=/xtrabackup/2017-10-01 00-01-12
周四
date? ?10040000
mysql? ? -uroot? ?-p'Root123@'? ?-e? ?'insert? into? testdb.test2? ?value(4)'
innobackupex? ?--user=root? ?--password='Root123@'? ?--incremental? /xtrabackup? ? ? ? ? ? ? ? --incremental-basedir=/xtrabackup/2017-10-01 00-01-12
6.差異恢復(fù)流程
停止數(shù)據(jù)庫
systemctl? ?stop? ?mysqld
清理環(huán)境
rm? -rf? /var/lib/mysql/*
重演回滾redo? log(周一,某此差異)------->恢復(fù)數(shù)據(jù)
innobackupex? --apply-log? --redo-only? /xtrabackup/2017-10-01_00-01-12
?
innobackupex? --apply-log? --redo-only? /xtrabackup/2017-10-01_00-01-12
--incremental-dir=/xtrabackup/2017-10-04_00-00-29
innobackupex? ?--copy-back? ?/xtrabackup/2017-10-01_00-01-12
chown? -R? mysql.mysql? /var/lib/mysql? ? ?修改權(quán)限
systemctl? ?start? mysqld? ? ?啟動(dòng)mysqld
通過binlog增量恢復(fù)(略)
三、實(shí)戰(zhàn)案例2
mysqldump+binlog
1.優(yōu)勢
1.自動(dòng)記錄日子position位置
2.可用性,一致性
2.語法
mysqldump? -h? 服務(wù)器? -u用戶名? -p密碼? 數(shù)據(jù)庫名? >? 備份文件.sql? ? -h不寫是對(duì)本機(jī)
-single-transaction? ? ? innodb 一致性,服務(wù)可用性,不關(guān)機(jī)的備份
--master-data=1|2? ? ? ?該選項(xiàng)將會(huì)記錄binlog的日志位置與文件名并追加到文件中
master-data=2? ? ? ? ? ? 注釋掉日志記錄
幫助
mysqldump? ?--help
3.備份實(shí)戰(zhàn)
3.1準(zhǔn)備兩套root密碼
密碼1:Root123@? ? ? ? ? ? ? ? 配置到當(dāng)前數(shù)據(jù)庫中
密碼2:Root1234@? ? ? ? ? ? ? 備用
3.2準(zhǔn)備庫1
create? database testdb1;
use? testdb;
create? table? t1(id? int);
insert? ?into? ?t1? ?values(1),(2),(3);
select? *? from? t1;
3.3執(zhí)行備份
mysqldump? -p'Root123@'? ?--all-databases? --single-transaction? ?--master-data=2? ? ? ? ? ? ? ? --flush-logs? >? /backup/`date +%F-%H` -mysql-all.sql
3.4觀察備份細(xì)節(jié)
vim? /backup/2016-11-25-14-mysql-all.sql
LOCAK TABLES? `user`? WRITE? mysqldump的鎖機(jī)制,來保證數(shù)據(jù)一致性
22行 CHANGE MASTER TO MASTER LOG FILE=ocalhost-bin.000004MASTER LOG POS=154:
3.5備份后的,數(shù)據(jù)變更行為
4.恢復(fù)實(shí)戰(zhàn)
4.1備份二進(jìn)制日志文件
cp? /var/lib/mysql/*bin* ~
4.2停止數(shù)據(jù)庫
systemctl? ?stop? mysqld
4.3清理環(huán)境
rm? -rf? /var/lib/mysql/*
4.4啟動(dòng)數(shù)據(jù)庫
systemctl? ?start? mysqld
grep? 'password'? ?/var/log/mysqld.log? 找密碼,再改一下密碼,使用密碼2
mysqladmin? ?-uroot? ?-p'd-tlbwIgP3e2'? ? ? ? ?password "Root1234@"? password后面有空格
4.5mysql恢復(fù)數(shù)據(jù)
mysql? -p'Root1234@'? <? ?/backup/2016-11-25-14-mysql-all.sql
mysql? -p'Root1234@'? ?-e 'flush privileges'? ? ? ? ? 一重啟之后變成了密碼1
登錄并驗(yàn)證數(shù)據(jù)恢復(fù)結(jié)果,請(qǐng)思考恢復(fù)的數(shù)據(jù)庫有幾個(gè)?? 1個(gè)??
4.6二進(jìn)制日志恢復(fù)
觀察二進(jìn)制截取記錄
vim? ?/backup/2016-11-25-14-mysql-all.sql
第22行??CHANGE MASTER TO MASTER LOG FILE=ocalhost-bin.000004MASTER LOG POS=154:
mysqlbinlog localhost-bin.000002 localhost-bin000003-start-position=154mysql-p'Root123@'
注意后續(xù)有多少日志,就要跟多少日志名字
4.7觀察數(shù)據(jù)
恢復(fù)完整
4.8請(qǐng)思考誤刪除的問題.
如何保留誤刪的testdb3庫
[root@localhost -]#mysglbinlog localhost-bin.00004.....005.....006...... > 1.txt
刪除1.txt中不需要的at(比如test3庫是誤操作)
cat 1.txt? I? mysgl? -p'Root123@'
4.9關(guān)于數(shù)據(jù)恢復(fù)時(shí)的多余日志
方法二:在備份文件中,加入關(guān)閉二進(jìn)制日志
四、實(shí)戰(zhàn)案例3---記錄的導(dǎo)出和導(dǎo)入
1.記錄導(dǎo)出
注意目錄權(quán)限
vim? /etc/my.cnf
secure-file-priv=/backup? ? ? ? ?mysql不信任該目錄(要重啟mysql程序)
chown? mysql.mysql? /backup? ? mysql用戶沒有權(quán)限
SELECT...INTO OUTFILE 導(dǎo)出文本文件
mysql> SELECT? *? FROM? testdb1.t1? INTO? OUTFILE? '/backup/testdb1.t1.txt';
mysql命令導(dǎo)出文本文件
mysql-uroot -p'QianFeng@123' -e 'select * from testdb1.t1' > /backup/testdb1.t2.txt
mysql-u root -p'QianFeng@123' --xml-e 'select * from testdb1.t1' > /backup/testdb1.t3.txtmysql-u root -p'QianFeng@123' --html -e 'select * from testdb1.t1' > /backup/index.html
2.LOAD DATA INFILE導(dǎo)入文本文件.
注意目錄權(quán)限
vim? /etc/my.cnf
secure-file-priv=/backup? ? ? ? ?mysql不信任該目錄(要重啟mysql程序)
chown? mysql.mysql? /backup? ? mysql用戶沒有權(quán)限
刪除表的內(nèi)容,標(biāo)的到處和導(dǎo)入只備份表記錄,不會(huì)備份表結(jié)構(gòu),因此需要通過mysqldump備份表結(jié)構(gòu),恢復(fù)時(shí)先恢復(fù)表結(jié)構(gòu),再導(dǎo)入數(shù)據(jù)
delete? from? testdb1.t1
LOAD DATA? INFILE? '/backup/testdb1.t1.txt'? INTO? TABLE testdb1.t1;文章來源:http://www.zghlxwxcb.cn/news/detail-832324.html
select * from testdb1.t1;文章來源地址http://www.zghlxwxcb.cn/news/detail-832324.html
到了這里,關(guān)于開源數(shù)據(jù)庫MYSQL DBA運(yùn)維實(shí)戰(zhàn) 第三章 備份的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!