現在xtrabackup版本升級到了8.0,但是只對mysql8.0
才有支援, 我們這還是使用2.4
, 但是2.4
相比之前的2.1
有了比較大的變化:innobackupex
功能全部整合到xtrabackup
裡面,只有一個binary
,另外為了使用上的相容考慮,innobackupex
作為xtrabackup
的一個軟鏈,即xtrabackup
現在支援非Innodb表備份,並且Innobackupex
在下一版本中移除(8.0已經移除了),建議透過xtrabackup
取代innobackupex
。還有其他的一些新特性,更多的說明可以看xtrabackup
新版詳細說明。
如果安裝需要依賴就把依賴安裝一下
wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb sudo apt-get update sudo apt-get install percona-xtrabackup-24
mysql> CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY '123456'; mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'bkpuser'@'localhost'; mysql> FLUSH PRIVILEGES;
xtrabackup --user=bkpuser --password=123456 --backup --target-dir=/data/backups/mysql # 会看到输出 200603 09:55:37 Executing UNLOCK TABLES 200603 09:55:37 All tables unlocked 200603 09:55:37 [00] Copying ib_buffer_pool to /data/backups/mysql/ib_buffer_pool 200603 09:55:37 [00] ...done 200603 09:55:37 Backup created in directory '/data/backups/mysql/' 200603 09:55:37 [00] Writing /data/backups/mysql/backup-my.cnf 200603 09:55:37 [00] ...done 200603 09:55:37 [00] Writing /data/backups/mysql/xtrabackup_info 200603 09:55:37 [00] ...done xtrabackup: Transaction log of lsn (837940114) to (837940123) was copied. 200603 09:55:37 completed OK!
準備備份
xtrabackup --prepare --target-dir=/data/backups/mysql
複製備份
我這裡為了示範全量備份就直接將我部落格mysql
儲存的資料目錄給移動一下
mv /var/lib/mysql /var/lib/mysql_bak mkdir /var/lib/mysql xtrabackup --copy-back --target-dir=/data/backups/mysql # 这样会保留原始备份 他会将当时读到my.cnf的datadir设置为恢复路径 200603 10:47:42 [01] ...done 200603 10:47:42 [01] Copying ./performance_schema/mutex_instances.frm to /var/lib/mysql/performance_schema/mutex_instances.frm 200603 10:47:42 [01] ...done 200603 10:47:42 [01] Copying ./performance_schema/events_transactions_history_long.frm to /var/lib/mysql/performance_schema/events_transactions_history_long.frm 200603 10:47:42 [01] ...done 200603 10:47:42 [01] Copying ./xtrabackup_info to /var/lib/mysql/xtrabackup_info 200603 10:47:42 [01] ...done 200603 10:47:42 [01] Copying ./ibtmp1 to /var/lib/mysql/ibtmp1 200603 10:47:42 [01] ...done 200603 10:47:42 completed OK!
#備份成功重新啟動部落格還能正常存取哈哈哈哈
# <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:bash;"># 将恢复目录的属主更改一下
chown -R mysql:mysql mysql
/etc/init.d/mysql start</pre><div class="contentsignin">登入後複製</div></div>
如果恢復玩不想要備份資料可以使用xtrabackup --move-back
指令增量備份
增量是基於已有資料進行備份的,也就行需要先建立一次全量備份,然後記錄當時的記錄點#建立備份
xtrabackup --user=bkpuser --password=123456 --backup --target-dir=/data/backups/base # 基于全量备份进行增量 xtrabackup --user=bkpuser --password=123456 --backup --target-dir=/data/backups/inc1 --incremental-basedir=/data/backups/base
查看備份類型確認是增量備份了
root@longing:/data/backups/inc1# cat xtrabackup_checkpoints backup_type = incremental from_lsn = 837943393 to_lsn = 837943393 last_lsn = 837943402 compact = 0 recover_binlog_info = 0 flushed_lsn = 837943402
是備份的起始
LSN與先前
base 備份的相同。 在這種情況下,您可以看到
(最後一個複製的
LSNxtrabackup --user=bkpuser --password=123456 --backup --target-dir=/data/backups/inc2 --incremental-basedir=/data/backups/inc1
已經有3個備份了,我們要先對基礎資料進行準備,然後對兩個增量進行準備
xtrabackup --user=bkpuser --password=123456 --prepare --apply-log-only --target-dir=/data/backups/base xtrabackup --user=bkpuser --password=123456 --prepare --apply-log-only --target-dir=/data/backups/base --incremental-dir=/data/backups/inc1 xtrabackup --user=bkpuser --password=123456 --prepare --target-dir=/data/backups/base --incremental-dir=/data/backups/inc2
合併除最後一個以外的所有增量時應使用, 一旦準備好,增量備份就與完整備份相同,可以用相同的方式還原它們。
恢復
xtrabackup --copy-back --target-dir=/data/backups/base
中間插入的資料就能看見了,真棒!
增量備份步驟
建立基礎備份
一定條件進行增量備份建立
對所有備份進行準備所有增量基於基礎備份相當於合併作業
原理
在
一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。他的作用是使数据文件处于一致性状态,方法是回滚未提交的事务并同步已提交的事务至数据文件。
mysqldump
备份缺点
效率较低,备份和还原速度慢,份过程中,数据插入和更新操作会被挂起
MySQL
备份工具
跨平台性差,备份时间长,冗余备份,浪费存储空间
XtraBackup
备份过程中不锁库表,适合生产环境,由专业组织Percona
提供( 改进MySQL
分支 )
XtraBackup
能对表 库进行备份吗?
当然了,只不过博主太懒了,写起来太麻烦了,不过原理都是差不多,操作也差不多,大家自己搞搞!
xtrabackup --user=bkpuser --password=123456 --backup --databases="u_test" --no-timestamp --target-dir=/data/backups/u xtrabackup --prepare --target-dir=/data/backups/u
还原
先prepare
,利用--apply-log
的作用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态
copy
,因为是部分备份,不能直接用--copy-back
,只能手动来复制需要的库,也要复制ibdata(数据字典)
cp /data/backups/u/ibdata1 /var/lib/mysql/
cp -r u/u_test /var/lib/mysql/
以上是怎麼利用Xtrabackup進行mysql增量備份的詳細內容。更多資訊請關注PHP中文網其他相關文章!