mysql数据备份总结

mysql数据备份(重要)

​ 对于一个网站来说,数据是最重要的,也是无可替代的,服务器宕机可以更换硬件,项目丢失都可以根据之前的需求重写,但是数据丢失对于一个公司来说,是灾难性的,所以下面,主要介绍几种常用的mysql备份方式

数据的备份类型

数据的备份主要分为以下两类

  1. 完全备份:备份整个数据库
  2. 部分备份:备份部分数据集,又分为以下两种
    1. 增量备份:备份上一次备份以后的增量数据,优点:省空间;缺点:还原复杂
    2. 差异备份:本分上一次完全备份以后变化的数据,缺点:浪费空间;有点:还原简单

mysql的数据备份有以下几种

  1. 热备份:数据库进行备份时,读写不受影响
  2. 温备份:数据库进行备份时,可读不可写
  3. 冷备份:数据库进行备份时,不可读写,数据库也不可访问

在考虑备份方式时,还要考虑到数据库本身的存储引擎

引擎热备温备冷备
MyISAM×
InnoDB

数据备份与恢复

一、复制文件进行数据恢复
  1. 定时复制mysql目录下,data文件夹下相关数据库的文件夹
  2. 数据丢失后,直接将文件夹还原(不可重装数据库或在新数据库上进行直接复制,可能导致数据无法使用)
二、mysqldump+binlog进行数据恢复
  1. 定时利用mysqldump备份全表数据
  2. 定期备份binlog作为增量文件备份
  3. 数据丢失后,首先利用MySQLdump导出的数据进行恢复,然后将增量数据逐步恢复(恢复时间很长,尤其是表格数据较多时)
三、使用lvm2快照备份(未测试)
  1. 部署lvm环境

    #添加硬盘; 这里我们直接实现SCSI硬盘的热插拔, 首先在虚拟机中添加一块硬盘, 不重启
    [root@node1 ~]# ls /dev/sd*   #只有以下几块硬盘, 但是我们不重启可以让系统识别新添加的硬盘
    /dev/sda  /dev/sda1  /dev/sda2
    
    [root@node1 ~]# echo '- - -' > /sys/class/scsi_host/host0/scan 
    [root@node1 ~]# echo '- - -' > /sys/class/scsi_host/host1/scan 
    [root@node1 ~]# echo '- - -' > /sys/class/scsi_host/host2/scan 
    
    [root@node1 ~]# ls /dev/sd*    #看!sdb识别出来了
    /dev/sda  /dev/sda1  /dev/sda2  /dev/sdb
    
    
    [root@node1 ~]# fdisk /dev/sdb   #分区
    Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
    Building a new DOS disklabel with disk identifier 0xd353d192.
    Changes will remain in memory only, until you decide to write them.
    After that, of course, the previous content won't be recoverable.
    
    Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
    
    WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
             switch off the mode (command 'c') and change display units to
             sectors (command 'u').
    
    Command (m for help): n
    Command action
       e   extended
       p   primary partition (1-4)
    p
    Partition number (1-4): 1
    First cylinder (1-2610, default 1): 
    Using default value 1
    Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +15G
    
    Command (m for help): t
    Selected partition 1
    Hex code (type L to list codes): 8e
    Changed system type of partition 1 to 8e (Linux LVM)
    
    Command (m for help): w
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    Syncing disks.
    You have new mail in /var/spool/mail/root
    [root@node1 ~]# partx -a /dev/sdb
    BLKPG: Device or resource busy
    error adding partition 1
    
    ##创建逻辑卷
    [root@node1 ~]# pvcreate /dev/sdb1
      Physical volume "/dev/sdb1" successfully created
    [root@node1 ~]# vgcreate myvg /dev/sdb1 
      Volume group "myvg" successfully created
    [root@node1 ~]# lvcreate -n mydata -L 5G myvg 
      Logical volume "mydata" created.
    
    [root@node1 ~]# mkfs.ext4 /dev/mapper/myvg-mydata   #格式化
    [root@node1 ~]# mkdir /lvm_data
    [root@node1 ~]# mount /dev/mapper/myvg-mydata /lvm_data  #挂载到/lvm_data
    
    
    [root@node1 ~]# vim /etc/my.cnf    #修改mysql配置文件的datadir如下
    
    datadir=/lvm_data
    
    [root@node1 ~]# service mysqld restart  #重启MySQL
    
    ####重新导入employees数据库########略过####
    
  2. 创建快照卷并备份

    mysql> FLUSH TABLES WITH READ LOCK;     #锁定所有表
    Query OK, 0 rows affected (0.00 sec)
    
    [root@node1 lvm_data]# lvcreate -L 1G -n mydata-snap -p r -s /dev/mapper/myvg-mydata   #创建快照卷
      Logical volume "mydata-snap" created.
    
    mysql> UNLOCK TABLES;  #解锁所有表
    Query OK, 0 rows affected (0.00 sec)
    
    [root@node1 lvm_data]# mkdir /lvm_snap  #创建文件夹
    [root@node1 lvm_data]# mount /dev/myvg/mydata-snap /lvm_snap/  #挂载snap
    mount: block device /dev/mapper/myvg-mydata--snap is write-protected, mounting read-only
    
    [root@node1 lvm_data]# cd /lvm_snap/
    [root@node1 lvm_snap]# ls
    employees  ibdata1  ib_logfile0  ib_logfile1  mysql  mysql-bin.000001  mysql-bin.000002  mysql-bin.000003  mysql-bin.index  test
    [root@node1 lvm_snap]# tar cf /tmp/mysqlback.tar *  #打包文件到/tmp/mysqlback.tar
    
    [root@node1 ~]# umount /lvm_snap/  #卸载snap
    [root@node1 ~]# lvremove myvg mydata-snap  #删除snap
    
  3. 恢复数据

    [root@node1 lvm_snap]# rm -rf /lvm_data/*
    [root@node1 ~]# service mysqld start    #启动MySQL, 如果是编译安装的应该不能启动(需重新初始化), 如果rpm安装则会重新初始化数据库
    
    
    mysql> SHOW DATABASES;   #查看数据库, 数据丢失!
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | test               |
    +--------------------+
    3 rows in set (0.00 sec)
    
    [root@node1 ~]# cd /lvm_data/
    [root@node1 lvm_data]# rm -rf * #删除所有文件
    [root@node1 lvm_data]# tar xf /tmp/mysqlback.tar     #解压备份数据库到此文件夹 
    [root@node1 lvm_data]# ls  #查看当前的文件
    employees  ibdata1  ib_logfile0  ib_logfile1  mysql  mysql-bin.000001  mysql-bin.000002  mysql-bin.000003  mysql-bin.index  test
    
    三、xtrabackup数据恢复
    1. 备份数据

      [root@node1 ~]# mkdir /extrabackup  #创建备份目录
      [root@node1 ~]# innobackupex --user=root /extrabackup/ #备份数据
      ###################提示complete表示成功*********************
      
      [root@node1 ~]# ls /extrabackup/  #看到备份目录
      2016-04-27_07-30-48 
      [root@node1 ~]# innobackupex --apply-log /extrabackup/2016-04-27_07-30-48/  #指定备份文件的目录
      
      #一般情况下下面三行结尾代表成功*****************
      InnoDB: Starting shutdown...
      InnoDB: Shutdown completed; log sequence number 369661462
      160427 07:40:11 completed OK!
      
      [root@node1 ~]# cd /extrabackup/2016-04-27_07-30-48/
      [root@node1 2016-04-27_07-30-48]# ls -hl  #查看备份文件
      total 31M
      -rw-r----- 1 root root  386 Apr 27 07:30 backup-my.cnf
      drwx------ 2 root root 4.0K Apr 27 07:30 employees
      -rw-r----- 1 root root  18M Apr 27 07:40 ibdata1
      -rw-r--r-- 1 root root 5.0M Apr 27 07:40 ib_logfile0
      -rw-r--r-- 1 root root 5.0M Apr 27 07:40 ib_logfile1
      drwx------ 2 root root 4.0K Apr 27 07:30 mysql
      drwx------ 2 root root 4.0K Apr 27 07:30 performance_schema
      drwx------ 2 root root 4.0K Apr 27 07:30 test
      -rw-r----- 1 root root   27 Apr 27 07:30 xtrabackup_binlog_info
      -rw-r--r-- 1 root root   29 Apr 27 07:40 xtrabackup_binlog_pos_innodb
      -rw-r----- 1 root root  117 Apr 27 07:40 xtrabackup_checkpoints
      -rw-r----- 1 root root  470 Apr 27 07:30 xtrabackup_info
      -rw-r----- 1 root root 2.0M Apr 27 07:40 xtrabackup_logfile
      
      
    2. 恢复数据

      [root@node1 ~]# rm -rf /data/*   #删除数据文件
      
      ***不用启动数据库也可以还原*************
      
      [root@node1 ~]# innobackupex --copy-back /extrabackup/2016-04-27_07-30-48/   #恢复数据, 记清使用方法
      
      #########我们这里是编译安装的mariadb所以需要做一些操作##########
      [root@node1 data]# killall mysqld
      
      [root@node1 ~]# chown -R mysql:mysql ./* 
      [root@node1 ~]# ll /data/      #数据恢复
      total 28704
      -rw-rw---- 1 mysql mysql    16384 Apr 27 07:43 aria_log.00000001
      -rw-rw---- 1 mysql mysql       52 Apr 27 07:43 aria_log_control
      -rw-rw---- 1 mysql mysql 18874368 Apr 27 07:43 ibdata1
      -rw-rw---- 1 mysql mysql  5242880 Apr 27 07:43 ib_logfile0
      -rw-rw---- 1 mysql mysql  5242880 Apr 27 07:43 ib_logfile1
      -rw-rw---- 1 mysql mysql      264 Apr 27 07:43 mysql-bin.000001
      -rw-rw---- 1 mysql mysql       19 Apr 27 07:43 mysql-bin.index
      -rw-r----- 1 mysql mysql     2166 Apr 27 07:43 node1.anyisalin.com.err
      
      
      [root@node1 data]# service mysqld restart
      MySQL server PID file could not be found!                  [FAILED]
      Starting MySQL..                                           [  OK  ]
      
      MariaDB [(none)]> SHOW DATABASES;  #查看数据库, 已经恢复
      +--------------------+
      | Database           |
      +--------------------+
      | information_schema |
      | employees          |
      | mysql              |
      | performance_schema |
      | test               |
      +--------------------+
      
    3. 增量备份

      #########创建连两个数据库以供测试#####################
      MariaDB [(none)]> CREATE DATABASE TEST1;
      Query OK, 1 row affected (0.00 sec)
      
      MariaDB [(none)]> CREATE DATABASE TEST2;
      Query OK, 1 row affected (0.00 sec)
      
      [root@node1 ~]# innobackupex --incremental /extrabackup/ --incremental-basedir=/extrabackup/2016-04-27_07-30-48/ 
      
      [root@node1 ~]# ls /extrabackup/2016-04-27_07-57-22/ #查看备份文件
      total 96
      -rw-r----- 1 root root   386 Apr 27 07:57 backup-my.cnf
      drwx------ 2 root root  4096 Apr 27 07:57 employees
      -rw-r----- 1 root root 49152 Apr 27 07:57 ibdata1.delta
      -rw-r----- 1 root root    44 Apr 27 07:57 ibdata1.meta
      drwx------ 2 root root  4096 Apr 27 07:57 mysql
      drwx------ 2 root root  4096 Apr 27 07:57 performance_schema
      drwx------ 2 root root  4096 Apr 27 07:57 test
      drwx------ 2 root root  4096 Apr 27 07:57 TEST1
      drwx------ 2 root root  4096 Apr 27 07:57 TEST2
      -rw-r----- 1 root root    21 Apr 27 07:57 xtrabackup_binlog_info
      -rw-r----- 1 root root   123 Apr 27 07:57 xtrabackup_checkpoints
      -rw-r----- 1 root root   530 Apr 27 07:57 xtrabackup_info
      -rw-r----- 1 root root  2560 Apr 27 07:57 xtrabackup_logfile
      
      [root@node1 ~]# innobackupex --apply-log --redo-only /extrabackup/2016-04-27_07-30-48/
      [root@node1 ~]# innobackupex --apply-log --redo-only /extrabackup/2016-04-27_07-30-48/ --incremental-dir=/extrabackup/2016-04-27_07-5
      7-22/
      
    4. 恢复数据

      [root@node1 ~]# rm -rf /data/*   #删除数据
      
      [root@node1 ~]# innobackupex --copy-back /extrabackup/2016-04-27_07-30-48/     #整理增量备份之后可以直接通过全量备份还原
      
      [root@node1 ~]# chown -R mysql.mysql /data/
      

总结

备份方法备份速度恢复速度便捷性功能一般用于
cp一般、灵活性低很弱少量数据备份
mysqldump一般、可无视存储引擎的差异一般中小型数据量的备份
lvm2快照一般、支持几乎热备、速度快一般中小型数据量的备份
xtrabackup较快较快实现innodb热备、对存储引擎有要求强大较大规模的备份
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Michael·Ren

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值