vlambda博客
学习文章列表

mysql备份与恢复-基于mysqldump和xtrabackup

数据库备份

按照备份的内容分

  • 逻辑备份:备份的是SQL语句(DDL和insert),以文本形式储存,恢复时执行相应SQL语句;

  • 物理备份:直接复制数据库文件进行备份,与逻辑备份相比,速度较快,但是占用的空间大。

按备份的数据范围划分  

  1. 完全备份:备份整个数据表,包括用户表、系统表、索引、视图和存储过程等等。没有执行完全备份就无法执行差异备份和增量备份。

  2. 差异备份:记录最新数据与第一次完全备份的差异;

  3.   增量备份:只记录数据库的一部分,包括自上次备份以来改变的数据库。

 

数据库的恢复

当数据库出现故障,将备份的数据库加载到系统。

MySQL通过以下方式保证数据库的安全:

  • 数据库备份:通过导出数据或者表文件的拷贝来保护数据。

  • 日志文件:日志记录了数据库日常操作和错误信息,可以为MySQL管理和优化提供必要的信息。

  • 数据库复制:在MySQL内部建立两个或者两个以上的服务器,其中一个作为主服务器,另一个作为从服务器。

Mysql数据库备份工具(1)

mysqldump是一款mysql逻辑备份的工具,它将数据库里面的对象(表)导出作为SQL脚本文件。它是mysql备份常用的备份方法,适合于不同版本mysql之间的升级、迁移等,不过在数据库比较大的时候,效率不高。

备份语句

Mydwldump -h host -u user -ppsaaword dbnametbname>filename.sql

Tbname:表名,如果要备份多张表,之间用空格隔开。


备份多个数据库

Mysqldump-h host -u user -ppassword --databases dbname1 dbname2……>filename.sql


备份所有数据库

Mysqldumo-h host -u user -ppassword --all-databases>filename.sql


 使用mysqldump只备份表结构

1.Mydwldump -h host -uuser -ppsaaword –no-data dbname tbname>filename.sql

2.Mysqldump -h host -uuser -ppassword –no-data –-databases dbname1 dbname2……>filename.sql

3.Mysqldumo -h host -uuser -ppassword –no-data --all-databases>filename.sql

 

备注:

  • 直接在-p后面输入密码会出现安全性警告,可以先不输入密码,在之后的enter password后输入。

  • SQL文件开头记录了MySQL的版本,主机名和数据库名称。文件以“--”开头是SQL语言的注释部分,以“/*!”开头以“*/”结尾表示可执行的mysql语言,但是在其他数据库管理系统将被作为注释忽略,可提高数据库的可移植性。

  • 日常自动备份可以结合shell脚本来实现。

xtrabackup备份工具2

xtrabackup是percona公司提供的开源,免费的备工具。Xtrabackup包括两个工具:xtrabackup和innobackuoex。mysqldump备份方式是采用的逻辑备份,其最大的缺陷是备份和恢复速度较慢,如果数据库大于50G,mysqldump备份就不太适合。

  • xtrabackup是专门用来备份InnoDB表的,和mysql server没有交互;

  • innobackupex是一个封装xtrabackup的Perl脚本,支持同时备份innodb和myisam,但在对myisam备份时需要加一个全局的读锁。

mysqldump对于导出几个G的数据库或几个表,还是不错的,速度并不慢。一旦数据量达到几十上百G,无论是对原库的压力还是导出的性能,mysqldump就力不从心了。Percona-Xtrabackup备份工具,是实现MySQL在线热备工作的不二选择,可进行全量、增量、单表备份和还原。

数据量特别大的话,建议优先用 xtrabackup,提高备份/恢复速度。而如果数据量不是太大或者想备份单表,则建议用mysqldump了,方便逻辑恢复。各有利弊,注意其适用场。

优点:

  • 备份速度快,物理备份可靠;

  • 备份过程不会打断正在执行的事务(无需锁表);

  • 能够基于压缩等功能节约磁盘空间和流量;

  • 自动备份校验;

  • 还原速度快;

  • 可以流传将备份传输到另外一台机器上;

  • 在不增加服务器负载的情况备份数据。

 

实战备份过程

Xtrabackup在启动时会记住log sequence number(LSN)日志序列号,即当前的redo记录的位置,并且复制所有的数据文件。复制过程需要一些时间,所以这段时间如果数据文件LSM有改动,他会运行一个后台进程,用于监视事务日志,并不停的将事务日志中每个数据文件的修改都记录下来。

全量备份

最新版的xtrabackup8.0.x没有innobackupex工具

1.创建备份目录

Mkdir -p/backup/{fulldb,incrdb}

2.全备

xtrabackup --defaults-file=/etc/my.cnf --user=root --password=123456 --backup --target-dir=/backup/fulldb

--defaults-file指定的配置文件读取参数;

--backup备份操作,备份到target-dir指定的目录;

--target-dir备份文件的目录,默认为当前目录xtrabackup_backupfiles/

--user:mysql用户名

--password用户密码


也可以通--databases=dataname来指定备份的数据库。

当出现completed OK!代表备份成功。

增量备份

是基于全备基础上备份。

xtrabackup --defaults-file=/etc/my.cnf --user=root --password=123456  --backup--target-dir=/backup/incrdb --incremental-basedir=/backup/fulldb/xtabackup_backuofiles

--incremental-basedir:指定全备目录


mysql备份与恢复-基于mysqldump和xtrabackup


mysql备份与恢复-基于mysqldump和xtrabackup

可查看xtrabackup节点信息,(xtrabackup_checkpoints),可以看到backup_type(备份类型)=incremental,则为增量备份。

 

恢复

1)全备准备,预备恢复全备

Xtrabackup --prepare --apply-log-only --target-dir=/backup/fulldb/xtrabackup_backupfiles

mysql备份与恢复-基于mysqldump和xtrabackup


--prepare:表示准备恢复

--apply-log-only:表示不回滚事务(正确的做法应该是除了最后一个增备,所有的备份恢复都应该设置 apply-log-only 参数,避免未完成事务的回滚。

Xtrabackup --prepare --apply-log-only -target-dir=/backup/fulldb/xtrabackup_backupfiles–incremental-dir=/backup/incrdb

mysql备份与恢复-基于mysqldump和xtrabackup


全备就像一个集合,若有第二次第三次增备依次放在全备中,进行恢复数据

3)  关闭mysql服务,删除mysql的数据目录

Systemctl stop mysqld.service

 

mysql备份与恢复-基于mysqldump和xtrabackup


 

4进行恢复数据

Xtrabackup —copy-back --target-dir=/backup/fulldb/xtrabackup_backupfiles


最终mysql数据恢复。

过程中报的错误

Error:failed to execute query 'LOCK INSTANCE FOR BACKUP': 1227 (42000) Access denied;you need (at least one of) the BACKUP_ADMIN privilege(s) for this operation

给备份恢复的用户添加BACKUP_ADMIN权限。

mysql>grant BACKUP_ADMIN on *.* to 'root'@'%';

BACKUP_ADMIN:此权限用于查询

备注:为备份的账号添加BACKUP_ADMIN权限,一般生产创建一个单独的用户用于备份与恢复。