使用xtrabackup在线增量备份及恢复数据库_MySQL
一、Percona Xtrabackup 简介
1、Xtrabackup bin目录文件 介绍
1)innobackupex
innobackupex 是xtrabackup的一个符号链接 . innobackupex still supports all features and syntax as 2.2 version did, but is now deprecated and will be removed in next major release.
2)xtrabackup
一个由C编译而来的二进制文件,可以整备MySQL database instance with MyISAM, InnoDB, and XtraDB tables
3)xbcrypt
用来加密或解密备份的数据
4)xbstream
用来解压或压缩xbstream格式的压缩文件
5)xbcloud
utility used for downloading and uploading full or part of xbstream archive from/to cloud.
2、Percona XtraBackup info
是开源免费的MySQL数据库热备份软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁)
you can achieve the following benefits: (https://www.percona.com/doc/percona-xtrabackup/2.3/intro.html)
Backups that complete quickly and reliably
Uninterrupted transaction processing during backups
Savings on disk space and network bandwidth
Automatic backup verification
Higher uptime due to faster restore time
features
Create hot InnoDB backups without pausing your database
Make incremental backups of MySQL
Stream compressed MySQL backups to another server
Move tables between MySQL servers on-line
Create new MySQL replication slaves easily
Backup MySQL without adding load to the server
无需停止数据库进行InnoDB热备
增量备份MySQL
流压缩到传输到其它服务器
在线移动表
能比较容易地创建主从同步
备份MySQL时不会增大服务器负载
3、Xtrabackup工具支持对InnoDB存储引擎的增量备份,工作原理如下
1、在InnoDB内部会维护一个redo/undo日志文件,也可以叫做事务日志文件。事务日志会存储每一个InnoDB表数据的记录修改。当InnoDB启动时,InnoDB会检查数据文件和事务日志,并执行两个步骤:它应用(前滚)已经提交的事务日志到数据文件,并将修改过但没有提交的数据进行回滚操作。
2、Xtrabackup在启动时会记住log sequence number(LSN),并且复制所有的数据文件。复制过程需要一些时间,所以这期间如果数据文件有改动,那么将会使数据库处于一个不同的时间点。这时,xtrabackup会运行一个后台进程,用于监视事务日志,并从事务日志复制最新的修改。Xtrabackup必须持续的做这个操作,是因为事务日志是会轮转重复的写入,并且事务日志可以被重用。所以xtrabackup自启动开始,就不停的将事务日志中每个数据文件的修改都记录下来。
3、上面就是xtrabackup的备份过程。接下来是准备(prepare)过程,在这个过程中,xtrabackup使用之前复制的事务日志,对各个数据文件执行灾难恢复(就像mysql刚启动时要做的一样)。当这个过程结束后,数据库就可以做恢复还原了,这个过程在xtrabackup的编译二进制程序中实现。程序innobackupex可以允许我们备份MyISAM表和frm文件从而增加了便捷和功能。Innobackupex会启动xtrabackup,直到xtrabackup复制数据文件后,然后执行FLUSH TABLES WITH READ LOCK来阻止新的写入进来并把MyISAM表数据刷到硬盘上,之后复制MyISAM数据文件,最后释放锁。
4、备份MyISAM和InnoDB表最终会处于一致,在准备(prepare)过程结束后,InnoDB表数据已经前滚到整个备份结束的点,而不是回滚到xtrabackup刚开始时的点。这个时间点与执行FLUSH TABLES WITH READ LOCK的时间点相同,所以myisam表数据与InnoDB表数据是同步的。类似oracle的,InnoDB的prepare过程可以称为recover(恢复),myisam的数据复制过程可以称为restore(还原)。
5、Xtrabackup 和 innobackupex这两个工具都提供了许多前文没有提到的功能特点。手册上有对各个功能都有详细的介绍。简单介绍下,这些工具提供了如流(streaming)备份,增量(incremental)备份等,通过复制数据文件,复制日志文件和提交日志到数据文件(前滚)实现了各种复合备份方式。
二、安装xtrabackup
1、安装
yum -y install perl perl-devel libaio libaio-devel
yum -y install perl-DBI perl-DBD-MySQL perl-TermReadKey perl-devel perl-Time-HiRes
cd /usr/local/src
wget -c https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.3.2/ \
binary/tarball/percona-xtrabackup-2.3.2-Linux-x86_64.tar.gz
tar -zxf percona-xtrabackup-2.3.2-Linux-x86_64.tar.gz
cd percona-xtrabackup-2.3.2-Linux-x86_64/
mkdir /usr/local/xtrabackup
mv bin /usr/local/xtrabackup/
ln -s /usr/local/xtrabackup/bin/* /usr/bin/
2、修改my.cnf
[mysqld]
datadir=/var/lib/mysql
innodb_data_home_dir = /data/mysql/ibdata
innodb_log_group_home_dir = /data/mysql/iblogs
innodb_data_file_path=ibdata1:10M;ibdata2:10M:autoextend
innodb_log_files_in_group = 2
innodb_log_file_size = 1G
三、全部数据库备份与还原
1、备份
//全部数据库备份
innobackupex --user=root --password=123456 /data/backup/
//单数据库备份
innobackupex --user=root --password=123456 --database=backup_test /data/backup/
//多库
innobackupex--user=root --password=123456 --include='dba.*|dbb.*' /data/backup/
//多表
innobackupex --user=root --password=123456 --include='dba.tablea|dbb.tableb' /data/backup/
//数据库备份并压缩
log=zztx01_`date +%F_%H-%M-%S`.log
db=zztx01_`date +%F_%H-%M-%S`.tar.gz
innobackupex --user=root --stream=tar /data/backup 2>/data/backup/$log | gzip 1> /data/backup/$db
//不过注意解压需要手动进行,并加入 -i 的参数,否则无法解压出所有文件,疑惑了好长时间
//如果有错误可以加上 --defaults-file=/etc/my.cnf
2、还原
service mysqld stop
mv /data/mysql /data/mysql_bak && mkdir -p /data/mysql
//--apply-log选项的命令是准备在一个备份上启动mysql服务
innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log /data/backup/2015-09-18_16-35-12
//--copy-back 选项的命令从备份目录拷贝数据,索引,日志到my.cnf文件里规定的初始位置
innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back /data/backup/2015-09-18_16-35-12
chown -R mysql.mysql /data/mysq
service mysqld start
四、增量备份与还原
1、创建测试数据库和表
create database backup_test; //创建库
CREATE TABLE `backup` ( //创建表
`id` int(11) NOT NULL AUTO_INCREMENT ,
`name` varchar(20) NOT NULL DEFAULT '' ,
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ,
`del` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=myisam DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
2、增量备份
#--incremental:增量备份的文件夹
#--incremental-dir:针对哪个做增量备份
//第一次备份
mysql> INSERT INTO backup (name) VALUES ('xx'),('xxxx'); //插入数据
innobackupex --user=root --incremental-basedir=/data/backup/2015-09-18_16-35-12 --incremental /data/backup/
//再次备份
mysql> INSERT INTO backup (name) VALUES ('test'),('testd'); //在插入数据
innobackupex --user=root --incremental-basedir=/data/backup/2015-09-18_18-05-20 --incremental /data/backup/
3、查看增量备份记录文件
[root@localhost 2015-09-18_16-35-12]# cat xtrabackup_checkpoints //全备目录下的文件
backup_type = full-prepared
from_lsn = 0 //全备起始为0
to_lsn = 23853959
last_lsn = 23853959
compact = 0
[root@localhost 2015-09-18_18-05-20]# cat xtrabackup_checkpoints //第一次增量备份目录下的文件
backup_type = incremental
from_lsn = 23853959
to_lsn = 23854112
last_lsn = 23854112
compact = 0
[root@localhost 2015-09-18_18-11-43]# cat xtrabackup_checkpoints //第二次增量备份目录下的文件
backup_type = incremental
from_lsn = 23854112
to_lsn = 23854712
last_lsn = 23854712
compact = 0
增量备份做完后,把backup_test这个数据库删除掉,drop database backup_test;这样可以对比还原后
4、增量还原
分为两个步骤
a.prepare
innobackupex --apply-log /path/to/BACKUP-DIR
此时数据可以被程序访问使用;可使用—use-memory选项指定所用内存以加快进度,默认100M;
b.recover
innobackupex --copy-back /path/to/BACKUP-DIR
从my.cnf读取datadir/innodb_data_home_dir/innodb_data_file_path等变量
先复制MyISAM表,然后是innodb表,最后为logfile;--data-dir目录必须为空
开始合并
innobackupex --apply-log --redo-only /data/backup/2015-09-18_16-35-12
innobackupex --apply-log --redo-only --incremental /data/backup/2015-09-18_16-35-12 --incremental-dir=/data/backup/2015-09-18_18-05-20
innobackupex --apply-log --redo-only --incremental /data/backup/2015-09-18_16-35-12 --incremental-dir=/data/backup/2015-09-18_18-11-43
#/data/backup/2015-09-18_16-35-12 全备份目录
#/data/backup/2015-09-18_18-05-20 第一次增量备份产生的目录
#/data/backup/2015-09-18_18-11-43 第二次增量备份产生的目录
恢复数据
service mysqld stop
innobackupex --copy-back /data/backup/2015-09-18_16-35-12
service mysqld start
五、innobackup 常用参数说明
--defaults-file
同xtrabackup的--defaults-file参数
--apply-log
对xtrabackup的--prepare参数的封装
--copy-back
做数据恢复时将备份数据文件拷贝到MySQL服务器的datadir ;
--remote-host=HOSTNAME
通过ssh将备份数据存储到进程服务器上;
--stream=[tar]
备 份文件输出格式, tar时使用tar4ibd , 该文件可在XtarBackup binary文件中获得.如果备份时有指定--stream=tar, 则tar4ibd文件所处目录一定要在$PATH中(因为使用的是tar4ibd去压缩, 在XtraBackup的binary包中可获得该文件)。
在 使用参数stream=tar备份的时候,你的xtrabackup_logfile可能会临时放在/tmp目录下,如果你备份的时候并发写入较大的话 xtrabackup_logfile可能会很大(5G+),很可能会撑满你的/tmp目录,可以通过参数--tmpdir指定目录来解决这个问题。
--tmpdir=DIRECTORY
当有指定--remote-host or --stream时, 事务日志临时存储的目录, 默认采用MySQL配置文件中所指定的临时目录tmpdir
--redo-only --apply-log组,
强制备份日志时只redo ,跳过rollback。这在做增量备份时非常必要。
--use-memory=#
该参数在prepare的时候使用,控制prepare时innodb实例使用的内存量
--throttle=IOS
同xtrabackup的--throttle参数
--sleep=是给ibbackup使用的,指定每备份1M数据,过程停止拷贝多少毫秒,也是为了在备份时尽量减小对正常业务的影响,具体可以查看ibbackup的手册 ;
--compress[=LEVEL]
对备份数据迚行压缩,仅支持ibbackup,xtrabackup还没有实现;
--include=REGEXP
对 xtrabackup参数--tables的封装,也支持ibbackup。备份包含的库表,例如:--include="test.*",意思是要备份 test库中所有的表。如果需要全备份,则省略这个参数;如果需要备份test库下的2个表:test1和test2,则写 成:--include="test.test1|test.test2"。也可以使用通配符,如:--include="test.test*"。
--databases=LIST
列出需要备份的databases,如果没有指定该参数,所有包含MyISAM和InnoDB表的database都会被备份;
--uncompress
解压备份的数据文件,支持ibbackup,xtrabackup还没有实现该功能;
--slave-info,
备 份从库, 加上--slave-info备份目录下会多生成一个xtrabackup_slave_info 文件, 这里会保存主日志文件以及偏移, 文件内容类似于:CHANGE MASTER TO MASTER_LOG_FILE='', MASTER_LOG_POS=0
--socket=SOCKET
指定mysql.sock所在位置,以便备份进程登录mysql.

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在PHP中備份和還原MySQL資料庫可透過以下步驟實現:備份資料庫:使用mysqldump指令轉儲資料庫為SQL檔。還原資料庫:使用mysql指令從SQL檔案還原資料庫。

蘋果公司最新發布的iOS18、iPadOS18以及macOSSequoia系統為Photos應用程式增添了一項重要功能,旨在幫助用戶輕鬆恢復因各種原因遺失或損壞的照片和影片。這項新功能在Photos應用的"工具"部分引入了一個名為"已恢復"的相冊,當用戶設備中存在未納入其照片庫的圖片或影片時,該相冊將自動顯示。 "已恢復"相簿的出現為因資料庫損壞、相機應用未正確保存至照片庫或第三方應用管理照片庫時照片和視頻丟失提供了解決方案。使用者只需簡單幾步

Hibernate多態映射可映射繼承類別到資料庫,提供以下映射類型:joined-subclass:為子類別建立單獨表,包含父類別所有欄位。 table-per-class:為子類別建立單獨資料表,僅包含子類別特有列。 union-subclass:類似joined-subclass,但父類別表聯合所有子類別列。

如何在PHP中使用MySQLi建立資料庫連線:包含MySQLi擴充(require_once)建立連線函數(functionconnect_to_db)呼叫連線函數($conn=connect_to_db())執行查詢($result=$conn->query())關閉連線( $conn->close())

PHP處理資料庫連線報錯,可以使用下列步驟:使用mysqli_connect_errno()取得錯誤代碼。使用mysqli_connect_error()取得錯誤訊息。透過擷取並記錄這些錯誤訊息,可以輕鬆識別並解決資料庫連接問題,確保應用程式的順暢運作。

在Golang中使用資料庫回呼函數可以實現:在指定資料庫操作完成後執行自訂程式碼。透過單獨的函數新增自訂行為,無需編寫額外程式碼。回調函數可用於插入、更新、刪除和查詢操作。必須使用sql.Exec、sql.QueryRow或sql.Query函數才能使用回呼函數。

透過Go標準庫database/sql包,可以連接到MySQL、PostgreSQL或SQLite等遠端資料庫:建立包含資料庫連接資訊的連接字串。使用sql.Open()函數開啟資料庫連線。執行SQL查詢和插入操作等資料庫操作。使用defer關閉資料庫連線以釋放資源。

可以透過使用gjson函式庫或json.Unmarshal函數將JSON資料儲存到MySQL資料庫中。 gjson函式庫提供了方便的方法來解析JSON字段,而json.Unmarshal函數需要一個目標類型指標來解組JSON資料。這兩種方法都需要準備SQL語句和執行插入操作來將資料持久化到資料庫中。
