• MariaDB——备份与恢复



    备份和恢复

     为什么要备份?
        灾难恢复:硬件故障、软件故障、自然灾害、黑客攻击、误操作
        测试
        要注意的点:
          备份需要多少时间
          能够容忍多少的数据丢失
          恢复数据需要在多长时间完成
          需要恢复哪些数据
           1、做还原测试,用户测试备份的可用性
           2、还原演练
         备份的时长很重要,备份是要消耗磁盘io的。
         还要做数据库配置文件参数的备份。
     
     备份类型
        完全备份,部分备份
           完全备份:整个数据集
           部分备份:只备份数据子集
        完全备份、增量备份、差异备份
           增量备份:只备份最近一次完全备份或者增量备份以来的变化的数据。
           差异备份:仅备份最近一次完全备份以来的变化的数据。
        热备、温备、冷备
           热备:读写操作均能执行
           温备:读操作可以,但是写不行
           冷备:读写操作均不能执行
       
         Myisam:温备、不能热备;
         Innodb:热备;
       
        物理备份、逻辑备份
           物理备份:直接复制数据文件进行备份,与存储引擎无关。
           逻辑备份:从数据库‘导出’数据另存进行备份。
      
           物理备份——直接拷贝,你要确保没有数据写入,所以物理备份最好使用温备,先将表锁住。
           逻辑备份——二进制日志
       
     备份时要考量的因素
          持续多久
          备份过程的时间长
          备份负载:如果负载较高,可能需要停掉。
          恢复时间长短
          备份的时候做好先后手,如果不行怎么办?不行怎么退出?
     备份什么
          数据
          二进制日志,innodb的事务日志
          代码(存储过程、存储函数、触发器、时间调度器)
          服务器的配置文件,各个参数设置
     设计备份方案
          数据集:完全备份+增量备份+二进制日志 | 完全备份+差异备份+二进制日志
          备份手段:物理备份、逻辑备份
          对于较大体量的数据建议使用物理备份,对于较小的数据建议使用逻辑备份。
          物理备份和逻辑备份,两种备份方式的恢复时间有差异。
     备份工具的选择
        mysqldump+复制binlog:
           mysqldump:完全备份
           复制binlog中指定时间范围的event:增量备份
        lvm2快照+复制binlog
           lvm2快照:适用cp或者tar等做物理备份:完全备份
           复制binlog中指定时间范围的event:增量备份
        xtrabackup|mariabackup
           由percona提供的支持对Innodb做热备的工具:物理备份
           既可以做全量也可以做增量
      
        mysqldump——逻辑备份工具
        lvm2和xtrabackup|mariabackup——都是物理备份工具
      
        lvm2——确保数据库没有任何的数据写入,也即要锁表。
      
     备份、恢复方法
        基于二进制文件的恢复:
           方式一、
           算好要恢复的数据的时间段,将其中的binlog记录的sql语句重定向输出到bin.sql文件中
           mysqlbinlog  --start-datetime=“2019-06-08 22:55:13” --stop-datetime="2019-06-08 22:58:11" mysql-bin.000001 > bin.sql
           进入数据库,source一下这个文件
           source bin.sql
           方式二、
           mysqlbinlog /var/lib/mysql/mysql-bin.000005 --stop-position=1389 | msyql -uroot -proot
           #没有start就从头开始,有start就依据start开始
       
        lvm2备份恢复:
           pvcreate /dev/sdb1
           vgcreate testvg /dev/sdb1
           lvcreate -L 1G -n testlv testvg
           mkfs -t ext4 /dev/testvg/testlv
           mount /dev/testvg/testlv /test   #写入/etc/fstab 或者/etc/rc.local来让它开机自动挂载
           #挂载使用,将/test设置为数据库的数据存储目录,然后依照lvm2快照来对其中的数据进行快照备份。
       
           然后使用卷快照来备份数据
           1、lvm2是物理备份,先锁表
            flush tables with read lock;
           2、快照
            lvcreate -L 1G -s -p rw -n snap_testlv /dev/testvg/testlv
             -L —— --size
             -s —— --snap
             -p —— --permission rw|r
             -n —— --name
             /dev/testvg/testlv : 参照复制的目录
           3、unlock tables;
           #锁表之后一定要记得解锁
           4、mount /dev/testvg/snap_testlv /snap_test  #挂载使用,数据验证
           #这里需要注意的是,xfs文件系统不支持卷快照
       
           #这个时候你就可以在/snap_test中cp其中的内容了。
           #note:还原的时候要确保的你的属主和属组都是mysql,如果是root那么数据库会出问题。
       
        mariabackup:物理备份工具
           Xtrabackup——是mysql的备份工具,实际上也可以用于mariadb,但是仅限于10以前。
           10以后要用mariabackup
           Mariabackup:
           物理备份工具,可以实现在线备份。
           它是根据事务日志来备份的,在10.3.x及以上版本使用xtrabackup工具会有问题,原因可能是10.3版本的redo日志格式和以前不一样了。
           #note:事务日志要删除就成对成组删除,删除单个可能会让数据失去一致性,数据库会起不来。
           安装:
           yum install MariaDB-backup  #前提是有MariaDB的源
           全备+恢复:
            1、全量备份
            mariabackup --backup --target-dir=/root/fullbackup --user=root --password=root
            2、准备全备数据
            mariabackup --prepare --target-dir=/root/fullbackup --user=root --password=root
            3、还原数据(确保数据目录为空)
            mariabackup --copy-back --target-dir=/root/fullbackup --user=root --password=root
            4、修改属组属主
            chown -R mysql.mysql /var/lib/mysql
        
           全量+增量+恢复:
            1、全量备份
            mariabackup --backup --target-dir=/root/fullbackup --user=root --password=root
            2、增量备份
            mariabackup --backup --target-dir=/root/inc1 --incremental-basedir=/root/fullbackup --user=root --password=root
            3、准备全备数据
            mariabackup --prepare --target-dir=/root/fullbackup --user=root --password=root
            4、增量和全备的合并
            mariabackup --prepare --target-dir=/root/fullbackup --user=root --password=root --incremental-dir=/root/inc1/ --apply-log-only
             --apply-log-only:在准备增量备份时,必须跳过未提交事务的回滚,使用--apply-log-only选项防止回滚阶段
            5、恢复数据(确保数据目录下是空的)
            mariabackup --copy-back --target-dir=/root/fullbackup --user=root --password=root
            6、修改属组属主
            chown -R mysql.mysql /var/lib/mysql
            如果增量不止一个呢?怎么合并?   一直去合并就可以,做增量的时候一定要加上--apply-log-only。


        mysqldump逻辑备份工具:
           #备份testdb数据库(-l表示备份单个数据库的时候锁定该库的所有表,-x当对所有的数据库备份时锁定所有数据库的所有表)
           mysqldump -uroot -proot -l --databases testdb > testdb.sql
           #备份所有数据库
           mysqldump -uroot -proot -x --all-databases > all_databases.sql
           #备份testdb数据库下的students表
           mysqldump -uroot -proot testdb students > students.sql
           #如果要备份多个表那么使用空格隔开即可。
           mysqldump -uroot -proot testdb students test_table > both.sql
           #还原数据(sql命令)
           source testdb.sql  #注意文件的路径,在当前工作目录之下。
           #涉及锁表,温备;Mysqldump不能实现增量备份。
       
        全备+增量+二进制——>恢复    #还要去筛选一下二进制文件的时间
        当数据上了一定的量级之后,使用mysqldump去备份只能是杯水车薪。
       
      数据库更换目录
         如果是由yum安装的数据库,默认数据目录是在/var/lib/mysql,如果需要更改:
          vim /etc/my.cnf.d/server.cnf
          [mysqld]
          datadir=/test3/
          pid_file=/test3/localhost.pid
          socket=/test3/mysql.sock
          wsrep_data_home_dir=/test3/
          log-bin=mysql-bin
          [client]
          socket=/test3/mysql.sock
         chown -R mysql.mysql /test3
         #重启数据库:service mariadb restart
         然后进入数据库查看dir:
         show variables like ’%datadir%‘;
         #实际上写入配置文件的都是参数
     
     

  • 相关阅读:
    Android渐变GradientDrawable叠加组合环ring
    72.spring boot讨论群【从零开始学Spring Boot】
    71.mybatis 如何获取插入的id【从零开始学Spring Boot】
    Android GradientDrawable的XML实现
    服务器端架构及实战 — C#分享
    70.打印所有Spring boot载入的bean【从零开始学Spring Boot】
    69. JPA实体Bean的生命周期【从零开始学Spring Boot】
    Android版网易云音乐唱片机唱片磁盘旋转及唱片机机械臂动画关键代码实现思路
    服务器架构及实战(架构篇)- PHP建站
    创建MyOffice项目
  • 原文地址:https://www.cnblogs.com/getbird/p/11738975.html
Copyright © 2020-2023  润新知