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

  • 相关阅读:
    svn cleanup failed–previous operation has not finished 解决方法
    开源SNS社区系统推荐
    从网络获取图片本地保存
    MS SQL Server 数据库连接字符串
    KeepAlive
    Configure Git in debian
    sqlserver query time
    RPi Text to Speech (Speech Synthesis)
    SQL Joins with C# LINQ
    search or reseed identity columns in sqlserver 2008
  • 原文地址:https://www.cnblogs.com/xiaotengyi/p/3568113.html
Copyright © 2011-2022 走看看