赞
踩
工具下载网站域名:http://www.percona.com
第一步,安装依赖
rpm -ivh libev-4.15-3.el7.x86_64.rpm
第二步,安装xrtabackup软件
yum install percona-xtrabackup-24-2.4.7-2.el7.x86_64.rpm -y
备份思路:
第一部分:使用innobackupex命令对数据库中的所有库进行全量备份
第二部分:预备阶段。需要备份在全量备份过程中产生的xtrabackup_log日志文件记录的数据的更改操作整合到全量备份集
操作:
第一步,准备一个数据库备份账号,开通相应权限
mysql> grant reload,process,lock tables,replication client on *.* to
'admin'@'localhost' identified by '123';
mysql> flush privileges;
说明:
在数据库中需要以下权限:
RELOAD和LOCK TABLES权限:为了执行FLUSH TABLES WITH READ LOCK
REPLICATION CLIENT权限:为了获取binary log位置
PROCESS权限:显示有关在服务器中执行的线程的信息(即有关会话执行的语句的信息),允许使用SHOW
第二步,使用innobackupex命令进行全库备份,备份路径为/full_xtrabackup
# innobackupex --user=admin --password=123 /full_xtrabackup
说明:备份目录默认会自动创建,也可以手动创建
若出现以下报错:
是因为mysql.sock文件并不在/var/lib/mysql目录下。而自动连接/var/lib/mysql目录下的mysql.sock文件有两个原因:一是在/etc目录下还有my.cnf文件,影响了innobackupex的执行。(my.cnf配置文件指定了mysql.sock文件的路径,考虑安装mysql时,选择的路径不同,my.cnf配置文件也有差异,例如我的配置文件路径为/mysql_3306/my.cnf,指定socket文件路径为/tmp/mysql.sock)二是innobackupex拥有自己的默认配置,默认读取了/var/lib/mysql/mysql.sock文件。
解决方案有两个:
方案1:创建软链接,目标路径为/var/lib/mysql/mysql.sock
# mkdir /var/lib/mysql
# ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock
方案2:在innobackupex中添加一个-S选项,执行套接字
# innobackupex -S /tmp/mysql.sock --user=admin --password=123 /full_xtrabackup
第三步,预备阶段,把备份这段时间内产生的日志整合到全量备份中
# innobackupex --user=admin --password=123 --apply-log --redo-only /full_xtrabackup/2023-04-19_18-38-05
--apply-log :整合日志
--redo-only : 表示只应用已提交的事务,不回滚未提交的事务,成功提交了事务的,写入磁盘的文件
快速恢复数据库中的数据
# innobackupex --defaults-file=/mysql_3306/my.cnf --copy-back/full_xtrabackup/2023-04-19_18-38-05
如果没有指定/mysql_3306/my.cnf配置文件路径,会报错:
是因为innobackupex工具无法找到MySQL中的数据目录,要使用"–defaults-file"把my.cnf配置文件传递给innobackupex,让其自动识别这个文件中的datadir
恢复之前,data目录需为空
# rm -rf /mysql_3306/data/*
否则会报错
启动MySQL,测试其是否正常
# service mysql_3306 start
需要注意的是,恢复数据时,一定要记得更改/mysql_3306/data目录下的文件拥有者以及所属组权限,否则mysql无法启动
需要添加权限后才嫩正常启动
# chown -R mysql.mysql /mysql_3306/data
这里的增量备份有一个前提,就是必须有全量备份。
增量备份是备份在全量备份完成后,数据库的数据又有新的增删改的这部分数据。
全面我们已经完成了全量备份,现在开始增量备份。
第一步,增量备份,增量备份的目标路径为/incremental
# innobackupex --user=admin --password=123 --incremental /incremental --incremental-basedir=/full_xtrabackup/2023-04-19_18-38-05
选项说明:
--incremental: 增量备份目录/incremental
--incremental-basedir:用来说明这个增量是相对于哪个全量的目录/full_xtrabackup/2023-04-19_18-38-05
第二步,预备阶段,把增量备份产生的备份集和日志信息整合到全量的备份集中
innobackupex --user=admin --password=123 --apply-log-only /full_xtrabackup/2023-04-19_18-38-05
--incremental-dir=/incremental/2023-04-20_16-58-10
--redo-only :如果你有多次增量备份,除了最后一个不用加redo-only,其他的增量应用都要加
数据的恢复与之前相同
innobackupex --defaults-file=/mysql_3306/my.cnf --user=admin --password=123 --copy-back /full_xtrabackup/2023-04-19_18-38-05
它是一个第三方的工具
xtrabackup工具的优缺点:
优点:
缺点:
第1步:innobakupex会启动一个叫xtabackup_log 后台检测进程,实时检测mysql的redo_log这个日志文件的变化,一旦redo日志有新的写入,立刻将日志信息写入xtrabackup_log 中
扩展:redo_log日志
事务日志或者称之为redo日志,在mysql中默认以ib_logfile0, ib_logfile1名称存在
第2步:物理拷贝innodb的数据文件和系统表空间文件idabasta1到对应的一个默认的时间戳的目录中
第3步:复制结束后,执行flush table with read lock操作 进行全库锁表的准备,准备备份非innodb文件
第4步:物理复制.frm .myd .myi 等非innodb引擎文件到备份目录中
第5步:查看二进制日志的位置
第6步:解锁表unlock tables
第7步:停止xtabackup的进程
①启动xtrabackup_log进程,检测mysql的redo_log日志,将变化写入自己的xrabackup_log 日志中
②拷贝物理文件到备份目录中(中午12点)/backup/数据文件
③拷贝完成之后停止xtrabackup_进程
注意:此时备份的数据不能只有用于恢复,因为没有12点到12点半的备份过中的数据
④预备阶段(将备份期间xtrabackup_log日志中记录的数据更改操作应用到12点的备份集中)
⑤预备阶段结束后的备份集的数据是备份结束点12:30的数据,此时就可以用于恢复了。
①InnoDB内部维护一个redo日志文件,我们也可以叫做事务日志文件。事务日志文件会存储每一个innodb
表数据的记录和修改。当innodb启动的时候,会检测数据文件和事务日志,并执行两个步骤:它应用以及提交的事务日志到数据文件
提交:commit ,这个动作叫做前滚,并将修改过但是没有提交的数据进行回滚操作。
②xtrabackup在启动时候会记住(LSN) log squence number,并且付诸所有的数据文件。复制这个过程是需要一定的时间,所以这个期间如果数据文件有所改动,那么将会使得数据库处于不同的 时间点,这个时候xtrabackup会启动一个后台进程,用于监控事务日志,并从事务日志复制最新的修改。xtrabackup会持续的做这个动作,是因为事务日志会轮转重复写入,并且事务日志可以被重用。所以xtabackup自启动后,就不停地将事务日志的每个数据文件的修改都记录下来。
③上面就是xrabackup的备份过程,接下来的预备过程。xtrabackup使用之前复制的事务日志信息,对各个数据文件进行灾难恢复。当这个过程结束后,数据库就回复还原了。
④以上的过程xtracbackup的编译二进制程序中实现。程序innobackupex可以允许我们备份myisam表和frm文件。innobackupex会启动xtracbackup,直到xtracbackup复制数据文件后,然后执行flush tables with read lock 来阻止写入操作并且把myisam表数据刷到硬盘上,之后复制myisam数据文件,最后释放锁。
⑤备份Myisam表和Innodb最终会处于一致,在准备过程结束后,innodb表数据已经前滚到整个备份的结束点,而不是回滚到xrabackup刚开始的点,这个时间点和lush tables with read lock的时间点相同,所以myisam表和innodb表的数据是同步的。
Innodb的准备过程可以称之为恢复(recover),myisam的数据复制过程叫做还原。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。