zoukankan      html  css  js  c++  java
  • Centos下mysql数据库备份与恢复的方法

    一、mysqldump工具备份

    mysqldump由于是mysql自带的备份工具,所以也是最常用的mysql数据库的备份工具。支持基于InnoDB的热备份。但由于是逻辑备份,所以速度不是很快,适合备份数据量比较小的场景。

    mysqldump完全备份+二进制日志 —>实现时间点恢复

    温备:

    在使用MyISAM引擎中,只能使用温备份,这时候要防止数据的写入,所以先加上读锁

    这时候可以进入数据库手动加读锁。这样比较麻烦,在mysqldump工具中直接有一个加锁的选项

    mysqldump --databases mydatabase --lock-all-tables --flush-logs> /tmp/backup-`date +%F-%H-%M`.sql

    如果是针对某张表备份,只要在数据库名称后面加上表名称就行了

    这里注意,要实现时间点的恢复,加上--flush-logs选项,在使用备份文件恢复后,然后再基于二进制日志进行时间点的恢复

    时间点的恢复方法

    mysqlbinlog mysql-bin.000000x > /tmp/PointTime.sql

    然后用mysql命令导入这个sql脚本就行了

    热备:
    如果使用的是InnoDB引擎,就不必进行对数据库加锁的操作,加一个选项既可以进行热备份:--single-transaction
    mysqldump --databases mydb --single-transaction  --flush-logs --master-data=2 > /tmp/backup-`date +%F-%H-%M`.sql

    注意点
    恢复的时刻关闭二进制日志
    mysql>set sql_log_bin=0;

    例子:

    # vim /usr/work/newsbackup.sh
    # //填写以下内容
    #!/bin/bash
    # Program
    # use mysqldump to Fully backup  news database data per week!
    #History(版本)
    #  2015-07-27 first
    #path(定义目录)
    BakDir=/usr/work/mysql/backup
    Days=7  #DAYS=7代表删除7天前的备份,即只保留最近7天的备份
    DelDate=` date -d -7day +%Y%m%d `   #删除ftp服务器空间7天前的备份
    echo "You are in backup dir"
    FileDate=$(date +%Y%m%d).sql.gz
    echo $FileDate
    cd $BakDir
    File=$Date.sql
    #简单的备份
    #mysqldump -u root news > $FileDate
    #如果使用的是InnoDB引擎,就不必进行对数据库加锁的操作,加一个选项既可以进行热备份:--single-transaction
    #mysqldump -u root news  --single-transaction >$FileDate
    #对备份的数据继续压缩
    mysqldump -u root news  --single-transaction |gzip >/$BakDir/$FileDate
    echo "Your database backup successfully completed"
    #压缩有的数据进行传
    echo FTP to FtpServer
    ftp -ivn << EOF
    #打开服务器连接
    open 192.168.1.125
    #用户 密码
    user administrator zzf
    #打开路径
    cd   newsbackup
    #放入文件
    put  $FileDate
    #把服务上7天前的数据进行删除
    delete $DelDate.sql.tz $DelDate.sql.tz
    #退出ftp服务器
    bye
    EOF

    echo  delete $Days days ago files(删除ftp服务器上7天前的文件)
    cd $BakDir

    #删除7天前的备份文件(注意:{} ;中间有空格)
    find $BakDir/ "*.sql.gz" -mtime +$Days -exec rm {} ;

    二、基于LVM快照备份

    在物理备份中 ,有基于文件系统的物理备份(LVM的快照),也可以直接用tar之类的命令打包。但这些只能进行冷备份
    不同的存储引擎能备份的级别也不一样,MyISAM能备份到表级别,而InnoDB不开启每表一文件的话就只能备份整个数据库。

    下面就介绍下使用LVM的快照功能进行备份
    为了安全 首先在数据库上施加读锁

    mysql>FLUSH TABLES WITH READ LOCK;

    刷新一下二进制日志,便于做时间点恢复

    mysql>FLUSH LOGS;

    然后创建快照卷

    lvcreate –L 1G –s –n data-snap –p –r /dev/myvg/mydata

    最后进入数据库释放读锁

    UNLOCK TABLES;

    挂载快照卷进行备份

    mount –r /dev/myvg/data-snap /mnt/snap

    然后对/mnt/snap下的文件进行打包备份
    还原的时候,关闭mysqld,然后备份二进制日志后将原来备份的文件还原进去,然后通过二进制日志还原到出错的时间点(通过二进制还原时间点的时候不要忘了暂时关闭二进制日志)

  • 相关阅读:
    python学习笔记-4-列表和元组
    迭代器 生成器, 可迭代对象以及应用场景
    mysql的创创建用户阶段 开启客户端登录和授权阶段
    初识mysql数据库
    拆目录
    日志编码
    数据库mysql的安装.启动和基础配置------windows版本
    协程
    线程锁 死锁现象 递归锁 信号量 条件定时器 队列 线程池
    网络线程
  • 原文地址:https://www.cnblogs.com/running-mydream/p/4682182.html
Copyright © 2011-2022 走看看