• 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
  • 相关阅读:
    wpf数据验证实例及常用方法小结
    wpf自定义colorpicker
    DataGrid绑定Dictionary问题
    DataTemplate和ControlTemplate的关系
    Validation Rule和Binding Group
    WPF converter(包含传递复杂参数)
    【链接】Eclipse的Debug调试技巧
    安装apache服务出错,无法启动此程序,因为计算机中丢失VCRUNTIME140.dll
    apache解压版安装服务
    apache——(OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 : AH00072: make_sock: could not bind to address [::]:443
  • 原文地址:https://www.cnblogs.com/Xinenhui/p/14083710.html
Copyright © 2020-2023  润新知