随着互联网不断的发展,企业对运维人员的能力要求也愈来愈高,尤为是要求运维人员能处理各类故障、专研自动化运维技术、云计算机、虚拟化等,知足公司业务的快速发展。mysql
本章向读者介绍数据库备份方法、数量级2T及以上级别数据库备份方案、xtrabackup企业工具案例演示、数据库备份及恢复实战等。sql
在平常运维工做中,数据是公司很是重要的资源,尤为是数据库的相关信息,若是数据丢了,少则损失几千元,高则损失上千万。因此在运维工做中药及时注意网站数据的备份,尤为要及时对数据库进行备份。数据库
企业中若是数据量上T级别,维护和管理是很是复杂的,尤为是对数据库进行备份操做。服务器
企业中MySQL数据库备份最经常使用的方法以下:网络
直接cp备份app
Sqlhotcoyp运维
主从同步复制工具
Mysqldump备份大数据
Xtrabackup备份网站
Mysqldump和Xtrabackup都可以备份MYSQL数据,以下为Msqldump工具使用方法:
一般小于100G的MYSQL数据库可使用默认Msqldump备份工具进行备份,若是超过100G的大数据,因为Mysqldump备份方式采用的逻辑备份,最大的缺陷是备份和恢复速度较慢。
基于Mysqldump备份耗时会很是长,并且备份期间会锁表。锁表直接致使数据库只能访问Select,不能执行Insert、Update等操做,进而致使部分WEB应用没法写入新数据。
若是是Myisam引擎表,固然也能够执行参数-lock-tables=false禁用锁表,可是有可能形成数据信息不一致。
若是是支持事务的表,例如InnoDB和BDB,--single-transaction参数是一个更好的选择,由于它不锁定表。
mysqldump -uroot -p123456 --all-databases --opt --single-transaction > 2017all.sql
其中--opt快捷选项,等同于添加--add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset 选项。
本选项能让Mysqldump很快的导出数据,而且导出的数据能很快导回。该选项默认开启,但能够用--skip-opt禁用。
若是运行Mysqldump没有指定--quick或--opt选项,则会将整个结果集放在内存中。若是导出大数据库的话可能会致使内存溢出而异常退出。
Mysql冷备、Mysqldump、Mysql热拷贝均不能实现对数据库进行增量备份,但实际环境中增量备份很是的实用,若是数据量小于100G,存储空间足够,能够天天进行完整备份,若是天天产生的数据量大,须要定制数据备份策略例如:每周日使用完整备份,周一到周六使用增量备份,或者每周六完整备份,周日到周五使用增量备份。
Percona-xtrabackup是为实现增量备份而生的一款主流备份工具,Xtrabackup有两个主要的工具,分别为:xtrabackup、innobackupex。
Percona-xtrabackup是Percona公司开发的一个用于MYSQL数据库物理热备的备份工具,支持MYSQL、Percona Server及mariadb,开源免费,是目前互联网数据库备份最主流的工具之一。
Xtrabackup只能备份InnoDB和XtraDB两种数据引擎的表,而不能备份MyISAM数据表,Innobackupex-1.5.1则封装了Xtrabackup,是一个封装好的脚本,使用该脚本能同时备份处理innodb和myisam,但在处理myisam时须要加一个读锁。
Xtrabackup备份原理,Innobackupex在后台线程不断追踪InnoDB的日志文件,而后复制InnoDB的数据文件。数据文件复制完成以后,日志的复制线程也会结束。这样就获得了不在同一时间点的数据副本和开始备份之后的事务日志。完成上面的步骤以后,就可使用InnoDB奔溃恢复代码执行事务日志(Redo log),已达到数据的一致性。其备份优势以下:
备份速度快,物理备份更加可靠;
备份过程不会打断正在执行的事务,无需锁表;
可以基于压缩等功能节约磁盘空间和流量;
自动备份效验;
还原速度快;
能够流传将备份传输到另外一台机器上;
节约磁盘空间和网络带宽。
Innobackupex工具的备份过程原理,如图所示:
Innobackupex备份过程当中首先启动Xtrabackup_log后台检测的进程,实时检测Mysql redo的变化,一旦发现Redo有新的日志写入,马上将日志写入到日志文件Xtrabackup_log中,并复制Innodb的数据文件和系统表空间文件idbdata1到备份目录。
Innodb引擎表备份完成以后,执行Flush table with read lock操做进行Mylsam表备份。拷贝.frm .myd .myi文件,而且在这一时刻得到binary log的位置,将表进行解锁unlock tables。中止Xtrabackup_log进程,完成整个数据库的备份。
(1)官方下载Percona-xtrabackup
cd /usr/src wget http://www.percona.com/downloads/XtraBackup/XtraBackup-2.1.9/binary/Linux/x86_64/percona-xtrabackup-2.1.9-744-Linux-x86_64.tar.gz tar -zxf percona-xtrabackup-2.1.9-744-Linux-x86_64.tar.gz
(2)Percona-xtrabackup软件安装方法,复制innobackupex xtrabackup xtrabackup_55 xtrabackup_56工具到/usr/bin目录下,代码以下:
cd /usr/src/percona-xtrabackup-2.1.9-Linux-x86_64/bin/ cp innobackupex xtrabackup xtrabackup_55 xtrabackup_56 /usr/bin/
(1)数据库备份
mkdir -p /data/backup/mysql/
innobackupex --user=root --password=123456 /data/backup/mysql/
(2)数据库恢复
Innobackupex数据库恢复,恢复前要保证数据一致性,执行以下命令:
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --apply-log /data/backup/mysql/2019-01-30_10-26-17/
一般数据库备份完成后,数据尚不能直接用于恢复操做,由于备份的数据时是一个过程,在备份过程当中,有任务会写入数据,可能会包含还没有提交的事务或已经提交但还没有同步至数据文件中的事务。
由于此时数据文件扔处理不一致状态,基于--apply-log能够经过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态,方可进行恢复操做。
Apply-log过程能够在任何机器上运行,没有强制在线上或者备份库上运行,能够把备份复制在闲置的服务器上去运行,以此来下降备份库的压力,必须保证backup和apply-log所使用的mysqlbackup的版本要一致。
(3)删除原数据目录/var/lib/mysql数据,使用参数--copy-back恢复完整数据,受权mysql用户给全部的数据库文件,如图所示:
rm -rf /var/lib/mysql/* innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --copy-back /data/backup/mysql/2019-01-30_10-26-17/
chown -R mysql:mysql /var/lib/mysql/
查看数据库恢复信息,数据彻底恢复,如图所示:
增量备份仅能应用于InnoDB或XtraDB表,对于MyISAM表而言,执行增量备份时其实进行的是彻底备份。
(1)增量备份以前必须执行彻底备份,如图所示:
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --databases=discuz /data/backup/mysql/
(2)执行第一次增量备份:
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --databases=discuz --incremental /data/backup/mysql/ --incremental-basedir=/data/backup/mysql/2019-01-30_13-57-09
增量备份完后,会在/data/backup/mysql/目录下生成新的备份目录。如图所示:
(3)数据表插入新数控
(4)执行第二次增量备份,备份命令以下:
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --databases=discuz --incremental /data/backup/mysql/ --incremental-basedir=/data/backup/mysql/2019-01-30_13-58-58
五、mysql增量数据库恢复
删除原数据库中表及数据记录信息,如图所示:
增量备份数据恢复方法以下步骤:
(1)基于Apply-log确保数据一致性:
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --apply-log --redo-only /data/backup/mysql/2019-01-30_13-57-09/
(2)执行第一次增量数据恢复:
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --apply-log --redo-only /data/backup/mysql/2019-01-30_13-57-09/ --incremental-dir=/data/backup/mysql/2019-01-30_13-58-58
(2)执行第二次增量恢复:
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --apply-log --redo-only /data/backup/mysql/2019-01-30_13-57-09/ --incremental-dir=/data/backup/mysql/2019-01-30_14-07-58
(4)执行完整数据恢复:
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --copy-back /data/backup/mysql/2019-01-30_13-57-09/