MySQL:5.备份还原的几种方式


title: MySQL:5.备份还原的几种方式
categories: 数据库
tags:
- MySQL
timezone: Asia/Shanghai
date: 2019-03-10


环境

[root@centos181001 ~]# cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core)

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.25    |
+-----------+
1 row in set (0.00 sec)

方式1:Xtrabackup

Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁)。XtraBackup支持所有的Percona Server、MySQL、MariaDB和Drizzle。

  • (1)备份过程快速、可靠
  • (2)备份过程不会打断正在执行的事务
  • (3)能够基于压缩等功能节约磁盘空间和流量
  • (4)自动实现备份检验
  • (5)还原速度快
  • (6)可以备份MyISAM, InnoDB, XtraDB表。但在处理Myisam时需要加一个读锁。

1.安装

wget https://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.13/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.13-1.el7.x86_64.rpm
yum install -y percona-xtrabackup-24-2.4.13-1.el7.x86_64.rpm

    xtrabackup:一个由C编译而来的二进制文件,只能备份InnoDB和XtraDB数据。
    xbcrypt:用来加密或解密备份的数据。
    xbstream:用来解压或压缩xbstream格式的压缩文件。

2.innobackupex常用参数

--user=USER                     指定备份用户,不指定的话为当前系统用户
--password=PASSWD               指定备份用户密码
--port=PORT                     指定数据库端口
--defaults-group=GROUP-NAME     在多实例的时候使用
--host=HOST                     指定备份的主机,可以为远程数据库服务器
--apply-log                     应用 BACKUP-DIR 中的 xtrabackup_logfile 事务日志文件。
                                一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。
                                因此,此时数据文件仍处于不一致状态。
                                “准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件使得数据文件处于一致性状态。
--database                      指定需要备份的数据库,多个数据库之间以空格分开。
                                格式为:--database="db1[.tb1] db2[.tb2]" 多个库之间以空格隔开,如果此选项不被指定,将会备份所有的数据库。
--defaults-file                 指定mysql的配置文件,只能从给定的文件中读取默认选项。
                                且必须作为命令行上的第一个选项;必须是一个真实的文件,它不能是一个符号链接。
--copy-back                     将备份数据复制回原始位置
--incremental                   增量备份,后面跟要增量备份的路径
--incremental-basedir=DIRECTORY 增量备份时使用指向上一次的增量备份所在的目录
--incremental-dir=DIRECTORY     增量备份还原的时候用来合并增量备份到全量,用来指定全备路径
--rsync                         加快本地文件传输,适用于non-InnoDB数据库引擎。不与--stream共用
--no-timestamp                  生成的备份文件不以时间戳为目录.
--tables-file=FILE              此选项的参数需要是一个文件名,此文件中每行包含一个要备份的表的完整名称,格式为databasename.tablename。
                                该选项传递给 xtrabackup --tables-file,与--tables选项不同,只有要备份的表的库才会被创建。
                                注意:部分备份(--include、--tables-file、--database)需要开启 innodb_file_per_table 。
--redo-only                     在“准备基本完整备份” 和 “合并所有的增量备份(除了最后一个增备)”时使用此选项。
                                它直接传递给xtrabackup的 xtrabackup --apply-log-only 选项,使xtrabackup跳过"undo"阶段,只做"redo"操作。
                                如果后面还有增量备份应用到这个全备,这是必要的

3.全量备份

innobackupex \
    --defaults-file=/etc/my.cnf \
    --user=root \
    --password=Xiaoliu123! \
    --socket=/var/lib/mysql/mysql.sock \
    /data/

4.备份文件说明

[root@centos181002 2019-03-10_00-46-04]# ll
总用量 17788
-rw-r-----. 1 root root      488 3月  10 00:46 backup-my.cnf
-rw-r-----. 1 root root      349 3月  10 00:46 ib_buffer_pool
-rw-r-----. 1 root root 12582912 3月  10 00:46 ibdata1
drwxr-x---. 2 root root     4096 3月  10 00:46 mysql
drwxr-x---. 2 root root     8192 3月  10 00:46 performance_schema
drwxr-x---. 2 root root     8192 3月  10 00:46 sys
drwxr-x---. 2 root root      138 3月  10 00:46 test
-rw-r-----. 1 root root       33 3月  10 00:46 xtrabackup_binlog_info
-rw-r-----. 1 root root      115 3月  10 00:46 xtrabackup_checkpoints
-rw-r-----. 1 root root      540 3月  10 00:46 xtrabackup_info
-rw-r-----. 1 root root  5581312 3月  10 00:46 xtrabackup_logfile
  • 其中,mysql/, performance_schema/, sys/ ,test/ 下存放的是数据库文件。
  • backup-my.cnf:备份命令用到的配置选项信息;
  • ib_buffer_pool:buffer pool 中的热数据,当设置 innodb_buffer_pool_dump_at_shutdown=1 ,在关闭 MySQL 时,会把内存中的热数据保存在磁盘里 ib_buffer_pool 文件中,位于数据目录下。
  • ibdata1:备份的共享表空间文件;
  • xtrabackup_binlog_info:mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置;
  • xtrabackup_checkpoints:备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;
  • xtrabackup_info:记录备份的基本信息,uuid、备份命令、备份时间、binlog、LSN、以及其他加密压缩等信息。
  • xtrabackup_logfile:备份的重做日志文件。

5.全备恢复

## 1.准备一个完全备份
innobackupex --apply-log /root/2019-03-10_00-46-04

## 2.关闭数据库
systemctl stop mysqld

## 3.删除原有数据文件
mkdir /home/bak
mv /var/lib/mysql/* /home/bak

## 4.执行恢复
innobackupex \
    --defaults-file=/etc/my.cnf \
    --copy-back \
    --rsync \
    /root/2019-03-10_00-46-04

## 5.更改权限
chown -R mysql.mysql /var/lib/mysql

## 6.启动服务
systemctl start mysqld
systemctl status mysqld

## 7.登录MySQL
mysql -uroot -p

6.增量备份 - 直接以之前的全备为基准,在其基础上做增量备份

1.增量备份

## 1.插入测试数据
insert into test.linux values ('zengliang1', 'zengliang1');

## 2.做增量备份1,以之前的``2019-03-10_00-46-04``为基准
innobackupex \
    --defaults-file=/etc/my.cnf \
    --user=root \
    --password=Xiaoliu123! \
    --socket=/var/lib/mysql/mysql.sock \
    --incremental \
    /data/inc \
    --incremental-basedir=/data/2019-03-10_00-46-04/ \
    --parallel=2

## 3.再插入测试数据
insert into test.linux values ('zengliang2', 'zengliang2');

## 4.做增量备份2:(以增量1为基准/data/inc/2019-03-10_01-45-25/)
innobackupex \
    --defaults-file=/etc/my.cnf \
    --user=root \
    --password=Xiaoliu123! \
    --socket=/var/lib/mysql/mysql.sock \
    --incremental \
    /data/inc \
    --incremental-basedir=/data/inc/2019-03-10_01-45-25/ \
    --parallel=2

2.增量备份恢复

增量备份的恢复需要有3个步骤

  1. 恢复完全备份
  2. 恢复增量备份到完全备份(开始恢复的增量备份要添加--redo-only参数,到最后一次增量备份要去掉--redo-only)
  3. 对整体的完全备份进行恢复,回滚未提交的数据
## 1.准备一个全备
innobackupex --apply-log --redo-only /root/2019-03-10_00-46-04/

## 2.将增量1应用到完全备份
innobackupex --apply-log --redo-only /root/2019-03-10_00-46-04/ --incremental-dir=/root/inc/2019-03-10_01-45-25

## 3.将增量2应用到完全备份(这里的增量2是最后一个备份,所以不要加``--redo-only``参数了)
innobackupex --apply-log /root/2019-03-10_00-46-04/ --incremental-dir=/root/inc/2019-03-10_01-49-56

## 4.把所有合在一起的完全备份整体进行一次apply操作,回滚未提交的数据
innobackupex --apply-log /root/2019-03-10_00-46-04/

## 5.开始执行恢复操作(这里的5-10跟全备恢复的2-7完全一致)
## 5.关闭数据库
systemctl stop mysqld

## 6.删除原有数据文件
mkdir /home/bak
mv /var/lib/mysql/* /home/bak

## 7.执行恢复
innobackupex \
    --defaults-file=/etc/my.cnf \
    --copy-back \
    --rsync \
    /root/2019-03-10_00-46-04

## 8.更改权限
chown -R mysql.mysql /var/lib/mysql

## 9.启动服务
systemctl start mysqld
systemctl status mysqld

## 10.登录MySQL
mysql -uroot -p

方式2:mysqldump命令备份

mysqldump命令将数据库中的数据备份成一个文本文件。表的结构和表中的数据将存储在生成的文本文件中。

mysqldump命令的工作原理很简单。它先查出需要备份的表的结构,再在文本文件中生成一个CREATE语句。然后,将表中的所有记录转换成一条INSERT语句。然后通过这些语句,就能够创建表并插入数据。

1.备份

## 备份全库
mysqldump -uroot -pXiaoliu123! --all-databases >/home/alldatabases.sql

## 备份全库并直接压缩
mysqldump -uroot -pXiaoliu123! --all-databases | gzip > backupfile.sql.gz

## 备份databases库
mysqldump -uroot -pXiaoliu123! --databases test > /home/db_test.sql

## 备份test库的linux表
mysqldump -uroot -pXiaoliu123! test linux > /home/table_linux.sql

## 仅备份数据库结构
mysqldump -uroot -pXiaoliu123! --no-data --databases test > db_test_no-data.sql
mysqldump -uroot -pXiaoliu123! --no-data --all-databases > db_test_no-data.sql


## 语法
[root@centos181001 home]# mysqldump
Usage: mysqldump [OPTIONS] database [tables]
OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR     mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options, use mysqldump --help

2.还原

mysql -uroot -pXiaoliu123! mysql < alldatabases.sql

附录:

XtraBackup8.0下载地址:https://www.percona.com/downloads/Percona-XtraBackup-LATEST/

XtraBackup2.4下载地址:https://www.percona.com/downloads/Percona-XtraBackup-2.4/LATEST/

https://www.percona.com/downloads/

特色Percona开源项目:https://www.percona.com/software

https://blog.csdn.net/vkingnew/article/details/83012316

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容