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

你可能感兴趣的:(MySQL)