zoukankan      html  css  js  c++  java
  • 数据备份与恢复 、

    数据备份与恢复
    1 为什么要备份数据?
    数据丢失或误删除时,使用备份文件恢复数据。

    2 数据备份方式?
    物理备份? 备份库或表对应文件
    cp -r /var/lib/mysql/mysql /opt/mysql.bak
    cp /var/lib/mysql/mysql/user.* /opt/

    tar -zcvf /opt/mysql.tar.gz /var/lib/mysql/mysql/*

    164 cp -r /mydata/mysql.bak/ /var/lib/mysql/mysql
    165 chown -R mysql:mysql /var/lib/mysql/mysql
    166 systemctl restart mysqld

    逻辑备份?备份时根据已有的库表及记录生成对应的sql命令,把

    sql保存到指定的备份文件里

    3数据备份策略?
    完全备份 备份所有数据(一台服务器 一个库 一张表)
    差异备份 备份自完全备份后所有新产生
    增量备份 备份自上一次备份后所有新产生

    完全备份+差异备份
    完全备份+增量备份

    4在生成环境下如何实现数据备份
    周期性计划任务 执行 备份脚本

    00 18 * * 1 sh /shell/allbak.sh

    5 数据备份时要考虑因素?
    备份方式 逻辑备份
    备份策略 ?完全 差异 增量
    数据备份频率? 1 小时 1天 1周
    数据备份的时间? 数据访问量小的时候执行备份
    存储空间可扩展? LV
    备份文件命名要有标识性? 使用日期做备份文件名


    完全备份+差异备份

    时间 t1 名
    18:00

    1 完全 10 1.sql 10
    2 差异 3 2.sql 3
    3 5 3.sql 8
    4 6 4.sql 14
    5 1 5.sql 15
    6 2 6.sql 17
    7 差异 3 7.sql 20


    完全备份+增量备份
    时间 t1 名
    18:00

    1 完全 10 1.sql 10
    2 增量 3 2.sql 3
    3 5 3.sql 5
    4 6 4.sql 6
    5 1 5.sql 1
    6 2 6.sql 2
    7 增量 3 7.sql 3


    完全备份
    时间 t1 名
    18:00

    1 完全 10 1.sql 10

    17:00
    2 3 2.sql 13

    3 5 3.sql 18
    4 6 4.sql 24
    5 1 5.sql 25
    6 2 6.sql 27
    7 3 7.sql 30
    ++++++++++++++++++++++++++++++++++
    完全备份
    #mysqldump -hlocalhost -uroot -p123qqq 数据库名

    > 目录名/名.sql

    数据库名的表示方式?
    --all-databases 备份一台服务上的所有数据
    数据库名 备份一个库里的所有表
    数据库名 表名 备份一张表里的所有数据
    -B 数据库名1 数据库名2 数据库名N 备份某几个库的所有数据

    #mkdir /databak
    #mysqldump -uroot -p123qqq userdb >

    /databak/userdb.sql

    #mysqldump -uroot -p123qqq teadb >

    /databak/teadb.sql

    完全恢复
    #mysql -hlocalhost -uroot -p123qqq 数据库名 < 目录

    名/名.sql

    mysql>drop database teadb;
    mysql>create database teadb;
    #mysql -uroot -p123qqq teadb < /databak/teadb.sql
    mysql> use teadb ; show tables;
    #crontab -e
    00 18 * * 1 /opt/teadbbak.sh &> /dev/null
    00 18 * * 2-7 /opt/baknewbinlogfile.sh

    vim /opt/baknewbinlogfile.sh
    #!/bin/bash
    备份每天新生成的binlog日志文件且正在使用的binlog日志文

    件不备份
    :wq
    vim /opt/teadbbak.sh
    #!/bin/bash
    if [ ! -e /databak ];then
    mkdir /databak
    fi
    day=`date +%F`
    mysqldump -uroot -p123qqq --flush-logs teadb >

    /databak/teadb-${day}.sql
    :wq
    # chmod +x /opt/teadbbak.sh

    只使用完全备份策略备份数据的缺点:
    a 使用完全备份文件恢复数据时只能把数据恢复到备份时的状态

    ,完全备份新产生的数据无法恢复。

    b 备份和恢复数据时都会对表加写锁。
    +++++++++++++++++++++++++++++++++++二

    、增量备份(启用mysql服务binlog日志做时时增量备份、安装

    第3方软件提供增量备份命令做备份)

    2.1启用mysql服务binlog日志做时时增量备份
    binlog日志 又叫二进制日志 ,是mysql数据服务日志文件的

    一种,记录客户端连接数据库服务后,执行的除查询之外的sql

    命令。


    mysql -hx.x.x.x -uroot -p123456
    mysql> select desc show tables
    mysql> create insert update delete grant revoke

    启用binlog日志
    mysql > show variables like "binlog_format";
    vim /etc/my.cnf
    [mysqld]
    server_id=12
    log_bin
    binlog_format="mixed"
    :wq
    #systemctl restart mysqld
    mysql > show variables like "binlog_format";

    ls /var/lib/mysql/主机名-bin.000001 500M+
    ls /var/lib/mysql/localhost-bin.index 索引文件

    查看binlog日志文件内容
    #mysqlbinlog /var/lib/mysql/localhost-bin.000001

    binlog日志文件记录sql命令的方式?
    时间点
    --start-datetime="yyyy-mm-dd hh:mm:ss"
    --stop-datetime="yyyy-mm-dd hh:mm:ss"
    pos点
    --start-position=数字
    --stop-position=数字

    执行binlog日志里的sql命令恢复数据
    #mysqlbinlog [选项] 日志文件名 | mysql -uroot -

    p123qqq

    #mysqlbinlog --start-position=300 --stop-

    position=1006 /var/lib/mysql/localhost-bin.000001 |

    mysql -uroot -p123qqq

    手动生成新的binlog日志?
    mysql> flush logs;
    # mysql -uroot -p123qqq -e "flush logs"
    # systemctl restart mysqld
    #mysqldump -uroot -p123qqq --flush-logs teadb t7 >

    /databak/t7.sql

    删除已有的binlog日志文件
    mysql> reset master;
    mysql> purge master logs to "binlog文件名";
    #rm -rf binlog日志文件

    自定义binlog日志文件存储的目录和文件名
    # mkdir /logdir
    # chown mysql /logdir
    # setenforce 0
    #vim /etc/my.cnf
    server_id=12
    #log_bin
    log_bin=/logdir/plj
    binlog_format="mixed"
    :wq
    #systemctl restart mysqld
    #ls /logdir/
    ++++++++++++++++++++++++++++
    2.3安装第3方软件percona提供增量备份命令做备份
    一款强大的在线热备份工具
    备份过程中不锁库表,适合生产环境
    由专业组织Percona提供(改进MySQL分支)

    主要含两个组件
    xtrabackup:C程序,支持InnoDB/XtraDB
    innobackupex:以Perl脚本封装xtrabackup,还支持

    MyISAM

    #yum -y install perl-DBD-MySQL perl-Digest-MD5
    #rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm
    # rpm -ivh percona-xtrabackup-24-2.4.7-

    1.el7.x86_64.rpm
    # rpm -qa | grep percona
    # rpm -ql percona-xtrabackup-24
    #man innobackupex
    #man xtrabackup

    #innobackupex <选项>
    1 innobackupex完全备份与恢复
    #mkdir /pljdir

    # innobackupex --user root --password 123qqq --

    databases="teadb" /pljdir --no-timestamp

    # innobackupex --user root --password 123qqq --

    databases="teadb" --apply-log /pljdir

    完全恢复
    # cp -r /var/lib/mysql/mysql /opt/mysql.bak
    #rm -rf /var/lib/mysql
    #mkdir /var/lib/mysql
    # innobackupex --user root --password 123qqq --

    databases="teadb" --copy-back /pljdir

    # cp -r /opt/mysql.bak /var/lib/mysql/mysql
    # chown -R mysql:mysql /var/lib/mysql
    #systemctl restart mysqld

    备份目录下配置文件说明
    backup-my.cnf
    xtrabackup_checkpoints
    xtrabackup_logfile
    ibdata1

    数据库 /var/lib/mysql/
    事务日志文件
    lsn 日志序列号
    ib_logfile0
    ib_logfile1
    ibdata1


    重新初始化数据库目录下的初始数据
    #systemctl stop mysqld
    #rm -rf /var/lib/mysql
    vim /etc/my.cnf
    [mysqld]
    #validate_password_policy=0
    #validate_password_length=6
    :wq
    #mysql_install_db --datadir=/var/lib/mysql --

    user=mysql
    #ls /var/lib/mysql/
    #rm -rf /var/lib/mysql/mysql
    #cp -r /opt/mysql.bak /var/lib/mysql/mysql
    #chown -R mysql:mysql /var/lib/mysql/mysql
    #systemctl start mysqld


    2 innobackupex增量备份
    完全备份 db101.t1 4---999
    #innobackupex --user root --password 123456 --

    databases="db101.t1" /fullbak --no-timestamp

    第1次增量备份 8888
    #innobackupex --user root --password 123456 --

    databases="db101.t1" --incremental /new1dir --

    incremental--basedir=/fullbak --no-timestamp

    第2次增量备份 7777
    #innobackupex --user root --password 123456 --

    databases="db101.t1" --incremental /new2dir --

    incremental--basedir=/new1dir --no-timestamp


    增量恢复步骤
    1 rm -rf /var/lib/mysql/
    2 恢复日志信息
    3 恢复数据
    4 重启数据库服务
    5 登录查看

    增量恢复步骤
    1 rm -rf /var/lib/mysql/
    2 mkdir /var/lib/mysql

    2 恢复日志信息
    #innobackupex --user root --password 123456 --

    databases="db106.t1" --apply-log --redo-only /onedir

    #innobackupex --user root --password 123456 --

    databases="db106.t1" --apply-log --redo-only /onedir

    --incremental-dir="/dir2"

    #innobackupex --user root --password 123456 --

    databases="db106.t1" --apply-log --redo-only /onedir

    --incremental-dir="/dir3"

    3 恢复数据
    #innobackupex --user root --password 123456 --

    databases="db106.t1" --copy-back /onedir

    4 重启数据库服务
    #cp -r /root/mysql.plj /var/lib/mysql/mysql
    #systemctl start mysqld
    #chown -R mysql:mysql /var/lib/mysql
    #systemctl stop mysqld
    #systemctl start mysqld
    5 登录查看
    mysql -uroot -p123456
    mysql> select * from db1.t1;


    +++++++++++++++++++++++++++++++
    3 使用完全备份文件恢复某个表的记录。
    db106.a/b/t1
    完全备份
    #innobackupex --user root --password 123456 --databases="db106" /db106all --no-timestamp

    #ls /db106all

    #mysql -uroot -p123456
    #drop table db106.a;

    恢复某个表的记录
    #innobackupex --user root --password 123456 --databases="db106" --apply-log --export /db106all

    #ls /db106all/a.*

    mysql> create table db106.a(id int);
    mysql> alter table db106.a discard tablespace;

    mysql> system cp /db106all/db106/a.{ibd,cfg,exp} /var/lib/mysql/db106/

    mysql> system chown mysql:mysql /var/lib/mysql/db106/a.*

    mysql> alter table db106.a import tablespace;
    mysql > select * from db106.a;

  • 相关阅读:
    Grails
    Grails
    Grails
    Grails
    Grails
    Grails
    PG
    TopShelf安装多实例
    Js 实现自定义事件
    HttpContext未null处理
  • 原文地址:https://www.cnblogs.com/fuzhongfaya/p/8952836.html
Copyright © 2011-2022 走看看