数据库备份的重要性

  1. 提高系统的高可用性和灾难可恢复性,在数据库系统崩溃时,没有数据备份就没法找到数据。
  2. 使用数据库备份还原数据库,是数据库崩溃时提供数据恢复最小代价的最优方案。
  3. 没有数据库就没有一切,数据库备份是一种防范灾难的强力手段。

数据库备份的分类

  1. 物理备份:指对数据库操作系统的物理文件(例如数据文件、日志文件等)的备份。物理备份游客分为脱机备份(冷备份)和联机备份(热备份)。
    冷备份:在关闭数据库时进行的备份操作,能够较好地保证数据库的完整性。
    热备份:在数据库运行状态中进行操作,这种备份方法依赖于数据库的日志文件。
  2. 逻辑备份:指对数据库逻辑组件(如表等数据库对象)的备份。从数据库的备份策略角度,备份可分为完全备份、差异备份和增量备份。
    完全备份:每次对数据库进行完整的备份。可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象。
    差异备份:备份那些自从上次完全备份之后被修改过的文件,只备份数据库的部分内容。
    增量备份:只有那些在上次完全备份或者增量备份后被修改的文件才会被备份。

完全备份(在linux模式中进行备份操作)

完全物理备份

使用tar打包文件夹备份

  • 数据库压缩时会使用压缩率较大的xz格式压缩。
    rpm -q xz    //检查xz软件包是否安装
    yum -y install xz   //安装xz软件包
  • 对数据库文件夹(/usr/local/mysql/data/)进行打包操作
    tar Jcvf /opt/mysql-$(date +%F).tar.xz /usr/local/mysql/data/
         //备份数据库文件夹,并以年月日的形式命名
    ls /opt/
    mysql-2018-07-02.tar.xz

    MySQL完全、增量的备份与恢复

  • 对数据库文件进行恢复操作
    只需将数据库文件的压缩包,解压缩即可,即使整个/data/目录都丢失仍可找回
    mkdir /abc
    tar Jxf mysql-2018-07-03.tar.xz -C /abc/

    MySQL完全、增量的备份与恢复

    完全逻辑备份

    使用mysqldump工具备份

  • 备份某个数据库
    mysqldump -u root -p stady > /opt/stady.sql
    //备份stady库到/opt目录下,-p之后可跟密码,也可不写。不写就在回车之后输入密码验证。 **备份文件后缀都为.sql,前面名称见名知意即可**

    MySQL完全、增量的备份与恢复

  • 查看备份文件的内容
    MySQL完全、增量的备份与恢复
    1. 备份多个数据库
      mysqldump -u root -p --databases mysql stady > /opt/mysql-stady.sql

      MySQL完全、增量的备份与恢复

    2. 备份所有数据库
      mysqldump -u root -p --opt --all-databases > /opt//all.sql
    3. 备份数据库中的表
      mysqldump -u root -p stady info > /opt/stady-info.sql   //险些库名,再接表名
    4. 备份数据库的表结构
      mysqldump -u root -p -d stady info > /opt/decribe-info.sql
      // -d  库名+表名

      数据恢复

      登陆MySQL,使用source命令恢复

  • 恢复”备份数据库中的表“步骤中的info表
    [root@centos7-6 /]# mysql -u root -p 
    Enter password: 
    ···   //省略部分内容
    mysql> use stady;    //切换到库
    Database changed
    mysql> drop table info;   //删除info表
    Query OK, 0 rows affected (0.02 sec)
    mysql> show tables;       //查看库中表
    Empty set (0.00 sec)       //库中为空
    mysql> source /opt/stady-info.sql   //恢复info表,格式是source+备份文件路径和文件名称
    Query OK, 0 rows affected (0.02 sec)
    ···   //省略部分内容
    mysql> show tables;    //查看库中表
    +-----------------+
    | Tables_in_stady |
    +-----------------+
    | info            |   //info表已经成功恢复
    +-----------------+
    1 row in set (0.00 sec)
  • 使用mysql命令恢复表
    [root@centos7-6 /]# mysql -u root -p 
    Enter password: 
    ···   //省略部分内容
    mysql> use stady;    //切换到库
    Database changed
    mysql> drop table info;   //删除info表
    Query OK, 0 rows affected (0.02 sec)
    mysql> show tables;       //查看库中表
    Empty set (0.00 sec)       //库中为空
    mysql> quit               //退出数据库,切换到linux
    Bye
    [root@centos7-6 /]# mysql -u root -p stady < /opt/stady-info.sql   //在linux环境中恢复
    Enter password: 
    [root@centos7-6 /]# mysql -u root -p   //进入数据库查看
    Enter password: 
    ···   //省略部分内容
    mysql> use stady;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    Database changed
    mysql> show tables;
    +-----------------+
    | Tables_in_stady |
    +-----------------+
    | info            |   //info表已恢复
    +-----------------+
    1 row in set (0.00 sec)

    恢复库和恢复表的方式相同,但在恢复数据表时要注意,如果备份文件中只备份了表文件,此时mysql中又没有库时,若直接恢复,会失败,必须先创建库,然后再进行恢复。

    增量备份

    在MySQL数据库中创建stady库,创建info表,并插入数据

    mysql> use stady;
    mysql> select * from info;
    +----------+-------+
    | name     | score |
    +----------+-------+
    | zhangsan | 80.00 |
    | lisi     | 90.00 |
    +----------+-------+
    2 rows in set (0.00 sec)
  • 开启二进制日志
    vim /etc/my.cnf
    log-bin=mysql-bin   //在[mysqld]段插入该语句
    systemctl restart mysqld.service   //重启mysql服务,会在/data/目录下生成新的日志文件(空文件)

    MySQL完全、增量的备份与恢复
    MySQL完全、增量的备份与恢复

  • 使用mysqldump备份stady库
    mkdir /backup
    mysqldump -u root -p stady > /backup/stady.sql
    mysqladmin -u root -p flush-logs  //刷新生成新的日志文件,存在01中,新存在的02