zoukankan      html  css  js  c++  java
  • MySQL备份之mysqlhotcopy与注意事项

    此文章主要向大家介绍的是MySQL备份之mysqlhotcopy与其在实际操作中应注意事项的描述,我们大家都知道实现MySQL数据库备份的常用方法有三个,但是我们今天主要向大家介绍的是其中的一个比较好用的方案,以下就是详细内容介绍。

    mysqlhotcopy备份

    mysqlhotcopy是一个Perl脚本,最初由Tim Bunce编写并提供。它使用LOCK TABLES、FLUSH TABLES和cp或scp来快速备份数据库。它是MySQL备份数据库或单个表的最快的途径,但它只能运行在数据库目录所在的机器上。mysqlhotcopy只用于备份MyISAM。它运行在Unix和NetWare中

    使用方法见下面的脚本.加入crotab中吧.

    #!/bin/sh
    
    # Name:mysqlbackup.sh
    
    # PS:MySQL DataBase Backup,Use mysqlhotcopy script.
    
    # Last Modify:2008-06-12
    
    # 定义变量,请根据具体情况修改
    
    # 定义脚本所在目录
    
    scriptsDir=`pwd`
    
    # 数据库的数据目录
    
    dataDir=/var/lib/mysql
    
    # 数据MySQL备份目录
    
    tmpBackupDir=/tmp/mysqlblackup
    
    backupDir=/backup/mysql
    
    # 用来备份数据库的用户名和密码
    
    mysqlUser=root
    
    mysqlPWD='you password'
    
    # 如果临时备份目录存在,清空它,如果不存在则创建它
    
    if [[ -e $tmpBackupDir ]]; then
    
    rm -rf $tmpBackupDir/*
    else
    
    mkdir $tmpBackupDir
    
    fi
    
    # 如果备份目录不存在则创建它
    
    if [[ ! -e $backupDir ]];then
    
    mkdir $backupDir
    
    fi
    
    # 得到数据库备份列表,在此可以过滤不想备份的数据库
    
    for databases in `find $dataDir -type d | 
    
    sed -e "s//var/lib/mysql///" | 
    
    sed -e "s/test//"`; do
    
    if [[ $databases == "" ]]; then
    
    continue
    
    else
    
    # MySQL备份数据库
    
    /usr/bin/mysqlhotcopy --user=$mysqlUser --password=$mysqlPWD -q "$databases" $tmpBackupDir
    
    dateTime=`date "+%Y.%m.%d %H:%M:%S"`
    
    echo "$dateTime Database:$databases backup success!" >>MySQLBackup.log
    
    fi
    
    done
    
    # 压缩备份文件
    
    date=`date -I`
    
    cd $tmpBackupDir
    
    tar czf $backupDir/mysql-$date.tar.gz ./
    
    #End完成

    加入到crontab中设置每周5运行

    0 0 * * 5 /backup/blackup.sh

    注意:恢复数据库到备份时的状态

    mysqlhotcopy 备份出来的是整个数据库目录,使用时可以直接拷贝到 mysqld 指定的 datadir (在这里是 /var/lib/mysql/)目录下即可,同时要注意权限的问题,如下例:

    shell> cp -rf db_name /var/lib/mysql/

    shell> chown -R mysql:mysql /var/lib/mysql/ (将 db_name 目录的属主改成 mysqld 运行用户)

    本套备份策略只能恢复数据库到最后一次备份时的状态,要想在崩溃时丢失的数据尽量少应该更频繁的进行MySQL备份,要想恢复数据到崩溃时的状态请使用主从复制机制(replication)。

    小技巧:

    不想写密码在shell中的话,可以在root的home目录下建立一个.my.cnf文件,以便让mysqlhotcopy从中读取用户名/密码。

    [mysqlhotcopy]

    user=root

    password=YourPassword

    如何还原?

    1、停止mysql服务器。 
    2、复制备份的数据库目录到mysql数据目录下。 
    3、更改目录所有者为mysql服务器运行的用户(如mysql)

    4、启动mysql服务器

    mysqlhotcopy从选项文件读取[client]和[mysqlhotcopy]选项组。要想执行mysqlhotcopy,你必须可以访问MySQL备份的表文件,具有那些表的SELECT权限和RELOAD权限(以便能够执行FLUSH TABLES)。

    与MYSQLDUMP的比较:

    1、前者是一个快速文件意义上的COPY,后者是一个数据库端的SQL语句集合。 

    2、前者只能运行在数据库目录所在的机器上,后者可以用在远程客户端,不过备份的文件还是保存在服务器上。 

    3、相同的地方都是在线执行 LOCK TABLES 以及 UNLOCK TABLES 

    4、前者恢复只需要COPY备份文件到源目录覆盖即可,后者需要导入SQL文件到原库中。(source 或 mysql < bakfile.sql) 

    5、前者只适用于 MyISAM 引擎,而后则则可同时使用于MyISAM引擎和InodDB引擎. 

    6、前者在使用前必须安装perl-DBD-mysql包,而后者则不需要. 

    参考:

    http://my.oschina.net/u/205403/blog/142869

    http://database.51cto.com/art/201005/202728.htm

  • 相关阅读:
    jQuery的标签选择器$('p')、类选择器$('.myClass')、id选择器$('#myId')
    jQuery Validate验证框架与 jQuery ajaxSubmit的联合使用
    23种设计模式(一) 单例模式
    java 常见的几种运行时异常RuntimeException
    Servlet 生命周期、工作原理
    throw与throws的区别
    Apache Shiro java安全框架
    web.xml 中<context-param>与<init-param>的区别与作用
    web.xml 中CharacterEncodingFilter类的学习
    web.xml中的contextConfigLocation在spring中的作用
  • 原文地址:https://www.cnblogs.com/xiaotengyi/p/3568113.html
Copyright © 2011-2022 走看看