집 >데이터 베이스 >MySQL 튜토리얼 >mysql의 증분 백업에 Xtrabackup을 사용하는 방법
이제 xtrabackup 버전이 8.0으로 업그레이드되었지만 mysql8.0
에서만 지원됩니다. 하지만 2.4
를 사용합니다. code >2.4는 이전 2.1
에 비해 큰 변화를 겪었습니다. innobackupex
의 모든 기능이 xtrabackup
에 통합되었으며, 단 하나의 바이너리이며 호환성상의 이유로 innobackupex
는 xtrabackup
의 소프트 링크, 즉 현재 xtrabackup
입니다. Innodb 이외의 테이블 백업을 지원하며 Innobackupex
는 다음 버전에서 제거됩니다(8.0에서는 이미 제거됨). innobackupex
를 xtrabackup으로 바꾸는 것이 좋습니다. 코드>. 다른 새로운 기능도 있습니다. 자세한 지침은 <code>xtrabackup
의 새 버전을 참조하세요. 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!
备份成功 重新启动 博客还能正常访问 哈哈哈哈
# 将恢复目录的属主更改一下 chown -R mysql:mysql mysql /etc/init.d/mysql start
如果恢复玩不想要备份数据可以使用 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
from_lsn
是备份的起始 LSN
,对于增量备份,它必须to_lsn
与先前 base
备份的相同。
在这种情况下,您可以看到to_lsn
(最后一个检查点LSN)和last_lsn
(最后一个复制的LSN
)之间存在差异,这意味着在备份过程中服务器上有一些流量。
我们可以测试一下 对第一个增加继续创建增量 创建增量之前先创建几条数据
xtrabackup --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 --apply-log-only
合并除最后一个以外的所有增量时应使用, 一旦准备好,增量备份就与完整备份相同,可以用相同的方式还原它们。
恢复
xtrabackup --copy-back --target-dir=/data/backups/base
中间插入的数据就能看见了,真棒!
增量备份步骤
创建基础备份
一定条件进行增量备份创建
对所有备份进行准备 所有增量基于基础备份 相当于合并操作
最后和全量备份一样 直接恢复即可
在InnoDB
内部会维护一个redo日志文件,我们也可以叫做事务日志文件.事务日志会存储每一个InnoDB表数据的记录修改。当InnoDB启动时,InnoDB会检查数据文件和事务日志,并执行两个步骤:它应用(前滚)已经提交的 事务日志到数据文件,并将修改过但没有提交的数据进行回滚操作。
Xtrabackup
在启动时会记住log sequence number(LSN)
, 并且复制所有的数据文件。复制过程需要一些时间,所以这期间如果数据文件有改动,那么将会使数据库处于一个不同的时间点。这时,xtrabackup
会运行一个后台进程,用于监视事务日志,并从事务日志复制最新的修改。Xtrabackup
必须持续的做这个操作,是因为事务日志是会轮转重复的写入,并且事务日志可以被重用。所以 xtrabackup
自启动开始,就不停的将事务日志中每个数据文件的修改都记录下来。上面就是 xtrabackup
的备份过程。
最后一次"准备"操作可以不用跳过回滚操作,这样用来恢复的数据文件本地就处理好了,当服务启动后就不会再进入到回滚阶段,如果最后一次使用了这个参数,服务器启动后将进入回滚阶段。所以这个--apply-log-only
只是用来合并增量用的避免下一个增量不可用。 可以参见 参见 man xtrabackup
xtrabackup --user=bkpuser --password=123456 --backup --databases="u_test" --no-timestamp --target-dir=/data/backups/u xtrabackup --prepare --target-dir=/data/backups/u🎜백업 계정용 데이터베이스 설정🎜rrreee🎜전체 백업🎜rrreee
mysql이 저장한 데이터 디렉토리 이동
🎜rrreeextrabackup --move-back
명령을 사용하면 됩니다🎜🎜증분 백업🎜🎜증분 백업은 기존 백업을 기반으로 합니다. 데이터가 있으므로 먼저 전체 볼륨을 생성해야 합니다. 백업한 후 그 당시의 녹음 지점을 녹음하세요🎜from_lsn
LSN
백업의 시작점입니다. 증분 백업의 경우 to_lsn
이 이전 base
백업과 동일해야 합니다. 🎜🎜이 경우 to_lsn
(마지막 체크포인트 LSN)과 last_lsn
(마지막 복사된 LSN
)을 보면 차이가 있습니다. 백업 프로세스 중에 서버에 약간의 트래픽이 있습니다. 🎜xtrabackup --apply-log-only
는 마지막 증분을 제외한 모든 증분을 병합할 때 사용해야 하며, 일단 준비되면 증분 백업은 전체 백업과 동일하며 동일한 방식으로 사용할 수 있습니다. . 🎜InnoDB
내에 유지됩니다. 트랜잭션 로그는 InnoDB 테이블 데이터의 모든 레코드 수정 사항을 저장합니다. InnoDB가 시작되면 InnoDB는 데이터 파일과 트랜잭션 로그를 확인하고 두 단계를 수행합니다. 즉, 커밋된 트랜잭션 로그를 데이터 파일에 적용(롤포워드)하고, 수정되었지만 커밋되지 않은 데이터를 롤백합니다. 🎜🎜Xtrabackup
은 시작 시 로그 시퀀스 번호(LSN)
를 기억하고 모든 데이터 파일을 복사합니다. 복사하는 데 시간이 걸리므로 이 기간 동안 데이터 파일이 수정되면 데이터베이스의 시점이 달라집니다. 이때 xtrabackup
은 백그라운드 프로세스를 실행하여 트랜잭션 로그를 모니터링하고 트랜잭션 로그의 최신 수정 사항을 복사합니다. Xtrabackup
은 트랜잭션 로그가 순환적으로 반복적으로 기록되고 트랜잭션 로그를 재사용할 수 있으므로 이 작업을 계속 수행해야 합니다. 따라서 xtrabackup
은 시작된 이후 각 데이터 파일의 수정 사항을 트랜잭션 로그에 지속적으로 기록했습니다. 위는 xtrabackup
의 백업 과정입니다. 🎜--apply-log-only
는 다음 증분을 사용할 수 없게 되는 것을 방지하기 위해 증분을 병합하는 데에만 사용됩니다. man xtrabackup
을 참조하세요🎜一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。他的作用是使数据文件处于一致性状态,方法是回滚未提交的事务并同步已提交的事务至数据文件。
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/
위 내용은 mysql의 증분 백업에 Xtrabackup을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!