zoukankan      html  css  js  c++  java
  • 数据库05 使用percona软件来进行数据备份

    1.为什么要与用percona来备份

      常见的MySQL备份工具

        —跨平台性差

        —备份时间长、冗余备份、浪费存储空间

      mysqldump备份缺点:

        —效率较低、备份与还原速度慢,锁表(即备份数据库中的一个表时,其他表都不能使用)

        —备份过程中,数据插入和更新操作被阻塞

    xtraBackup工具

      款强大的在线热备份工具

        —备份过程中不锁表库,适合生产环境

        —由专业组织percona提供

      主要包含两个组件

        —xtrabackup :C程序。支持innoDB/XtreDB存储系统

        —innobackupex :以Perl脚本分装xtrabackup ,还支持mylsam

    2.安装软件

    1. root@host50 ~]# rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm
    2. [root@host50 ~]# yum -y install percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm

    3.命令格式

    ]# innobackupex  选项

    命令常用选项

    命令:

    *完全备份(没有指明数据库名,会将整个数据库的所有库都备份下来)
    ]# innobackupex  --user 用户名  --password 密码 备份目录名   --no-timestamp

    (默认备份时的文件名称会自动以时间日期格式命名,可用--no-timestamp 来取消)

    ]#innobackupex --apply-log  目录名  //准备恢复数据

    这是备份的目录名,备份完成后,目录下不仅有 数据库下的数据,还有描述备份信息的配置文件(xtrabackup 开头的)

    [root@host50 ~]# ls /allbak
    backup-my.cnf  ib_buffer_pool  mysql      sys                   xtrabackup_info
    db1  ibdata1      performance_schema  xtrabackup_checkpoints  xtrabackup_logfile

    *完全恢复(在需要恢复的客户机上进行,首先要将之前数据库备份的数据目录(假设为  /alldbk  )  scp 到客户机上)

    ]# innobackupex --copy-back  目录名 //恢复数据

    恢复步骤:

      1)停止数据库服务

      ]#systemctl stop mysqld

      2)清空数据库目录

      rm -rf /var/lib/mysql/*

      3)准备恢复数据

    (把备份完成后又改变的数据文件的信息,和 已经备份完的数据合并到一块,这就是备份不锁表的原因)

      innobackupex --apply-log  /alldbk  

      4)拷贝数据(完成后数据库目录下就会出现准备备份之后拷贝目录下的文件)

      innobackupex --copy-back  /alldbk 

      5)修改数据库文件的所属主和所属组为mysql

      chown -R mysql:mysql /var/lib/mysql

      6)启动服务

      systemctl start mysqld

      netstat  -utnlp | grep :3306   查看一下服务有没有开启

      7)管理员权限下查看数据

      因为这里的数据库为主数据库服务端的,所有mysql -uroot -p密码  这个密码填原来数据库的密码,而不是现在客户端的密码

    ############################################################################################################

    在完全备份中,恢复单张表(类似一张表中的数据丢失了)

    步骤:

      1)删除没有数据的表空间

        表空间:存储数据的文件,这个文件在 数据库目录下数据库名下

      每个表都有对应的 .frm (存放表结构) 和.ibd (表空间,存储表里的数据)文件

    [root@localhost ~]# ls /var/lib/mysql/abc123
    db.opt  gz.frm  gz.ibd  T1.frm  T1.ibd  T2.frm  T2.ibd  T3.frm  T3.ibd  T4.frm  T4.ibd  yg.frm  yg.ibd

    将没有数据的表空间文件删除

    > mysql   alter table  库名.表名  discard tablespace;

      2)导出表信息

        在备份文件中备份的数据库中也有.ibd 表空间,备份文件中的表空间数据是完整的

     innobackupex --apply-log --export  /allbak

      3)拷贝表信息文件到数据库目录下

    root@host50 ~]# cp /allbak/db3/user2.{cfg,exp,ibd} /var/lib/mysql/db3/

      4)修改表信息文件的所有者及组用户为mysql

    root@host50 ~]# chown mysql:mysql /var/lib/mysql/db3/user2.*    

      5)导入表空间

    mysql> alter  table db3.user2   import  tablespace;

      6)删除数据库目录下的表信息文件

    [root@host50 ~]# rm -rf /var/lib/mysql/db3/user2.cfg
    [root@host50 ~]# rm -rf /var/lib/mysql/db3/user2.exp

      7)查看表记录

    mysql> select  * from db3.user2;

    3 案例3:增量备份与恢复

    在增量备份前通常有一次完全备份

    3.1 问题

    • 具体要求如下:
    • 备份所有数据
    • 备份新产生的数据
    • 删除数据
    • 使用备份文件恢复数据

    3.2 步骤

    实现此案例需要按照如下步骤进行。

    步骤一:备份所有数据,在提供备份的主机执行

    1)完全备份 (备份所有数据到/fullbak目录)

     
    1. [root@host50 ~]# innobackupex --user root --password 123456 /fullbak() --no-timestamp

    步骤二:增量备份 (每次执行备份,值备份新数据,在50主机执行)

    1) 插入新记录,并做增量备份

    1. mysql> insert into db3.user2 values(5,"jack");// 插入新记录,多写几条
    2. [root@host50 ~]# innobackupex --user root --password 123456 --incremental /new1dir --incremental-basedir=/fullbak --no-timestamp //第1次增量备份 ,数据存储目录/new1dir

    2) 插入新记录,并做增量备份

    mysql> insert into db3.user2 values(6,"jack");// 插入新记录,多写几条

    [root@host50 ~]# innobackupex --user root --password 123456 --incremental /new2dir --incremental-basedir=/newdir1 --no-timestamp //第2次增量备份 ,数据存储目录/new2dir

    3) 把备份文件拷贝给做备份的目标主机

    1. [root@host50 ~]# scp -r /fullbak root@192.168.4.51:/root/
    2. [root@host50 ~]# scp -r /new1dir/ root@192.168.4.51:/root/
    3. [root@host50 ~]# scp -r /new2dir/ root@192.168.4.51:/root/

    步骤三:在目标主机恢复数据

    1) 停止服务,并清空数据

     
    1. [root@host51 ~]# systemctl stop mysqld
    2. [root@host51 ~]# rm -rf /var/lib/mysql/*

    2) 合并日志

     
    1. [root@host51 ~ ]# innobackupex --apply-log --redo-only /root/fullbak //准备恢复数据
    2. [root@host51 ~ ]# innobackupex --apply-log --redo-only /root/fullbak --incremental-dir=/root/new1dir //合并日志(恢复增量)
    3. [root@host51 ~ ]# innobackupex --apply-log --redo-only /root/fullbak --incremental-dir=/root/new2dir //合并日志(恢复增量)
    4. [root@host51 ~ ]# rm -rf /root/new2dir //恢复后,可以删除了
    5. [root@host51 ~ ]# rm -rf /root/new1dir //恢复后,可以删除了

    3) 恢复数据

     
    1. [root@host51 ~ ]# innobackupex --copy-back /root/fullbak //拷贝文件到数据库目录下
    2. [root@host51 ~ ]# chown -R mysql:mysql /var/lib/mysql //修改所有者与组用户
    3. [root@host51 ~ ]# systemctl start mysqld //启动服务
    4. [root@host51 ~ ]# mysql -uroot -p123456 //登录
    5. mysql> select count(*) from db3.user; //查看数据
  • 相关阅读:
    UDP协议测试
    openstack ussusi ubuntu 20 centos8 dracut initqueue timeout
    wol linux远程通过数据帧自动开机
    openStack proformancee bottlenecks options optimized
    find 搜索排除搜索目录
    Ipv6
    golang学习笔记 ---日志库 logrus
    golang学习笔记---- 格式化IO
    golang学习笔记 --- struct 嵌套
    golang学习笔记---HTTPS
  • 原文地址:https://www.cnblogs.com/zhanglei97/p/11615713.html
Copyright © 2011-2022 走看看