zoukankan      html  css  js  c++  java
  • 二 数据库的备份与恢复

    一 数据库的备份

    1 普通备份
    MySQL -uroot -p  数据库名.表名  < 路径可自定义
    [root@es1 ~]# mysqldump -uroot -p  haha < /root/haha.sql
    2 完全备份
     MySQL -uroot -p  --all-databases  > 路径可自定义  (可备份所有库)
    [root@es1 ~]# mysqldump -uroot -p --all-databases > /root/alldb.sql
    3 同时备份指定的多个库
     MySQL -uroot -p  -B  库1  库2  > 路径可自定义  (可备份所有库)
    [root@es1 ~]# mysqldump -uroot -p -B mysql haha   > /root/haha+mysql.sql

    二 使用binlog日志

    binlog日志的介绍

    转自https://www.cnblogs.com/kevingrace/p/6065088.html

    一、binlog日志介绍
    1. 什么是binlog
    binlog日志用于记录所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句。语句以“事件”的形式保存,它描述数据更改。
    
    2. binlog作用
    因为有了数据更新的binlog,所以可以用于实时备份,与master/slave主从复制结合。
    
    3. binlog有关参数
    log_bin
    设置此参数表示启用binlog功能,并指定路径名称
    log_bin_index
    设置此参数是指定二进制索引文件的路径与名称
    binlog_do_db
    此参数表示只记录指定数据库的二进制日志
    binlog_ignore_db
    此参数表示不记录指定的数据库的二进制日志
    max_binlog_cache_size
    此参数表示binlog使用的内存最大的尺寸
    binlog_cache_size
    此参数表示binlog使用的内存大小,可以通过状态变量binlog_cache_use和binlog_cache_disk_use来帮助测试。
    binlog_cache_use:使用二进制日志缓存的事务数量
    binlog_cache_disk_use:使用二进制日志缓存但超过binlog_cache_size值并使用临时文件来保存事务中的语句的事务数量
    
    max_binlog_size
    Binlog最大值,最大和默认值是1GB,该设置并不能严格控制Binlog的大小,尤其是Binlog比较靠近最大值而又遇到一个比较大事务时,为了保证事务的完整性,不可能做切换日志的动作,只能将该事务的所有SQL都记录进当前日志,直到事务结束
    sync_binlog
    这个参数直接影响mysql的性能和完整性
    sync_binlog=0
    当事务提交后,Mysql仅仅是将binlog_cache中的数据写入Binlog文件,但不执行fsync之类的磁盘 同步指令通知文件系统将缓存刷新到磁盘,而让Filesystem自行决定什么时候来做同步,这个是性能最好的。
    sync_binlog=n,在进行n次事务提交以后,Mysql将执行一次fsync之类的磁盘同步指令,同志文件系统将Binlog文件缓存刷新到磁盘。
    Mysql中默认设置sync_binlog=0,即不作任何强制性的磁盘刷新指令,这时性能是最好的,但风险也是最大的。一旦系统绷Crash,在文件系统缓存中的所有Binlog信息都会丢失

    1 修改配置文件启用binlog日志

    [root@es1 ~]# vim /etc/my.cnf

    [mysqld]
    
    log-bin=mysql-bin    //启用二进制日志,并指定前缀
    server_id=1
    binglog_format=STATEMENT    ////在 Mysql5.7 中,binlog 日志格式默
    认为 ROW,但它不记录 sql 语句上下文相关信息。需要将 binlog 日志格式修改为 STATEMENT

    [root@es1 ~]# systemctl restart mysqld  #重启数据库

    查看binlog日志文件

    [root@es1 ~]# mysqlbinlog  --no-defaults /var/lib/mysql/mysql-bin.000001  

    数据恢复(按日志名恢复)

    #mysqlbinlog /logdir/plj.000001 | mysql -uroot -p123456

     数据恢复(按时间点)

    [root@dbsvr1 ~]# mysqlbinlog 
     --start-datetime="190419 19:55:47"    #开始时间点
     --stop-datetime="190419 20:06:39"    # 结束时间点
     /var/lib/mysql/mysql-bin.000002 | mysql -u root -p

    pos 点(偏移量)恢复

    #mysqlbinlog --start-position= 数 字 1 --stop-position= 数 字 2 /logdir/plj.000001 | mysql -uroot -p123456

     三 XtraBackup 备分工具

    1安装XtraBackup 备分工具

    1 )查看软件包的描述信息

    [root@es1 ~]# rpm -qpi percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm   查看软件包的描述信息

    2 )安装依赖安装依赖包 perl-DBD-MySQL perl-Digest-MD5 libev 其中libev可在网上去下载

    [root@es1 ~]# yum -y install perl-DBD-MySQL perl-Digest-MD5
    [root@es1 ~]# rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm   此包需要去网上找
    [root@es1 ~]# rpm -ivh percona-xtrabackup-*.rpm

    警告:percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm: 头V4 DSA/SHA1 Signature, 密钥 ID cd2efd2a: NOKEY
    错误:依赖检测失败:
    rsync 被 percona-xtrabackup-24-2.4.7-1.el7.x86_64 需要

     上面提示安装错误是缺少rsync软件依赖

    [root@es1 ~]# yum -y install rsync  
    [root@es1 ~]# rpm -ivh percona-xtrabackup-*.rpm
    警告:percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm: 头V4 DSA/SHA1 Signature, 密钥 ID cd2efd2a: NOKEY
    准备中... ################################# [100%]
    正在升级/安装...
    1:percona-xtrabackup-24-2.4.7-1.el7################################# [100%]

    3)确认安装的主要程序/脚本  显示以下内容就表示成功了

    [root@es1 ~]# rpm -ql percona-xtrabackup-24
    /usr/bin/innobackupex
    /usr/bin/xbcloud
    /usr/bin/xbcloud_osenv
    /usr/bin/xbcrypt
    /usr/bin/xbstream
    /usr/bin/xtrabackup
    /usr/share/doc/percona-xtrabackup-24-2.4.7
    /usr/share/doc/percona-xtrabackup-24-2.4.7/COPYING
    /usr/share/man/man1/innobackupex.1.gz
    /usr/share/man/man1/xbcrypt.1.gz
    /usr/share/man/man1/xbstream.1.gz
    /usr/share/man/man1/xtrabackup.1.gz

    2:使用 XtraBackup 执行数据库备份

    如果需要查看XtraBackup的用法 

    --host 主机名
    --port 3306
    --user 用户名
    --password 密码
    --databases="库名"
    --databases="库 1 库 2"
    --databases="库.表"
    --no-timestamp 不用日期命名备份文件存储的子目录,使用备份的数据库名做备份目录名
    --no-timestmap 不使用日期命名备份目
    --redo-only      日志回滚合并(最后一次增量备份日志回滚不需要此项)--apply-log-only
    --apply-log      准备还原(回滚日志)
    --copy-back     恢复数据
    --incremental 目录名      增量备份
    --incremental--basedir=目录名    增量备份时指定上一次备份数据存储的目录名
    --incremental-dir=目录名    准备恢复数据时,指定增量备份数据存储目录名
    --export     导出表信息
    import  导入表空间
    

      

    innobackupex  --help可以查到详细用法,当然全英文,可用谷歌或百度翻译

    完全备份   innobackupex --user=用户--password=密码   --databases=“库名” 备份路径

    [root@es1 ~]# innobackupex --user=root --password=123456 /backup/mysql
    [root@es1 ~]# ls /backup/mysql/2019-04-20_17-58-50/   #这就可以查询到你所有的备份内容了
    backup-my.cnf ib_buffer_pool mysql sys xtrabackup_binlog_info xtrabackup_info
    haha ibdata1 performance_schema xixihaha xtrabackup_checkpoints xtrabackup_logfile

    增量备份

    然后在数据库中添加一条记录在做一次备份
    语法:innobackupex --user=用户 --password=密码   --databases=“库名”  --incremental 指定增量备份目录名 --incremental-basedir=/完全备份目录/  --no-timestamp
    增量备份就上述公式可根据需求套用一些参数,第一次增量第二次增量没有去呗,就是需要指定不同的备份目录

    数据恢复(恢复完全备份)

    innobackupex  --user 用户名  --password  密码   --databases=“库名”   --apply-log   --redo-only  恢复完全备份的路径

    数据恢复(恢复增量)

    innobackupex  --user 用户名  --password  密码   --databases=“库名”   --apply-log   --redo-only  恢复完全备份的路径    --incremental-dir=“备份的增量目录”

    导出信息表

    innobackupex  --user 用户名  --password  密码   --databases=“库名”  --apply-log --export  /导出目录’

    恢复某个表

    首先要拷贝表信息文件到数据库文件存储目录 
    然后再给数据库文件目录授权
    mysql>system   chown  mysql:mysql    /var/lib/myql
    mysql>alter table 库名.表名  import tablespace  导入表空间
  • 相关阅读:
    CF1264E Beautiful League 解题报告
    CF1411G No Game No Life 解题报告
    Data structure on Bitcoin
    bitcoin Cryptography
    弹性布局Flex的基本语法
    Linq操作list
    dt某字段赋值
    List 添加数据
    dt 转 json 转实体
    队列
  • 原文地址:https://www.cnblogs.com/liucsxiaoxiaobai/p/10738680.html
Copyright © 2011-2022 走看看