zoukankan      html  css  js  c++  java
  • MySQL备份与还原

    一 理解MySQL备份与恢复

    备份:存储的数据副本;原始数据,持续改变。

    恢复:把副本应用到线上系统;仅能恢复至备份操作时刻的数据状态。

    时间点恢复:binary logs。

    为什么备份?
    1.灾难恢复:硬件故障(冗余)、软件故障(bug)、自然灾害、黑客攻击、误操作、...
    2.用于测试。

    备份时应该注意事项:
    1.能容忍最多丢失多少数据;
    2.恢复数据需要在多长时间内完成;
    3.需要恢复哪些数据;
    4.做恢复演练:
     测试备份的可用性;
     增强恢复操作效率;
     ...

    备份类型:
    1.备份的数据的集范围:
     完全备份和部分备份
      完全备份:整个数据集;
      部分备份:数据集的一部分,比如部分表;
    2.完全备份、增量备份、差异备份:
     完全备份
     增量备份:仅备份自上一次完全备份或 增量备份以来变量的那部数据;
     差异备份:仅备份自上一次完全备份以来变量的那部数据;
    3.物理备份、逻辑备份:
     物理备份:复制数据文件进行备份;
     逻辑备份:从数据库导出数据另存在一个或多个文件中;
    4.根据数据服务是否在线:
     热备:读写操作均可进行的状态下所做的备份;
     温备:可读但不可写状态下进行的备份;
     冷备:读写操作均不可进行的状态下所做的备份。

    备份需要考虑因素:
    1.锁定资源多长时间?
    2.备份过程的时长?
    3.备份时的服务器负载?
    4.恢复过程的时长?

    备份策略:
    1.全量+差异
    2.全量+增量
    3.备份手段:物理、逻辑

    备份什么?
    数据、二进制日志、InnoDB的事务日志、代码(存储过程、存储函数、触发器、事件调度器)、服务器的配置文件。

    备份工具:
    1.mysqldump:mysql服务自带的备份工具;逻辑备份工具:
     完全、部分备份;
     InnoDB:热备;
     MyISAM:温备。
    2.xtrabackup:
     由Percona提供,开源工具,支持对InnoDB做热备,物理备份工具:
      全量备份、部分备份;
      全量备份、增量备份;
      全量备份、差异备份;

    备份策略:
    1.完全+差异+binlog
    2.完全+增量+binlog
    3.备份,多久一次?
     数据变化量
     可用的备份存储空间

    二 MySQL备份与恢复工具介绍

    1.mysqldump:
    逻辑备份、完全备份、部分备份;
    二次封装工具:
    mydumper(perl脚本)
    phpMyAdmin
    msyqldump Usage:

    Usage: mysqldump [OPTIONS] database [tables]
    OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
    OR     mysqldump [OPTIONS] --all-databases [OPTIONS]
    


    选项:
    MyISAM存储引擎:支持温备,备份时要锁定表:

    -x, --lock-all-tables          #锁定所有库的所有表,读锁
    -l, --lock-tables           #锁定指定库所有表
    


    InnoDB存储引擎:支持温备和热备:

    --single-transaction          #创建一个事务,基于此快照执行备份;
    


    其它选项:

    -R, --routines            #存储过程和存储函数;
    --triggers             #备份触发器
    -E, --events            #备份调度器
    --master-data[=#]
      1:记录为CHANGE MASTER TO语句,此语句不被注释
      2:记录为CHANGE MASTER TO语句,此语句被注释
    --flush-logs            #锁定表完成后,即进行日志刷新操作
    


    示例:

    [root@node1 ~]# mysqldump -hlocalhost -uroot --databases hellodb > /tmp/hellodb-$(date +%F).sql
    MariaDB [hellodb]> SELECT * FROM students;
    +-------+---------------+-----+--------+---------+-----------+
    | StuID | Name          | Age | Gender | ClassID | TeacherID |
    +-------+---------------+-----+--------+---------+-----------+
    |     1 | Shi Zhongyu   |  22 | M      |       2 |         3 |
    |     2 | Shi Potian    |  22 | M      |       1 |         7 |
    |     3 | Xie Yanke     |  53 | M      |       2 |        16 |
    |     4 | Ding Dian     |  32 | M      |       4 |         4 |
    |     5 | Yu Yutong     |  26 | M      |       3 |         1 |
    |     6 | Shi Qing      |  46 | M      |       5 |      NULL |
    |     7 | Xi Ren        |  19 | F      |       3 |      NULL |
    |     8 | Lin Daiyu     |  17 | F      |       7 |      NULL |
    |     9 | Ren Yingying  |  20 | F      |       6 |      NULL |
    |    10 | Yue Lingshan  |  19 | F      |       3 |      NULL |
    |    11 | Yuan Chengzhi |  23 | M      |       6 |      NULL |
    |    12 | Wen Qingqing  |  19 | F      |       1 |      NULL |
    |    13 | Tian Boguang  |  33 | M      |       2 |      NULL |
    |    14 | Lu Wushuang   |  17 | F      |       3 |      NULL |
    |    15 | Duan Yu       |  19 | M      |       4 |      NULL |
    |    16 | Xu Zhu        |  21 | M      |       1 |      NULL |
    |    17 | Lin Chong     |  25 | M      |       4 |      NULL |
    |    18 | Hua Rong      |  23 | M      |       7 |      NULL |
    |    19 | Xue Baochai   |  18 | F      |       6 |      NULL |
    |    20 | Diao Chan     |  19 | F      |       7 |      NULL |
    |    21 | Huang Yueying |  22 | F      |       6 |      NULL |
    |    22 | Xiao Qiao     |  20 | F      |       1 |      NULL |
    |    23 | Ma Chao       |  23 | M      |       4 |      NULL |
    |    24 | Xu Xian       |  27 | M      |    NULL |      NULL |
    |    25 | Sun Dasheng   | 100 | M      |    NULL |      NULL |
    +-------+---------------+-----+--------+---------+-----------+
    MariaDB [hellodb]> DELETE FROM students WHERE StuID=14;
    MariaDB [hellodb]> SHOW MASTER LOGS;
    +------------------+-----------+
    | Log_name         | File_size |
    +------------------+-----------+
    | mysql-bin.000001 |       489 |
    +------------------+-----------+
    MariaDB [hellodb]> exit
    [root@node1 ~]# mysqldump -hlocalhost -uroot --master-data=1 --databases hellodb > /tmp/hellodb-$(date +%F).sql
    CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=489;   (此行未被注释)
    [root@node1 ~]# mysqldump -hlocalhost -uroot --master-data=2 --databases hellodb > /tmp/hellodb-$(date +%F).sql
    -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=489;  (此行被注释)
    [root@node1 ~]# mysqldump -hlocalhost -uroot --master-data=2 --flush-logs --single-transaction --databases hellodb > /tmp/hellodb-$(date +%F).sql
    MariaDB [(none)]> SHOW MASTER LOGS;
    +------------------+-----------+
    | Log_name         | File_size |
    +------------------+-----------+
    | mysql-bin.000001 |       532 |
    | mysql-bin.000002 |       245 |
    +------------------+-----------+
    MariaDB [hellodb]> DELETE FROM students WHERE StuID=10;
    MariaDB [hellodb]> DROP DATABASE hellodb;
    MariaDB [(none)]> exit;
    [root@node1 mysql]# mysqlbinlog -j 245 mysql-bin.000002 > /tmp/hellodb.binlog.sql
    备份到另一主机:
    [root@node1 mysql]# scp /tmp/hellodb* root@172.18.67.12:/tmp/
    [root@node2 ~]# mysql < /tmp/hellodb-2017-06-03.sql
    [root@node2 ~]# mysql
    MariaDB [(none)]> use hellodb;
    MariaDB [hellodb]> SELECT * FROM students;
    +-------+---------------+-----+--------+---------+-----------+
    | StuID | Name          | Age | Gender | ClassID | TeacherID |
    +-------+---------------+-----+--------+---------+-----------+
    |     1 | Shi Zhongyu   |  22 | M      |       2 |         3 |
    |     2 | Shi Potian    |  22 | M      |       1 |         7 |
    |     3 | Xie Yanke     |  53 | M      |       2 |        16 |
    |     4 | Ding Dian     |  32 | M      |       4 |         4 |
    |     5 | Yu Yutong     |  26 | M      |       3 |         1 |
    |     6 | Shi Qing      |  46 | M      |       5 |      NULL |
    |     7 | Xi Ren        |  19 | F      |       3 |      NULL |
    |     8 | Lin Daiyu     |  17 | F      |       7 |      NULL |
    |     9 | Ren Yingying  |  20 | F      |       6 |      NULL |
    |    10 | Yue Lingshan  |  19 | F      |       3 |      NULL |
    |    11 | Yuan Chengzhi |  23 | M      |       6 |      NULL |
    |    12 | Wen Qingqing  |  19 | F      |       1 |      NULL |
    |    13 | Tian Boguang  |  33 | M      |       2 |      NULL |
    |    14 | Lu Wushuang   |  17 | F      |       3 |      NULL |
    |    15 | Duan Yu       |  19 | M      |       4 |      NULL |
    |    16 | Xu Zhu        |  21 | M      |       1 |      NULL |
    |    17 | Lin Chong     |  25 | M      |       4 |      NULL |
    |    18 | Hua Rong      |  23 | M      |       7 |      NULL |
    |    19 | Xue Baochai   |  18 | F      |       6 |      NULL |
    |    20 | Diao Chan     |  19 | F      |       7 |      NULL |
    |    21 | Huang Yueying |  22 | F      |       6 |      NULL |
    |    22 | Xiao Qiao     |  20 | F      |       1 |      NULL |
    |    23 | Ma Chao       |  23 | M      |       4 |      NULL |
    |    24 | Xu Xian       |  27 | M      |    NULL |      NULL |
    |    25 | Sun Dasheng   | 100 | M      |    NULL |      NULL |
    +-------+---------------+-----+--------+---------+-----------+
    MariaDB [hellodb]> exit
    [root@node2 ~]# mysql < /tmp/hellodb.binlog.sql 
    [root@node2 ~]# mysql
    MariaDB [(none)]> use hellodb;
    MariaDB [hellodb]> SELECT * FROM students;
    +-------+---------------+-----+--------+---------+-----------+
    | StuID | Name          | Age | Gender | ClassID | TeacherID |
    +-------+---------------+-----+--------+---------+-----------+
    |     1 | Shi Zhongyu   |  22 | M      |       2 |         3 |
    |     2 | Shi Potian    |  22 | M      |       1 |         7 |
    |     3 | Xie Yanke     |  53 | M      |       2 |        16 |
    |     4 | Ding Dian     |  32 | M      |       4 |         4 |
    |     5 | Yu Yutong     |  26 | M      |       3 |         1 |
    |     6 | Shi Qing      |  46 | M      |       5 |      NULL |
    |     7 | Xi Ren        |  19 | F      |       3 |      NULL |
    |     8 | Lin Daiyu     |  17 | F      |       7 |      NULL |
    |     9 | Ren Yingying  |  20 | F      |       6 |      NULL |
    |    11 | Yuan Chengzhi |  23 | M      |       6 |      NULL |
    |    12 | Wen Qingqing  |  19 | F      |       1 |      NULL |
    |    13 | Tian Boguang  |  33 | M      |       2 |      NULL |
    |    14 | Lu Wushuang   |  17 | F      |       3 |      NULL |
    |    15 | Duan Yu       |  19 | M      |       4 |      NULL |
    |    16 | Xu Zhu        |  21 | M      |       1 |      NULL |
    |    17 | Lin Chong     |  25 | M      |       4 |      NULL |
    |    18 | Hua Rong      |  23 | M      |       7 |      NULL |
    |    19 | Xue Baochai   |  18 | F      |       6 |      NULL |
    |    20 | Diao Chan     |  19 | F      |       7 |      NULL |
    |    21 | Huang Yueying |  22 | F      |       6 |      NULL |
    |    22 | Xiao Qiao     |  20 | F      |       1 |      NULL |
    |    23 | Ma Chao       |  23 | M      |       4 |      NULL |
    |    24 | Xu Xian       |  27 | M      |    NULL |      NULL |
    |    25 | Sun Dasheng   | 100 | M      |    NULL |      NULL |
    +-------+---------------+-----+--------+---------+-----------+
    

    实现了时间点还原,删除的第10行没被还原
    注意:
    (1) 脚本化、周期性进行(进行充分测试);
    (2) 备份结果要另存,建议异地存储;对备份的结果做测试;
    (3) 配置mysqldump使用binlog做增量备份;    

    2.xtrabackup:
    MyISAM:温备,不支持增量备份;
    InnoDB:热备,增量;
    物理备份,速率快、可靠;备份完成后自动校验备份结果集是否可用;还原速度快;

    Usage: [innobackupex [--defaults-file=#] --backup | innobackupex [--defaults-file=#] --prepare] [OPTIONS]
    The  innobackupex tool is a Perl script that acts as a wrapper for the xtrabackup C program.
    


    备份 --> 应用日志 --> 还原
    完全备份:
    完全+binlog(总结):
    备份:innobackupex  --user  --password=  --host=  /PATH/TO/BACKUP_DIR
    准备:innobackupex --apply-log  /PATH/TO/BACKUP_DIR
    恢复:innobackupex --copy-back
    注意:--copy-back需要在mysqld主机本地进行,mysqld服务不能启动;
    innodb_log_file_size可能要重新设定; 
    总结:完全+增量+binlog
    备份:完全+增量+增量+...
    完全+差异
    准备:
     

    innobackupex --apply-log --redo-only BASEDIR 
    innobackupex --apply-log --redo-only BASEDIR  --incremental-dir=INCREMENTAL-DIR
    


    恢复:
        innobackupex --copy-back BASEDIR
    备份单库:
        --databases
    总结:
     mysqldump+binlog
     lvm2+cp/tar+binlog
     xtrabackup(innodb)+binlog
    示例:
    备份:

    MariaDB [hellodb]> GRANT ALL ON *.* TO buser@'172.18.67.%' IDENTIFIED BY 'bpass';
    MariaDB [hellodb]> FLUSH PRIVILEGES;
    [root@node2 ~]# mkdir /mydata/backup -pv
    [root@node2 ~]# innobackupex --user=buser --host=172.18.67.12 --password=bpass --databases=hellodb /mydata/backup/
     备份hellodb库
    [root@node2 ~]# innobackupex --user=buser --host=172.18.67.12 --password=bpass /mydata/backup/
     备份全部
    


    恢复:

    [root@node1 ~]# rm /var/lib/mysql/* -rf
    [root@node2 backup]# scp -rp 2017-06-04_14-09-37 root@172.18.67.11:/tmp/
    [root@node1 ~]# systemctl stop mariadb
    [root@node1 ~]# innobackupex --user=root --host=localhost --copy-back /tmp/2017-06-04_14-09-37/
    [root@node1 ~]# chown -R mysql.mysql /var/lib/mysql/
    [root@node1 ~]# systemctl start mariadb
    
  • 相关阅读:
    “#ifdef __cplusplus extern "C" { #endif”的定义
    【原创】分布式之redis复习精讲
    python爬虫入门(六) Scrapy框架之原理介绍
    PYTHON面试
    14.Ubuntu基本命令
    python爬虫入门(五)Selenium模拟用户操作
    python爬虫入门(四)利用多线程爬虫
    python爬虫入门(三)XPATH和BeautifulSoup4
    python爬虫入门(一)urllib和urllib2
    7.Ajax
  • 原文地址:https://www.cnblogs.com/iuskye/p/6940623.html
Copyright © 2011-2022 走看看