mysql 增量备份_云计算-开源数据库-备份
關于備份:
備份原因;怕丟,怕被誤刪。
備份目標:數據的一致性,服務的可用性。
備份技術:物理備份/冷備份
直接復制數據庫文件,適用于大型數據庫環境,不受存儲引擎的限制,但不能恢復到不同的MySQL版本。
tar,cp,scp
拷貝數據, 優點快,缺點服務停止。
邏輯備份/熱備份
備份的是建表、建庫、插入等操作所執行SQL語句(DDL DML DCL),適用于中小型數據庫。
mysqldump,mydumper
效率相對較低
備份種類: 完全備份
增量備份
連續回復
特點:因每次僅備份自上一次備份(注意是上一次,不是第一次)以來有變化的文件,所 以備份體積小,備份速度快,但是恢復的時候,需要按備份時間順序,逐個備份版本進行恢復,恢復時間長。
差異備份
跳躍恢復
特點:占用空間比增量備份大,比完整備份小,恢復時僅需要恢復第一個完整版本和最后 一次的差異版本(包含所有的差異),恢復速度介于完整備份和增量備份之間。
percona-xtrabackup
官方下載軟件包
安裝:
安裝yum倉庫。安裝percona需要的mysql包
mysql官方源
yum install -y https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm
yum工具
yum install -y yum-utils
查看mysql可用版本
yum repolist all | grep mysql
禁用80
yum-config-manager --disable mysql80-community
啟用57
yum-config-manager --enable mysql57-community
yum install mysql-community-libs-compat -y
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
YUM安裝percona-xtrabackup
yum -y install percona-xtrabackup-24.x86_64
安裝percona
本地RPM
percona-xtrabackup24.rpm.zip
查詢安裝結果
rpm -ql percona-xtrabackup-24
準備備份:1-1 完全備份流程
innobackupex --user=root --password='QianFeng@123' /xtrabackup/full
連接數據庫,開始備份。
請注意備份結果是否完成
xtrabackup: Transaction log of lsn (74182721) to (74182730) was copied.
171127 15:04:12 completed OK!
ls /xtrabackup/full/
查看備份目錄。數據庫,配置文件,日志文件
ls /xtrabackup/full/2017-08-01_00-00-02/
觀看二進制日志位置
cat /xtrabackup/full/2017-08-01_00-00-18/xtrabackup_binlog_info
1-2 完全恢復流程
停止數據庫
systemctl stop mysqld
清理環境(模擬損壞)
rm -rf /var/lib/mysql/*
rm -rf /var/log/mysqld.log
生成回滾日志
innobackupex --apply-log /xtrabackup/full/2017-08-01_00-00-18/
指定備份點
恢復文件
innobackupex --copy-back /xtrabackup/full/2017-08-01_00-00-18/
登陸驗證
ls /var/lib/mysql
chown -R mysql.mysql /var/lib/mysql
systemctl start mysqld
mysql -uroot -p'QianFeng@123'
2-1 增量備份流程
準備工作
使用指定的數據庫
create database testdb;
use testdb;
create table test(id int);
insert into test values (1);
select * from test;
mysql> select * from test;
+------+
| id |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
完整備份:周一
rm -rf /xtrabackup/*
date 09010000
時間建議靠后設置。
innobackupex --user=root --password='QianFeng@123' /xtrabackup
ll /xtrabackup/
2017-09-01_00-00-04
請問數據庫中的記錄是多少?
1
增量備份:周二
date 09020000
更新時間
mysql -uroot -p'QianFeng@123' -e 'insert into testdb.test values (2)'
[root@localhost ~]# mysql -uroot -p'QianFeng@123' -e 'select * from testdb.test'
innobackupex --user=root --password='QianFeng@123'
--incremental /xtrabackup/
--incremental-basedir=/xtrabackup/2017-09-01_00-00-04
basedir基于周一的備份。
會生成一個今天的。
ls /xtrabackup/
2017-09-01_00-00-04
2017-09-02_00-00-58
增量備份:周三
date 09030000
mysql -uroot -p'QianFeng@123' -e 'insert into testdb.test values (3)'
innobackupex --user=root --password='QianFeng@123'
--incremental /xtrabackup/
--incremental-basedir=/xtrabackup/2017-09-02_00-00-26
basedir基于周2的備份。
會生成一個今天的。
ls /xtrabackup/
2017-09-01_00-00-04
2017-09-02_00-00-58
2017-09-03_00-00-36
周四。。周五。。周六
2-2 增量恢復流程
停止數據庫
systemctl stop mysqld
清理環境
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-26
恢復
innobackupex --copy-back /xtrabackup/2017-09-01_00-00-06
chown -R mysql.mysql /var/lib/mysql
systemctl start mysqld
登陸查詢記錄。請思考記錄是第幾天的。
想回復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 mysql.mysql /var/lib/mysql
systemctl start mysqld
mysql -uroot -p'QianFeng@123' -e 'select * from testdb.test'
請思考,如何一次性把數據,周一,周二,周三恢復出來?
mysqldump + binlog
優勢
1 自動記錄日志position位置。
(show master statusG;)
2 可用性,一致性
鎖表機制。
語法
mysqldump -h 服務器 -u用戶名 -p密碼 數據庫名 > 備份文件.sql
參數說明
庫的范圍
-A, --all-databases 所有庫
school 數據庫名
school stu_info t1 是指school數據庫的表stu_info、t1
-B, --databases bbs test mysql 多個數據庫
--single-transaction #InnoDB 一致性 服務可用性
--master-data=1|2 #該選項將會記錄binlog的日志位置與文件名并追加到文件中,或添加注釋
高級選項
--opt #同時啟動各種高級選項
-R, --routines #備份存儲過程和存儲函數
-F, --flush-logs #備份之前刷新日志,截斷日志。備份之后新binlog。
--triggers #備份觸發器
幫助
mysqldump --help
備份實戰
請準備兩套root密碼
密碼1
QianFeng@123
配置到當前數據庫中。
密碼2
QianFeng@1234
備用
準備庫1
注意
請清理掉之前的test庫。實驗后半部分,需要繼續創建test庫,避免混淆。
testdb1.t1
mysql> select * from testdb1.t1;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
+------+
執行備份
[root@localhost ~]# mysqldump -p'QianFeng@123'
--all-databases --single-transaction
--master-data=2
--flush-logs
> /backup/`date +%F-%H`-mysql-all.sql
master-data=2 注釋掉日志記錄
觀察備份細節
vim /backup/2016-11-25-14-mysql-all.sql
LOCK TABLES `user` WRITE;
觀察各種鎖機制,用來保證數據一致性
22 CHANGE MASTER TO MASTER_LOG_FILE='localhost-bin.000004', MASTER_LOG_POS=154;
二進制日志截斷位置。第22行
業務正常推進...
備份后的,數據變更行為
在testdb2.t2 中插入數據1,2,3;
創testdb3庫
切斷二進制日志(重啟數據庫)
在testdb2.t2 中插入數據4;
刪testdb3庫
在testdb2.t2 中插入數據5;
mysql> select * from testdb2.t2;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
+------+
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| testdb1 |
| testdb2 |
+--------------------+
12 rows in set (0.00 sec)
mysql>
恢復實戰
1 備份二進制日志文件
cp /var/lib/mysql/*bin* ~
2. 停止數據庫
systemctl stop mysqld
3. 清理環境
rm -rf /var/lib/mysql/*
4.啟動數據庫
systemctl start mysqld
grep 'password' /var/log/mysqld.log
找密碼,再改一下密碼。請使用密碼2
Kyzw;u2dq<mh
mysqladmin -uroot -p'Kyzw;u2dq<mh' password 'QianFeng@1234'
注意
語法要求password后面有空格。
5.mysql恢復數據
mysql -p'QianFeng@1234' < /backup/2016-12-08-04-mysql-all.sql
mysql -p'QianFeng@1234' -e 'flush privileges'
請使用備份時密碼
登陸并驗證數據恢復結果。請思考恢復的數據庫有幾個?
1個
6.二進制日志恢復
觀察二進制截取記錄
vim /backup/2016-11-25-14-mysql-all.sql
CHANGE MASTER TO MASTER_LOG_FILE='localhost-bin.0000010', MASTER_LOG_POS=154;
mysqlbinlog localhost-bin.000002 localhost-bin.000003
--start-position=154 | mysql -p'QianFeng@123'
注意后續有多少日志,要跟多少日志名字。
7.觀察數據
請思考數據是否恢復完整。
是完整的。
8.請思考誤刪除的問題
如何保留testdb3庫
[root@localhost ~]#mysqlbinlog localhost-bin.00004 ......005.....006...... > 1.txt
刪除1.txt中不需要的at(比如test3庫是誤操作)
cat 1.txt | mysql -p'QianFeng@123'
課后題:是否可以通過mysqlbinlog start 和stop 命令解決。
9.關于數據恢復時的多余日志。
方法一
原因
每次還原數據庫都會增加日志的體積。但這些都是還原操作。恢復數據庫的日志占用了存儲空間。
mysql> set sql_log_bin =0
再mysql> source /backup/*.sql
觀察
二進制日志并沒有發生變化。
方法2
在備份文件中,加入關閉二進制日志。
總結
以上是生活随笔為你收集整理的mysql 增量备份_云计算-开源数据库-备份的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 技术爆发式发展机遇无限,IBM商业大势预
- 下一篇: mysql 查询语句_MySQL相关(一