mysql中mysqlhotcopy备份使用说明
发布:smiling 来源: PHP粉丝网 添加日期:2014-09-27 14:34:05 浏览: 评论:0
在mysql中备份数据库有mysqldump与mysqlhotcopy常用方法,不过mysqldump是mysql安装好后可直接使用的,mysqlhotcopy需要安装perl支持,因为mysqlhotcopy是prel语言写的.
1,安装,mysql已经安装好m在/usr/local/mysql目录下,代码如下:
- yum -y install perl perl-DBI
- wget http://file.phpfensi.com/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 增量备份,新的备份自动覆盖掉原备份.
-–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.phpfensi.com';
- grant select, delete, update, insert on mysql.mysqlhotcopy_log_pos to 'mysqlbackup'@'localhost' identified by 'www.phpfensi.com';
5.正则使用
如果只想热备其中的一部分数据就有可能用到正则了,5.1 数据库名匹配,比如:备份以ttlsa开头的库,可以使用:
# mysqlhotcopy --flushlog -u='mysqlbackup' -p='www.phpfensi.com' --regexp= ^ttlsa /backup/mysqlback
备份以[a-f]开头的库,可以使用如下代码:
# mysqlhotcopy --flushlog -u='mysqlbackup' -p='www.phpfensi.com' --regexp=^[a-f] /backup/mysqlback
5.2 备份某个数据库中的某些表:
备份ttlsa_com库以user开头的表,代码如下:
# mysqlhotcopy --flushlog -u='mysqlbackup' -p='www.phpfensi.com' ttlsa_com./^user/ /backup/mysqlback
备份ttlsa_com库除user_log开头的表,代码如下:
# mysqlhotcopy --flushlog -u='mysqlbackup' -p='www.phpfensi.com' ttlsa_com./~^user_log/ /backup/mysqlback
备份ttlsa_com库以user_0,user_1,user_2……,user_9开头的表,代码如下:
# mysqlhotcopy --flushlog -u='mysqlbackup' -p='www.phpfensi.com' ttlsa_com./^(user_[0-9])/ /backup/mysqlback
6.记录slave和master信息,代码如下:
- # perl ./mysqlhotcopy -u mysqlbackup -p www.phpfensi.com -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.phpfensi.com"
- 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
Tags: mysqlhotcopy mysql备份
相关文章
- ·mysql中mysqlhotcopy备份数据库总结(2014-10-08)
- ·mysqlhotcopy备份mysql数据库方法(2014-10-09)
- ·mysqlhotcopy提示错误Cant locate DBI.pm解决办法(2014-10-10)
- ·MySQL数据库备份与还原方法总结(2014-09-23)
- ·简单的大数据量MySQL备份的PHP脚本(2014-09-23)
- ·mysql 导出单表数据/备份单表数据语句(2014-09-23)
- ·windows万能mysql数据库备份脚本(2014-09-27)
- ·mysql数据库备份并加密的备份sql脚本(2014-09-28)
- ·windows下mysql每天定时备份数据库几种方法(2014-09-28)
- ·Linux自动备份MySQL数据库脚本代码(2014-09-28)
- ·linux mysql 数据库自动备份的设置方法(2014-09-28)
- ·几种MySQL备份常用方法整理(2014-09-28)
- ·MySQL导出备份(数据导出)方法详解(2014-09-29)
- ·Mysql mysqldump命令备份所有数据库(2014-10-02)
- ·Mysql备份压缩及恢复数据库方法总结(2014-10-04)
- ·mysql异地数据库备份实例代码(2014-10-05)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)