当前位置: 首页 > 图文教程 > 数据库 > MYSQL > 使用mysqlhotcopy备份MySQL

MYSQL
提高MySQL 查询效率的三个技巧
mysql同步复制搭建方法指南详细步骤
详解MySQL中DROP,TRUNCATE 和DELETE的区别实现mysql从零开始
MySQL Replace INTO的使用
mysql 分页优化解析
同时运行多个MySQL服务器的方法
mysql主从服务器同步心得体会
删除mysql数据库中的重复数据记录
mysql忘记密码的解决方法
mysql替换表中的字符串的sql语句
Lost connection to MySQL server during query的解决
mysql出现Error performing load command的解决方法
mysql中的“money”类型说明
mysql常见错误集锦
MYSQL administrator 使用
MYSQL初学者命令行使用指南
MySQL的Query Cache原理分析
linux下改良版本mysqldump来备份MYSQL数据库
mysql删除表中某一字段重复的记录
log引起的mysql不能启动的解决方法

MYSQL 中的 使用mysqlhotcopy备份MySQL


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 75 ::
收藏到网摘: n/a

我以前备份都使用mysqldump,导成文本文件便于存放,但是速度很慢的。最快的备份方法当然是直接把数据目录copy一份了。但是一般来说,都要关闭 MySQL的服务才能做,不然在你copy的时候刚好还有人读写表那麻烦就大了。这次朋友介绍我使用mysqlhotcopy。就相当于上面,不过他可以热备份.他备份非常快,我测试一个2.8G的mysql他备份的时间在3分钟内完成.

下面是它的介绍.

mysqlhotcopy是一个Perl脚本,最初由Tim Bunce编写并提供。它使用LOCK TABLES、FLUSH TABLES和cp或scp来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库目录所在的机器上。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

    # 数据备份目录

    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

    # 备份数据库

    /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 运行用户)

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

小技巧:

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

[mysqlhotcopy]

user=root

password=YourPassword

然后安全起见,chmod一下。

chmod 600 ~/.my.cnf

附:mysqlhotcopy常用参数:

以下为引用的内容:

    ·     --allowold  如果目标存在不放弃(加上一个_old后缀重新命名它)。

    ·     --checkpoint=db_name.tbl_name 在指定的db_name.tbl_name插入检查点条目。

    ·     ---debug   启用调试输出。

    ·     --dryrun,-n  报告动作而不执行它们。

    ·     --flushlog  所有表锁定后刷新日志。

    ·     --keepold   完成后不删除以前(重新命名的)的目标。

    ·     -- method=command  复制方法(cp或scp)。

    ·     --noindices  备份中不包括全部索引文件。这样使备份更小、更快。可以在以后用myisamchk -rq重新构建索引。

    ·     --password=password,-p password 当连接服务器时使用的密码。请注意该选项的密码值是不可选的,不象其它MySQL程序。

    ·     --port=port_num,-P port_num 当连接本地服务器时使用的TCP/IP端口号。

    ·     --quiet,-q  除了出现错误时保持沉默。

    ·     --regexp=expr  复制所有数据库名匹配给出的正则表达式的数据库。

    ·     --socket=path,-S path 用于连接的Unix套接字文件。

    ·     --suffix=str  所复制的数据库名的后缀。

    ·     --tmpdir=path  临时目录(代替/tmp)。

    ·     --user=user_name,-u user_name 当连接服务器时使用的MySQL用户名。

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