几种MySQL备份常用方法整理

总结下几种常用的mysql备份方法:

一、直接拷贝数据库文件

首先把内存中的数据都刷新到磁盘中,同时锁定数据表,以保证拷贝过程中不会有新的数据写入:

 代码如下 复制代码

mysql>FLUSH TABLES WITH READ LOCK;

使用tar或cp等命令备份数据库文件,这里使用tar:

tar zcvf /backup/mysql_$(date "+%Y%m%d").tar.gz /var/lib/mysql

c、备份完后解锁数据表

mysql> unlock tables;这种方法备份出来的数据恢复也很简单,直接拷贝回原来的数据库目录下即可。需要注意,对于 Innodb 类型表来说,还需要备份其日志文件,即 ib_logfile* 文件。因为当 Innodb 表损坏时,就可以依靠这些日志文件来恢复。

二、 使用mysqlhotcopy备份

mysqlhotcopy 是一个 PERL 程序,使用 LOCK TABLES、FLUSH TABLES 和 cp 或 scp 来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件(包括数据表定义文件、数据文件、索引文件)所在的机器上。

mysqlhotcopy 只能用于备份 MyISAM。

例:

把数据库test备份到/backup目录下:

 代码如下 复制代码

/usr/local/mysql/bin/mysqlhotcopy -uroot -pxxx test /backup

mysqlhotcopy在执行前将会锁定数据库,执行完毕后将自动释放锁定

还原:
mysqlhotcopy 备份出来的是整个数据库目录,还原时直接拷贝覆盖就行了,注意权限问题

 代码如下 复制代码

cp -rf /backup/test /var/lib/mysql/

注意,想要使用 mysqlhotcopy,必须要有 SELECT、RELOAD(要执行 FLUSH TABLES) 权限,并且还必须要能够有读取 datadir/db_name 目录的权限。

三、mysqldump

mysqldump 是SQL级别的备份机制,它将数据表导成 SQL 脚本文件,可以方便的在不同的mysql版本间进行恢复或升级,这也是最常用的备份方法。

例:

使用mysqldump备份:

 代码如下 复制代码
/usr/local/mysql/bin/mysqldump -uroot -pxxx --opt test >/backup/test.sql
还原:
/usr/local/mysql/bin/mysqldump -uroot -pxxx test

 四、使用主从复制机制(replication)(实现数据库实时备份)推荐

五、mysql自动备份脚本,使用mysqldump工具

 代码如下 复制代码

#!/bin/bash
#caishzh 20120509
 
BAKDIR="/backup/mysql"     #mysql备份目录
MAIL="xxx@xxx.com"          #邮箱地址
USER="root"                         #mysql用户名
PASSWD="jjj"                         #mysql密码
DB="test"                              #数据库名
DATE=$(date "+%Y%m%d")     #日期
 
[ -d "$BAKDIR" ] || mkdir -p "$BAKDIR"     #如果备份目录不存在则创建
 
mysqldump -opt -u$USER -p$PASSWD $DB |gzip > $BKDIR/$DB_$DATA.gz     #备份并使用gzip打包
 
if [ $? -eq 0 ];then
     #echo "$DB mysql backup" |mutt $MAIL -a $BKDIR/$DB_$DATA.sql -s "$DB mysql backup"
     ls -lh $BAKDIR/*.gz>$BAKDIR/messages.txt
     mutt  $MAIL -a $BKDIR/$DB_$DATA.gz -s "$DATE:$DB mysql backup" < $BAKDIR/messages.txt
else
     echo "$DATE mysql backup failed"|mail  -s "$DATE msyql bacup failed"  $MAIL
fi

六,此方法只可用于windows主机

假想环境:
MySQL 安装位置:C:/MySQL
数据库名称为:bbs
数据库备份目的地:d:/db_bak/
============================
新建db_bak.bat,写入以下代码

 代码如下 复制代码

net stop mysql
xcopy c:/mysql/data/bbs/*.* d:/db_bak/bbs/%date:~0,3%/ /y
net start mysql

或者

net stop mysql

xcopy D:/Mysql/data D:/Mysql/BAK/BAK-%date:~0,10%  /S/E/I

net start mysql

然后使用Windows的“计划任务”定时执行该批处理脚本即可。(例如:每天凌晨3点执行back_db.bat)
保存一周的数据,用%date:~0,3%,保存每天的数据,用%date:~4,10%

 代码如下 复制代码

xcopy c:/. d:/aaa /s/e
                 
XCOPY source [destination] [/A | /M] [/D[:date]] [/P]
                           [/C] [/I] [/Q] [/F] [/L] [/
                           [/K] [/N] [/O] [/X] [/Y] [/
                           [/EXCLUDE:file1[+file2][+fi

七,linux增量备份

 代码如下 复制代码

#!/bin/sh
#+++++++++++++mysqlback++++++++++++
#a mysql incremental backup script.
#by flute
#++++++++++++++++++++++++++++++++++
BAK_DIR="."
while getopts :u:p:d:c OPTION
do
  case ${OPTION} in
      u)
          DB_USER=${OPTARG}
          ;;
      p)
          PASSWD=${OPTARG}
          ;;
      d)
          DB_NAME=${OPTARG}
          ;;
      b)
          BAK_DIR=${OPTARG}
          ;;
      c)
          INIT="true"
          ;;
      /?)
      echo "Usage: mysqlback.sh [OPTIONS]"
      echo "-u        user for login"
      echo "-p        Password to use when connecting to server"
      echo "-d        which database to backup"
      echo "-b        backup database files to directory,default is current directory"
      echo "-c        must be usage for first backup,is complete backup"
      exit 1
      ;;
  esac
done

MYSQL_BIN=/usr/local/mysql/bin
DATADIR=`${MYSQL_BIN}/mysql -u ${DB_USER} -p${PASSWD} -e "show variables like 'datadir'" | sed -n '2p' | awk '{print $NF}'`
upfile ()    #上传文件
{
    _FNAME=$1
    _TNAME=`echo ${_FNAME}|sed 's//.sql//g'`
    _TNAME="${_TNAME}.tgz"
    tar -czf ${_TNAME} ${_FNAME}
    if [ $? = 0 ]
        then
        scp ${_TNAME} 192.168.1.10:/usr/local/mysql/bak
        if [ $? = 0 ]
            then
            echo "upfile success."
        else
            logger -f ~/mysqlbak.log -t MYSQLBAK 'upload file ${_TNAME} failed'
            ssh 192.168.1.10 "logger -f ~/mysqlbak.log -t MYSQLBAK 'upload file ${_TNAME} failed'"
        fi
    else
        echo "tar file failed."
    fi
}
bak_file ()    #获取备份文件名
{
    _DB_NAME=$1
    _BAK_DIR=$2
    _BDATE=`date "+%Y-%m-%d"`
    _BAKFILE="${_BAK_DIR}/_${_DB_NAME}_${_BDATE}.sql"
    if [ ! -f ${_BAKFILE} ]
    then
        echo ${_BAKFILE}
        return 0
    else
    ID=1
    while [ 1 ]
          do
          _BAKFILE="${_BAK_DIR}/_${_DB_NAME}_${_BDATE}_${ID}.sql"
          if [ ! -f ${_BAKFILE} ]
              then
              echo ${_BAKFILE}
              return 0
          fi
          ID=`expr $ID + 1`
    done
       
    fi
}

八,windows增量备份

 代码如下 复制代码

mkdir %BAKPATH%\data
 
%MYSQLPATH%\bin\mysqldump -u%USERNAME% -p%PASSWORD% --single-transaction --default-
character-set=utf8 --flush-logs --master-data=2 --delete-master-logs spirit_beast > %
BAKPATH%\data\spirit_beast%date:~0,10%.sql
 
 
%MYSQLPATH%\bin\mysqldump -u%USERNAME% -p%PASSWORD% --single-transaction --default-
character-set=utf8 --flush-logs --master-data=2 --delete-master-logs quartz_event > %
BAKPATH%\data\quartz_event%date:~0,10%.sql
 
 
rar a -ag %BAKPATH%\full\ %BAKPATH%\data\*.sql
 
rmdir /s /q %BAKPATH%\data\
 
@echo  %date% %time% full bakup finish >> C:/mysqlbakup.log

时间: 2024-12-02 06:22:04

几种MySQL备份常用方法整理的相关文章

Node.js中JavaScript操作MySQL的常用方法整理_node.js

一.建立数据库连接:createConnection(Object)方法      该方法接受一个对象作为参数,该对象有四个常用的属性host,user,password,database.与php中链接数据库的参数相同.属性列表如下: host: 连接数据库所在的主机名. (默认: localhost)  port: 连接端口. (默认: 3306)  localAddress: 用于TCP连接的IP地址. (可选)  socketPath: 链接到unix域的路径.在使用host和port时

MySQL备份与还原几种实用方法总结

总结下几种常用的mysql备份方法: 一.直接拷贝数据库文件 首先把内存中的数据都刷新到磁盘中,同时锁定数据表,以保证拷贝过程中不会有新的数据写入: mysql>FLUSH TABLES WITH READ LOCK; 使用tar或cp等命令备份数据库文件,这里使用tar: tar zcvf /backup/mysql_$(date "+%Y%m%d").tar.gz /var/lib/mysql c.备份完后解锁数据表 mysql> unlock tables; 这种方法

MySQL 备份和恢复

MySQL 备份和恢复 本文讨论 MySQL 的备份和恢复机制,以及如何维护数据表,包括最主要的两种表类型:MyISAM 和 Innodb 目前 MySQL 支持的免费备份工具有:mysqldump.mysqlhotcopy,还可以用 SQL 语法进行备份:BACKUP TABLE 或者 SELECT INTO OUTFILE,又或者备份二进制日志(binlog),还可以是直接拷贝数据文件和相关的配置文件.MyISAM 表是保存成文件的形式,因此相对比较容易备份,上面提到的几种方法都可以使用.I

使用MYSQL备份数据恢复

mysql|备份|恢复|数据    数据库毁坏发生的原因有许多,且程度各不相同.如果幸运的话,可能是一两个表的小毁坏(例如,如果您的机器由于断电而暂时停机).如果不是这样,可能需要置换整个的数据目录(例如,如果某个磁盘瘫痪而且数据目录在它上).在其他情况下也需要恢复操作,例如,当用户错误地删除数据库或表时,或者错误地删除表的内容时.不论这些不幸的事件发生是由于什么原因,都需要恢复它们.    如果表被毁坏但没有丢失,可试着用myisamchk 或isamchk 来修复它们.如果修复实用程序能修复

【MySql】 MySql备份工具Xtrabackup之二

二.下载及安装配置 1. Xtrabackup二进制64位下载地址: http://www.percona.com/downloads/XtraBackup/XtraBackup-1.6/Linux/binary/x86_64/ 2.MySQL5.1.56的下载地址: http://dev.mysql.com/downloads/mysql/5.1.html#downloads 操作系统环境: CentOS release 5.4 (Final) x86_64 GNU/Linux 2.6.18-

MySQL备份还原&amp;mdash;&amp;mdash;AutoMySQLBackup介绍

AutoMySQLBackup是一个开源的MySQL备份脚本.可以说它是一个轻量级的备份方案,AutoMySQLBackup的安装.配置非常简单.方便.AutoMySQLBackup的sourceforge上介绍有如它本身,也非常的简单: Description AutoMySQLBackup with a basic configuration will create Daily, Weekly and Monthly backups of one or more of your MySQL

MySQL备份原理详解_Mysql

本文为大家介绍了MySQL备份原理,欢迎大家阅读. 备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之百的数据(取决于备份周期),但至少能将损失降到最低.衡量备份恢复有两个重要的指标:恢复点目标(RPO)和恢复时间目标(RTO),前者重点关注能恢复到什么程度,而后者则重点关注恢复需要多长时间.这篇文章主要讨论MySQL的备份方案,重点介绍几种备份方式的原理,包括文件系统快照(LVM),逻辑备份工具Mysqldump,Mydumper,以及物理备份工具Xtraback

MySQL备份时排除指定数据库的方法_Mysql

使用mysqldump命令备份时候,--all-databases 可以备份所有的数据库. 使用ignore-table 还可以排除制定的表.但是,mysqldump没有参数可以排除数据库的. 要备份的数据库少的时候,可以通过mysqldump -uroot -p123456 --databases db1 db2 db3 > mysqldump.sql 这样来备份. 但是假如数据库有数十个的话,这样写起来很累人,也很low.解决办法还是有的,看下面: [下面演示用的mysql用户名的root,

几种MySQL 乱码问题处理办法

几种mysql教程 乱码问题处理办法 1 设置php教程myadmin language:chinese simplified (zh-utf-8) mysql 字符集:utf-8 unicode (utf8) mysql 连接校对:gbk_chinese_ci 2 创建数据库教程时 整理设置成 gbk_chinese_ci 3 用sql建立表中 engine=myisam default charset=gbk; engine=innodb default charset=gbk auto_i