mysql中mysqlhotcopy备份使用说明

小潘seo 重庆小潘seo博客和你一起学习SEO知识,共同分享SEO优化~

在mysql中备份数据库有mysqldump与mysqlhotcopy常用方法,不过mysqldump是mysql安装好后可直接使用的,mysqlhotcopy需要安装perl支持,因为mysqlhotcopy是prel语言写的.

1,安装,mysql已经安装好m在/usr/local/mysql目录下,代码如下:

  1. yum-yinstallperlperl-DBI
  2. wgethttp://file.phpfensi.com/upload/2013/12/DBD-mysql-3.0002.tar.gz
  3. tarzxvfDBD-mysql-3.0002.tar.gz
  4. cdDBD-mysql-3.0002
  5. perlMakefile.PL–mysql_config=/usr/local/mysql/bin/mysql_config
  6. make
  7. maketest
  8. makeinstall

2,备份某个数据库,代码如下:

  1. mkdir-p/data/word/
  2. /usr/local/mysql/bin/mysqlhotcopy–user=root–password=123456word/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信息的表,代码如下:

  1. CREATETABLE`mysqlhotcopy_log_pos`(
  2. `host`varchar(60)NOTNULL,
  3. `time_stamp`timestampNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
  4. `log_file`varchar(32)DEFAULTNULL,
  5. `log_pos`int(11)DEFAULTNULL,
  6. `master_host`varchar(60)DEFAULTNULL,
  7. `master_log_file`varchar(32)DEFAULTNULL,
  8. `master_log_pos`int(11)DEFAULTNULL,
  9. `relay_log_file`varchar(32)DEFAULTNULL,
  10. `relog_log_pos`int(11)DEFAULTNULL,
  11. PRIMARYKEY(`host`)
  12. )ENGINE=MyISAMDEFAULTCHARSET=utf8

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

4.专用用户权限,代码如下:

  1. grantselect,reload,locktableson*.*to'mysqlbackup'@'localhost'identifiedby'www.phpfensi.com';
  2. grantselect,delete,update,insertonmysql.mysqlhotcopy_log_posto'mysqlbackup'@'localhost'identifiedby'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信息,代码如下:

  1. #perl./mysqlhotcopy-umysqlbackup-pwww.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. 简单备份脚本,代码如下:

  1. #!/bin/bash
  2. mysqlhotcopy="/usr/local/mysql/bin/mysqlhotcopy2"
  3. user="mysqlbackup"
  4. password="www.phpfensi.com"
  5. socket="/tmp/mysql.sock"
  6. backupdir="/backup/mysqlback"
  7. datadir="mysqlhotcopy_`date+%Y%m%d_%I%M%S`"
  8. echo$datadir
  9. target="$backupdir/$datadir"
  10. retention_days_local="5"
  11. status=($(mysql-u$user-p${password}-S$socket-e"showslavestatusG"--skip-column-names|egrep"Slave_IO_Running|Slave_SQL_Running"|awk'{print$2}'))
  12. if["${status[0]}"=="Yes"]&&["${status[1]}"=="Yes"];then
  13. mkdir-p$target
  14. $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
  15. find$backupdir-name"^mysqlhotcopy_*_*"-typed-mtime+${retention_days_local}|xargsrm-rf
  16. else
  17. echo"slaveerror"
  18. 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

相关广告
  • mysql中mysqlhotcopy备份使用说明 mysql中mysqlhotcopy备份使用说明 mysql中mysqlhotcopy备份使用说明
相关阅读

mysql中mysqlhotcopy备份使用说明

2019/10/10 17:37:06 | 谷歌SEO算法 | 百度细雨算法

mysql中mysqlhotcopy备份数据库总结

2019/10/10 17:34:30 | 谷歌SEO算法 | SEO

mysqlhotcopy备份mysql数据库方法

2019/10/10 17:34:17 | 谷歌SEO算法 | 自媒体