mysql中mysqlhotcopy备份使用说明

1安装。mysql已经安装好,在/usr/local/mysql目录下

 代码如下 复制代码

yum -y install perl perl-DBI

wget http://file.111cn.net/upload/2013/12/DBD-mysql-3.0002.tar.gz

tar zxvf  DBD-mysql-3.0002.tar.gz

cd DBD-mysql-3.0002

perl Makefile.PL  –mysql_config=/usr/local/mysql/bin/mysql_config

make

make test

make install

2备份某个数据库

 代码如下 复制代码

mkdir -p /data/word/
/usr/local/mysql/bin/mysqlhotcopy –user=root –password=123456  word /data/word

可以打包,假如打包名称为word.tar.gz

3恢复

停止mysql数据库

 

修改权限。启动mysql

例,mysqlhotcopy + binlog 实现mysql增量备份

mysqlhotcopy只是简单的缓存写入和文件复制的过程,占用资源和备份速度比mysqldump快很多很多。特别适合大的数据库,它使用LOCK TABLES、FLUSH TABLES和cp或scp来快速备份数据库。它是备份数据库或单个表的最快的途径,只能运行在数据库目录所在的机器上。

注意:mysqlhotcopy只支持MyISAM 引擎。

1. 安装依赖包

mysqlhotcopy是perl语言写的,因此需要安装perl的连接mysql的驱动:

 代码如下 复制代码

# yum install perl-DBI.x86_64 
# yum install perl-DBD-MySQL.x86_64

2 mysqlhotcopy常用参数: 

-–allowold 如果目标存在不退出(加上一个_old后缀重新命名它)
-–addtodest 增量备份,新的备份自动覆盖掉原?淼氖?荩?喽杂?llowold
-–checkpoint=db_name.tbl_name 在指定的数据库,表中插入检查点条目。
-–debug 启用调试输出。
-–dryrun,-n 报告动作而不执行它们。
-–flushlog 所有表锁定后刷新日志。
-–keepold 完成后不删除以前(重新命名的)的目标。
-–method=command 复制方法(cp或scp)。
-–noindices 备份中不包括全部索引文件。这样使备份更小、更快。可以在以后用myisamchk -rq重新构建索引。
-–user=user_name,-u user_name 当连接服务器时使用的MySQL用户名。
-–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)。
–resetmaster 所有表锁定后reset二进制日志
–resetslave 所有表锁定后reset master.info
–record_log_pos=db.table 指定记录slave和master信息的表

3. 创建记录slave和master信息的表

 代码如下 复制代码

CREATE TABLE `mysqlhotcopy_log_pos` (
 `host` varchar(60) NOT NULL,
 `time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 `log_file` varchar(32) DEFAULT NULL,
 `log_pos` int(11) DEFAULT NULL,
 `master_host` varchar(60) DEFAULT NULL,
 `master_log_file` varchar(32) DEFAULT NULL,
 `master_log_pos` int(11) DEFAULT NULL,
 `relay_log_file` varchar(32) DEFAULT NULL,
 `relog_log_pos` int(11) DEFAULT NULL,
 PRIMARY KEY (`host`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

 

注意:mysqlhotcopy脚本没有记录relay_log_file和relog_log_pos值,同时,也不会把这些信息写入到文件。后面记录relay log和pos值信息和写入到文件是因我改了mysqlhotcopy脚本内容。

4. 专用用户权限

 代码如下 复制代码

grant select, reload, lock tables on *.* to 'mysqlbackup'@'localhost' identified by 'www.111cn.net'; 
grant select, delete, update, insert on mysql.mysqlhotcopy_log_pos to 'mysqlbackup'@'localhost' identified by 'www.111cn.net';

5. 正则使用

如果只想热备其中的一部分数据就有可能用到正则了.

5.1 数据库名匹配,比如:备份以ttlsa开头的库,可以使用:

 代码如下 复制代码

# mysqlhotcopy --flushlog -u='mysqlbackup' -p='www.111cn.net' --regexp= ^ttlsa /backup/mysqlback

备份以[a-f]开头的库,可以使用:

 代码如下 复制代码

# mysqlhotcopy --flushlog -u='mysqlbackup' -p='www.111cn.net' --regexp=^[a-f] /backup/mysqlback

5.2 备份某个数据库中的某些表:

备份ttlsa_com库以user开头的表:

 代码如下 复制代码

# mysqlhotcopy --flushlog -u='mysqlbackup' -p='www.111cn.net' ttlsa_com./^user/ /backup/mysqlback

备份ttlsa_com库除user_log开头的表:

 代码如下 复制代码

# mysqlhotcopy --flushlog -u='mysqlbackup' -p='www.111cn.net' ttlsa_com./~^user_log/ /backup/mysqlback

备份ttlsa_com库以user_0,user_1,user_2……,user_9开头的表:

 代码如下 复制代码

# mysqlhotcopy --flushlog -u='mysqlbackup' -p='www.111cn.net' ttlsa_com./^(user_[0-9])/ /backup/mysqlback

 
6. 记录slave和master信息

 代码如下 复制代码

# perl ./mysqlhotcopy -u mysqlbackup -p www.111cn.net -S /tmp/mysql.sock --record_log_pos=mysql.mysqlhotcopy_log_pos --keepold --record_log_pos2file --flushlog --regexp="[a-zA-Z0-9_-]" /backup/mysqlback/mysqlhotcopy_20131114_041307

注意:–record_log_pos2file参数是我修改mysqlhotcopy加的。

7. 增量备份实现

根据6上面的master、slave信息记录,来实现增量备份。

 代码如下 复制代码

# mysqlbinlog --start-position=POS BIN_LOG_FILE

8. 简单备份脚本

 代码如下 复制代码

#!/bin/bash
 
mysqlhotcopy="/usr/local/mysql/bin/mysqlhotcopy2"
user="mysqlbackup"
password="www.111cn.net"
socket="/tmp/mysql.sock"
 
backupdir="/backup/mysqlback"
datadir="mysqlhotcopy_`date +%Y%m%d_%I%M%S`"
echo $datadir
target="$backupdir/$datadir"
retention_days_local="5"
 
status=($(mysql -u$user -p${password} -S $socket -e "show slave statusG" --skip-column-names | egrep  "Slave_IO_Running|Slave_SQL_Running" | awk '{print $2}'))
 
if [ "${status[0]}" == "Yes" ] && [ "${status[1]}" == "Yes" ]; then
   mkdir -p $target
   $mysqlhotcopy -u $user -p $password -S $socket  --record_log_pos=mysql.mysqlhotcopy_log_pos --keepold --record_log_pos2file --flushlog --regexp="[a-zA-Z0-9_-]" $target
   find $backupdir -name "^mysqlhotcopy_*_*" -type d -mtime +${retention_days_local} |  xargs rm -rf
else
  echo "slave error"
fi

 

与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包,而后者则不需要.

tar zxvf  word.tar.gz

 

时间: 2024-10-07 13:50:57

mysql中mysqlhotcopy备份使用说明的相关文章

mysql中mysqlhotcopy备份数据库总结

mysqlhotcopy用法 使用mysqlhotcopy之前需要安装perl-DBI和DBD-mysql: 1.执行yum install perl-DBI安装perl-DBI. 2.安装DBD-mysql请参考底部资料 一个常用的备份例子: /usr/local/mysql/bin/mysqlhotcopy -u root -p Zmh537817 --addtodest 数据库名1 数据库名2 备份目录 –addtodest的意思是当备份存在时,不中断备份,只添加新的文件进去. 更多的选项

mysql中mysqlhotcopy热备份例子

备份特点: 一个快速文件意义上的COPY,只能运行在数据库目录所在的机器上,在线执行LOCK TABLES 以及 UNLOCK TABLES,恢复时只需要COPY备份文件到源目录覆盖即可. 不足:备份时不能会锁表,不能进行数据更新或插入,备份只能局限于本机. 使用前机器需具备perl 环境并安装perl-DBD包 MYSQLHOTCOPY用法: 1).mysqlhotcopy 原数据库名,新数据库名 2).mysqlhotcopy 原数据库名,备份的目录 3).也可以使用下面的脚本 #!/bin

MySQL中mysqldump参数使用说明

例 mysqldump备份: mysqldump -u用户名 -p密码 -h主机 数据库 a -w "sql条件" --lock-all-tables > 路径 mysqldump还原: mysqldump -u用户名 -p密码 -h主机 数据库 < 路径 mysqldump按条件导出: mysqldump -u用户名 -p密码 -h主机 数据库 a --where "条件语句" --no-建表> 路径 mysqldump -uroot -p123

mysql中mysqldump备份还原与导入导出

mysqldump工具,基本用法是:   shell> mysqldump [OPTIONS] database [tables]   如果你不给定任何表,整个数据库将被导出.   通过执行mysqldump --help,你能得到你mysqldump的版本支持的选项表.   注意,如果你运行mysqldump没有--quick或--opt选项,mysqldump将在导出结果前装载整个结果集到内存中,如果你正在导出一个大的数据库,这将可能是一个问题.   mysqldump支持下列选项:   -

mysql中mysqldump备份与还原数据库命令介绍

备份数据:  代码如下 复制代码 mysqldump -u 用户名 -p 密码 数据库名 > XX.sql 数据量大的时候,可以使用gzip压缩一下  代码如下 复制代码 mysqldump -u 用户名 -p 密码 数据库名 | gzip > XX.sql.gz 恢复数据:  代码如下 复制代码 mysql -u 用户名 -p 密码 数据库名 < XX.sql 从gzip压缩文件中直接恢复  代码如下 复制代码 gzip < XX.sql.gz | mysql -u 用户名 -p

MySQL中xtrabackup备份恢复全攻略

   XtraBackup是Percona推出的一款备份工具,算是对于mysqldump的一个补充.对于大批量数据的导入使用mysqldump会出现一定的瓶颈,这一点做过一些数据迁移项目的同学可能感同身受.   数据迁移中的数据量,小有小的好,大有大的招,见招拆招,找到适合的场景是最佳的.     如果现在去Percona官网下载,就会发现最新的版本已经是2.4.6了.下载可以选择一个完整的打包,或者逐个的rpm根据需求来安装也可以.完整的工具大概在60M左右.     而目前的MySQL版本大

MySQL中数据库的备份和恢复命令总结

 先来讲述一下利用mysqldump备份 SQL 来备份 MyISAM 表:  代码如下 复制代码 /usr/local/mysql/bin/mysqldump -uyejr -pyejr --default-character-set=utf8 --opt --extended-insert=false --triggers -R --hex-blob -x db_name > db_name.sql 使用以下 SQL 来备份 Innodb 表:  代码如下 复制代码 /usr/local/m

mysql中利用mysqldump命令备份还原数据库

一.常用操作: 备份整个数据库 格式: mysqldump -h主机名  -P端口 -u用户名 -p密码 (–database) 数据库名 > 文件名.sql mysqldump -h{hostname} -P{port} -u{username} -p{password} {databasename} > {backupfile.sql} 例如:   代码如下:  代码如下 复制代码 mysqldump -hlocalhost -P3306 -uzhuchao -p123456 db_tes

mysqlhotcopy备份mysql数据库方法

与mysqldump比较: 1.前者是一个快速文件意义上的COPY,后者是一个数据库端的SQL语句集合. 2.前者只能运行在数据库目录所在的机器上,后者可以用在远程客户端,不过备份的文件还是保存在服务器上. 3.相同的地方都是在线执行 LOCK TABLES 以及 UNLOCK TABLES 4.前者恢复只需要COPY备份文件到源目录覆盖即可,后者需要导入SQL文件到原库中.(source 或 mysql < bakfile.sql) 5.前者只适用于 MyISAM 引擎,而后则则可同时使用于M