知识大全 使用mysqlhotcopy备份MySQL

Posted 数据库

篇首语:同时赶两只兔,一只也捉不到。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 使用mysqlhotcopy备份MySQL相关的知识,希望对你有一定的参考价值。

使用mysqlhotcopy备份MySQL  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

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

  下面是它的介绍

  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:

  # 定义变量 请根据具体情况修改

  # 定义脚本所在目录

  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中设置每周 运行

   * * /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目录下建立一个f文件 以便让mysqlhotcopy从中读取用户名/密码

  [mysqlhotcopy]

  user=root

  password=YourPassword

  然后安全起见 chmod一下

  chmod ~/f

  附:mysqlhotcopy常用参数

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

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

  ·     debug   启用调试输出

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

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

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

  ·     method=mand  复制方法(cp或scp)

  ·     noindices  备份中不包括全部索引文件 这样使备份更小 更快 可以在以后用myisamc 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用户名

cha138/Article/program/MySQL/201311/29359

相关参考

知识大全 实现MySQL的自动备份

实现MySQL的自动备份  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  MySQL数据库的备份是

知识大全 计划备份mysql数据库

  :mysql是我们使用最多的数据库如果在日常中正确的对mysql数据进行备份下面我们就来做这事通过脚本来实现  ##########################################

知识大全 好用的mysql备份工具

  我以前备份都使用mysqldump导成文本文件便于存放但是速度很慢的最快的备份方法当然是直接把数据目录copy一份了但是一般来说都要关闭MySQL的服务才能做不然在你copy的时候刚好还有人读写表

知识大全 linux系统下MYSQL备份恢复

linux系统下MYSQL备份恢复  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  数据库备份是非

知识大全 Linux网络备份MYSQL

Linux网络备份MYSQL  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!原文lishixinzh

知识大全 MySQL双机热备份试验

MySQL双机热备份试验  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在linux服务器lvs

知识大全 最简便的MySql数据库备份方法

最简便的MySql数据库备份方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!使用MYSQL进行数

知识大全 Linux网络备份MySQL的方法

Linux网络备份MySQL的方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  笔者是一个中小

知识大全 最简便的MySql数据库备份的方法

最简便的MySql数据库备份的方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  使用MYSQL

知识大全 如何实现MySQL数据库的备份与恢复

如何实现MySQL数据库的备份与恢复  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在数据库表丢