日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 增量备份_云计算-开源数据库-备份

發布時間:2023/12/19 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 增量备份_云计算-开源数据库-备份的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。