MySQL的备份还原(xtrabackup)

MySQL的备份还原(xtrabackup)

xtrabackup简介

xtrabackup是percona提供的MySQL数据库的备份工具,是唯一开源的能对innodb和xtradb数据库进行热备的工具

xtrabackup的特点

1.备份还原过程快、可靠
2.备份过程不会打断正在执行的事务
3.能够基于压缩等功能介于磁盘空间和流量
4.自动实现备份检验
5.开源免费

xtrabackup备份过程

xtrabackup安装

xtrabackup在centos的EPEL源中,可以在配置完EPEL源后使用yum安装

[[email protected] ~]# yum install -y percona-xtrabackup

也可以去官网下载最新版本的xtrabackup
https://www.percona.com/downloads/XtraBackup/LATEST

xtrabackup使用

xtrabackup [option] BACKUP-ROOT-DIR
选项 说明
--user 备份时连接到MySQL的账号
--password 备份时连接到MySQL所使用的账号的密码
--host 备份数据库的地址
--databases 所要备份的数据库名,如果有多个数据库可以使用","隔开,如果备份表则使用"DATABASE.TABLE"来指明
--incremental 表示创建一个增量备份
--incremental-basedir 指定前一次完全备份或者增量备份的目录
--incremental-dir 指定还原时增量备份的目录
--apply-log 备份完成后的数据不能直接用于恢复操作,因为备份的数据中可能包含尚未提交的事务或已经提交但尚未同步的至数据库中过的事务,此时数据仍处于不一致状态,此选项作用是通过回滚提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态
--apply-log-only 恢复时阻止回滚未完成的事务,在有增量备份时使用
--export 开启可导出单独的表之后再导入其他MySQL中
--redo-only 合并增量备份时使用,不包括最后一个增量备份的合并
--copy-back 做数据恢复时将备份数据文件拷贝到MySQL服务器的datadir
--move-back 作用和copy-back想用区别在于此选项是用来移动备份的数据

xtrabackup完全,增量备份及还原

完全备份及还原

在完全备份之前需要创建一个备份的目录作为存放备份使用

[[email protected] ~]# mkdir /data/backup

数据库内存放的数据

[[email protected] ~]# mysql -e ‘SHOW DATABASES;‘
+--------------------+
| Database           |
+--------------------+
| hellodb            |
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+

一、完全备份

[[email protected] ~]# mariabackup --backup --target-dir=/data/backup  --user=root --password=‘‘

二、对数据库破坏

[[email protected] ~]# rm -rf /data/mysql/*

三、恢复

3.1在恢复数据库前需要先将数据库内数据清理,然后停止mysql服务

[[email protected] ~]# rm -rf /data/mysql/*
[[email protected] ~]# service mysqld stop
Stopping mysqld (via systemctl):                           [  OK  ]

3.2对备份目录做整理

[[email protected] ~]# mariabackup --prepare --target-dir=/data/backup

3.3将整理好的备份数据还原至数据库

[[email protected] ~]# mariabackup --copy-back --target-dir=/data/backup

3.4此时还原回去的数据属性还有问题,需要将其修改

[[email protected] ~]# ll /data/mysql/
total 12320
-rw-r----- 1 root root    16384 May  6 21:28 aria_log.00000001
-rw-r----- 1 root root       52 May  6 21:28 aria_log_control
drwx------ 2 root root      272 May  6 21:28 hellodb
-rw-r----- 1 root root      942 May  6 21:28 ib_buffer_pool
-rw-r----- 1 root root 12582912 May  6 21:28 ibdata1
drwx------ 2 root root     4096 May  6 21:28 mysql
drwx------ 2 root root       20 May  6 21:28 performance_schema
drwx------ 2 root root       20 May  6 21:28 test
-rw-r----- 1 root root      527 May  6 21:28 xtrabackup_info

[[email protected] ~]# chown -R mysql.mysql /data/mysql/

四、启动服务测试

[[email protected] ~]# service mysqld start
Starting mysqld (via systemctl):                           [  OK  ]
[[email protected] ~]# mysql -e "SHOW DATABASES;SHOW TABLES FROM hellodb;"
+--------------------+
| Database           |
+--------------------+
| hellodb            |
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
+-------------------+
| Tables_in_hellodb |
+-------------------+
| classes           |
| coc               |
| courses           |
| scores            |
| students          |
| teachers          |
| toc               |
+-------------------+

完全备份+增量备份及还原

在备份之前先创建出完全备份的目录以及增量备份的目录

[[email protected] ~]# mkdir -pv /dataa/backup/{full,inc1,inc2}
mkdir: created directory ‘/data/backup’
mkdir: created directory ‘/data/backup/full’
mkdir: created directory ‘/data/backup/inc1’
mkdir: created directory ‘/data/backup/inc2’

数据库内所存放的数据

[[email protected] ~]# mysql -e ‘SHOW DATABASES;‘
+--------------------+
| Database           |
+--------------------+
| hellodb            |
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+

一、对数据进行完全备份

[[email protected] ~]# mariabackup --backup --target-dir=/data/backup/full --user=root --password=‘‘

二、此时数据库内数据发生变化

[[email protected] ~]# mysql -e "INSERT hellodb.teachers VALUE(5,‘Li Xiaolong‘,30,‘M‘);"
[[email protected] ~]# mysql -e "SELECT * FROM hellodb.teachers WHERE tid>4;"
+-----+-------------+-----+--------+
| TID | Name        | Age | Gender |
+-----+-------------+-----+--------+
|   5 | Li Xiaolong |  30 | M      |
+-----+-------------+-----+--------+

三、对数据库进行增量备份

[[email protected] ~]# mariabackup --user=root --password=‘‘ --backup --incremental-basedir=/data/backup/full --target-dir=/data/backup/inc1

四、数据库内数据再次发生变化

[[email protected] ~]# mysql -e "INSERT hellodb.students(stuid,age,name) VALUE (26,35,‘Sun Wukong‘);"
[[email protected] ~]# mysql -e "SELECT * FROM hellodb.students WHERE stuid>25;"
+-------+------------+-----+--------+---------+-----------+
| StuID | Name       | Age | Gender | ClassID | TeacherID |
+-------+------------+-----+--------+---------+-----------+
|    26 | Sun Wukong |  35 | F      |    NULL |      NULL |
+-------+------------+-----+--------+---------+-----------+

五、再次对数据库做增量备份

[[email protected] ~]# mariabackup --user=root --password=‘‘ --backup --incremental-basedir=/data/backup/inc1 --target-dir=/data/backup/inc2

六、破坏数据库

[[email protected] ~]# rm -rf /data/mysql/*

七、恢复数据库

7.1先对数据库做清理,并停止数据库服务

[[email protected] ~]# rm -rf /data/mysql/*
[[email protected] ~]# service mysqld stop
Stopping mysqld (via systemctl):                           [  OK  ]

7.2对完全备份做预整理
因为后续还有增量备份,所以此处需要使用apply-log-only选项来阻止事务的回滚。

[[email protected] ~]# mariabackup --prepare --apply-log-only --target-dir=/data/backup/full

7.3合并第一次的增量备份
此为第一个增量备份后续还有第二个增量所以需要使用apply-log-only阻止回滚事务

[[email protected] backup]# mariabackup --prepare --apply-log-only --target-dir=/data/backup/full --incremental-dir=/data/backup/inc1

7.3合并第二次的增量备份
此为最后个增量备份无需再使用apply-log-only阻止回滚事务

[[email protected] backup]# mariabackup --prepare --target-dir=/data/backup/full --incremental-dir=/data/backup/inc2

7.4整理完毕将备份复制回数据库

[[email protected] backup]# mariabackup --copy-back --target-dir=/data/backup/full

7.5将数据库内的属主和属组进行更改

[[email protected] backup]# chown -R mysql.mysql /data/mysql/

八、重启服务测试

[[email protected] backup]# service mysqld start
Starting mysqld (via systemctl):                           [  OK  ]

[[email protected] backup]# msyql
MariaDB [hellodb]> select *from students where stuid>25;
+-------+------------+-----+--------+---------+-----------+
| StuID | Name       | Age | Gender | ClassID | TeacherID |
+-------+------------+-----+--------+---------+-----------+
|    26 | Sun Wukong |  35 | F      |    NULL |      NULL |
+-------+------------+-----+--------+---------+-----------+
1 row in set (0.00 sec)

MariaDB [hellodb]> select *from teachers where tid>4;
+-----+-------------+-----+--------+
| TID | Name        | Age | Gender |
+-----+-------------+-----+--------+
|   5 | Li Xiaolong |  30 | M      |
+-----+-------------+-----+--------+
1 row in set (0.00 sec)

其他的注意事项

1.在数据恢复之前必须先要停止MySQL服务
2.在还原时MySQL的数据库目录必须为空,否则不会覆盖
3.数据库内容还原后,其属主和属组为root需要手动将其全部改为mysql

原文地址:https://blog.51cto.com/11886307/2389857

时间: 2024-11-06 17:22:42

MySQL的备份还原(xtrabackup)的相关文章

mysql的备份: Xtrabackup的使用方法

Xtrabackup: Xtrabackup的优点:1.快速 ,支持并行备份.--parallel=8 2.在线备份备份,不阻塞读写(INNODB),对MYISAM添加全局锁3.支持在线搭建主从复制 Xtrabackup的基本实用方法: -- 全备innobackupex --defaults-file=/etc/my.cnf --user=root  --socket=/var/lib/mysql/mysql.sock --parallel=8 /home/backup/ /home/back

MySQL之备份还原,主从复制,主主复制。

数据库作为我们的日常工作中不可缺少的部分,那它内部数据的重要性显而易见,所以数据安全至关重要.确保数据的安全,我们就必须做好数据备份.简单说几个MySQL常用的备份工具以及如何利用这些工具实现数据的备份. 一:MySQL自带的工具---mysqldump,相信大家应该还有映像:# ls /usr/local/mysql/bi我们会看到此命令. 用法:mysqldump [options] [db_name [tbl_name ...]] 常用选项: --databases --备份数据库,后面可

mysql物理备份工具Xtrabackup安装配置

mysql物理备份工具Xtrabackup安装配置 1????Xtrabackup工具介绍 Xtrabackup是一个对InnoDB做物理数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品. Xtrabackup有两个主要的工具:xtrabackup.innobackupex (1)xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表. (2)innobackupex是用来备份非Inn

MYSQL数据库备份还原

MYSQL数据库备份还原 一.  数据库备份 备份数据是数据库管理最常用的操作.为了保证数据库中数据的安全,数据管理员需要定期地进行数据备份.一旦数据库遭到破坏,即可通过备份的文件来还原.因此,数据备份是很重要的工作. 1.使用mysqldump 命令备份 mysqldump 命令可以将数据库中的数据备份成一个文本文件.表的结构和表中的数据将存储在生成的文本文件中.mysqldump 命令的工作原理很简单: 它先查出需要备份的表的结构,再在文本文件中生成一个CREATE 语句,然后将表中的所有记

MySQL的备份还原(mysqldump)

MySQL的备份还原(mysqldump) MySQL的还原前提是要建立在,有完全备份和二进制日志开启的前提下,并且二进制日志文件和完全备份存放在与数据库文件不同的磁盘上,否则当磁盘发生损坏数据将无法进行恢复. 开启二进制日志 开启二进制日志需要将MySQL中的sql_log_bin和log_bin这两个选项1.开启sql_log_bin系统中默认开启sql_log_bin选项所以此处无需修改 MariaDB [(none)]> SHOW VARIABLES LIKE 'sql_log_bin'

xtrabackup进行MySQL数据库备份/还原

http://hongge.blog.51cto.com/ 使用xtrabackup进行MySQL数据库备份 前面介绍mysqldump备份方式是采用逻辑备份,其最大的缺陷就是备份和恢复速度都慢,对于一个小于50G的数据库而言,这个速度还是能接受的,但如果数据库非常大,那再使用mysqldump备份就不太适合了. 这时就需要一种好用又高效的工具,xtrabackup就是其中一款,号称免费版的InnoDB HotBackup. Xtrabackup实现是物理备份,而且是物理热备 目前主流的有两个工

Xtrabackup 对MYSQL进行备份还原

在操作MYSQL中注意两个概念: 干什么都记得 flush privileges; grant all on *.* to [email protected]'localhost' identified by 'password'  WITH GRANT OPTION  记得要加WITH GRANT OPTION ========================= 2,RDS MySQL 使用开源软件 Xtrabackup 对 MySQL 数据库进行备份.需要下载该软件,然后使用该软件进行恢复.

生产环境mysql快速备份工具XtraBackup使用案例

Mysql的备份有很多种方式,最常用的应该是mysqldump了,将数据库导出一个 sql文件,还原的时候source db.sql 就欢快的执行了.小伙伴愉快的布上一个shell脚本,配上cron,幸福的看着每天备份文件的生成,倍感安全.假如一个mysql超过了10G呢? 请相信我,导出的时间需要好几个小时,那还原呢,时间会更长.我曾经用sql还原一个6G的数据库,用了3个多小时. mysqldump这种逻辑备份的缺点就不多说了,说说xtrabackup,又是PERCONA,就冲这个名号,值得

备份校验两不误,MySQL自动备份还原校验设计详解

作者介绍庞阔,优朋普乐传媒运维基础部经理.负责数据库运营管理及平台设计开发,监控设计改进,问题跟踪处理,机房网络维护管理,目前四个专利已在专利局申请中.擅长数据库运维管理及Shell.Perl.PHP编写. 最近关于数据库故障出现的问题较多,不论大小公司对数据的备份要求都很高,但对校验数据备份的有效性要求更为迫切,很多公司对于自动备份和还原都已经形成体系,但对于还原后的备份有效性校验可能都不太完善,而且目前网上也没有较为完善的检验机制(可能我没找到). 对数据库备份的有效性校验的方法或样例选择,