zoukankan      html  css  js  c++  java
  • Mysql--备份

    一 备份分类

     1 根据服务是否在线继续

      热备份  读写均不受影响

      温备份  仅可执行读操作/写操作

      冷备份  也称离线备份 读写操作均终止

     2 根据备份时是否直接复制数据文件

      物理备份  直接复制数据文件 速度快

      逻辑备份  将数据对象导出至文本文件中 速度慢 丢失浮点精度(sql语句) 但方便使用文本根据直接进行处理 可移植能力强

     3 根据备份数据内容

      完全备份  备份全部数据

      增量备份  仅备份上次完全备份或增量备份以后变化的数据

      差异备份  仅备份上次完全备份以来变化的数据

     4 备份时间选择

      数据访问量较小的时候做备份

    二 备份工具

     1 mysqldump  mysql官方提供的逻辑备份工具 备份和恢复速度较慢 不太合适数据库>50G

      备份:

        表  mysqldump -u用户 -p密码 库名 表1 [表2 ...] > /path/tables.sql

        库  mysqldump -u用户 -p密码 -B 库1 [库2...] > /path/databases.sql

        全备  mysqldump -u用户 -p密码 -A > /path/all.sql

      恢复:

        表  mysql -u用户 -p密码 库名 < /path/tables.sql

        库  mysql -u用户 -p密码 < /path/databases.sql

        全备  mysql -u用户 -p密码 < /path/all.sql

      常用选项:

        -B  做库备份时指定索要备份的库

        -A  全库备份

        -x  给所有的表加锁

        -F  备份后刷新日志(启动新的日志记录)

     2 Xtrabackup

      介绍  Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写)

      原理  备份开始时首先会开启一个后台检测进程,实时检测mysq redo的变化,一旦发现有新的日志写入,立刻将日志记入后台日志文件xtrabackup_log中,

          之后复制innodb的数据文件,系统表空间文件ibdatax,复制结束后,执行flush tables with readlock,然后复制.frm MYI MYD等文件,

          完成后执行unlock tables,最后停止xtrabackup_log,备份完成

      版本兼容性   MySQL 5.6及之前的版本需要安装 Percona XtraBackup 2.3及以上,安装指导参见官方文档Percona XtraBackup 2.3

              MySQL 5.7版本需要安装 Percona XtraBackup 2.4及以上,安装指导参见官方文档Percona XtraBackup 2.4

              MySQL 8.0版本需要安装 Percona XtraBackup 8.0,安装指导参见官方文档Percona XtraBackup 8.0

      安装  yum -y install xtrabackup

      全备  innobackupex --user=用户 --password=密码 /backup/

          innobackupex --user=用户 --password=密码 --no-timestamp /backup/full/  指定已有目录

      全备还原  innobackupex --apply-log /backup/full    还原准备 以保证数据一致性

            /etc/init.d/mysqld stop           停掉数据库

            rm -rf /data/mysql/*            删除数据目录中所有数据

            innobackupex --copy-back /backup/full    执行还原操作

        可能出现问题:1)找不到datadir

                 vim /etc/my.cnf  设置datadir = /data/mysql/

               2)还原后数据库起不来(无权限)

                 chown mysql.mysql -R /data/mysql

      增量备份(先做全备)  innobackupex --user=用户 --password=密码 --incremental /backup/(备份后存放路径) --incremental-basedir=/backup/1(备份起始文件)

                  innobackupex --user=用户 --password=密码 --incremental /backup/ --incremental-basedir=/backup/2

      增备还原  innobackupex --apply-log --redo-only /backup/1              #合并,还原准备

            innobackupex --apply-log --redo-only /backup/full/ --incremental-dir=/backup/2

            innobackupex --apply-log --redo-only /backup/full/ --incremental-dir=/backup/3

            /etc/init.d/mysqld stop

            rm -rf /data/mysql/*

            innobackupex --copy-back /backup/full

    三 定时备份

     下为转载文章 来自:https://www.cnblogs.com/user-sunli/p/13917315.html

     每周的周日进行一次全备;周一到周六每天做上一天增量,每周轮询一次。

     备份方案: xtrabackup全备+增量

    [root@localhost ~]# crontab -l
    0 3 * * 7 /root/allbak.sh &> /dev/null
    0 3 * * 1-6 /root/newbak.sh &> /dev/null
    [root@localhost ~]# cat allbak.sh 
    #!/bin/bash
    [ ! -e /backup ]&& mkdir /backup    #新建个文件夹专门放备份文件
    day=date +%F                        #定义日期是时间
    user=root
    pass=123456
    #用innobackupex做完全备份
    innobackupex --user $user --password $pass /backup/allbak${day} --no-timestamp
    #启用binlog日志,每次完全备份之后,每周刷新一遍binlog日志
    mysql -u$user -p$pass -e "flush logs"
    [root@localhost ~]# cat newbak.sh
    #!/bin/bash
    d1=date +%F                     #定义时间,用日期来区分
    d2=date +%F -d "-1 days"        #找到昨天的日期,好指明上一次备份的备份文件
    dir1=/backup/allbak${d2}        #昨天做的完全备份文件
    dir2=/backup/newbak${d2}        #昨天做的增量备份文件
    user=root
    pass=123456
    [ ! -e /backup ]&& mkdir /backup        #如果文件不存在,则创建文件夹
    if [ -e ${dir1} ];then          #判断昨天做的是完全备份 Y指定昨天备份的完全备份文件
        innobackupex --user $user --password $pass --incremental /backup/newbak${d1} --incremental-basedir=${dir1} --no-timestamp
    elif [ -e ${dir2} ];then        #判断昨天做的是增量备份 Y指定昨天备份的增量备份文件
        innobackupex --user $user --password $pass --incremental /backup/newbak${d1} --incremental-basedir=${dir2} --no-timestamp
    else                   #昨天既没有做增量备份,又没有做完全备份,则做一次完全备份。
        innobackupex --user $user --password $pass /backup/allbak${d1} --no-timestamp 
    fi
  • 相关阅读:
    Best Time to Buy and Sell Stock III
    Valid Palindrome
    Longest Substring Without Repeating Characters
    Copy List with Random Pointer
    Add Two Numbers
    Recover Binary Search Tree
    Anagrams
    ZigZag Conversion
    Merge k Sorted Lists
    Distinct Subsequences
  • 原文地址:https://www.cnblogs.com/Xinenhui/p/14083710.html
Copyright © 2011-2022 走看看