mysqlhotcopy + binlog 实现mysql增量备份

匿名 (未验证) 提交于 2019-12-02 22:02:20
mysqlhotcopy只是简单的缓存写入和文件复制的过程,占用资源和备份速度比mysqldump快很多很多。特别适合大的数据库,它使用LOCK TABLES、FLUSH TABLES和cp或scp来快速备份数据库。它是备份数据库或单个表的最快的途径,只能运行在数据库目录所在的机器上。 [warning] 注意:mysqlhotcopy只支持MyISAM 引擎。[/warning] 1. 安装依赖包 mysqlhotcopy是perl语言写的,因此需要安装perl的连接mysql的驱动:
# yum install perl-DBI.x86_64  # yum install perl-DBD-MySQL.x86_64
2 mysqlhotcopy常用参数: 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
[warning] 注意:mysqlhotcopy脚本没有记录relay_log_file和relog_log_pos值,同时,也不会把这些信息写入到文件。后面记录relay log和pos值信息和写入到文件是因我改了mysqlhotcopy脚本内容。[/warning] 4. 专用用户权限
grant select, reload, lock tables on *.* to 'mysqlbackup'@'localhost' identified by 'www.ttlsa.com';  grant select, delete, update, insert on mysql.mysqlhotcopy_log_pos to 'mysqlbackup'@'localhost' identified by 'www.ttlsa.com';
5. 正则使用 如果只想热备其中的一部分数据就有可能用到正则了. 5.1 数据库名匹配,比如:备份以ttlsa开头的库,可以使用:
# mysqlhotcopy --flushlog -u='mysqlbackup' -p='www.ttlsa.com' --regexp= ^ttlsa /backup/mysqlback
备份以[a-f]开头的库,可以使用:
# mysqlhotcopy --flushlog -u='mysqlbackup' -p='www.ttlsa.com' --regexp=^[a-f] /backup/mysqlback
5.2 备份某个数据库中的某些表: 备份ttlsa_com库以user开头的表:
# mysqlhotcopy --flushlog -u='mysqlbackup' -p='www.ttlsa.com' ttlsa_com./^user/ /backup/mysqlback
备份ttlsa_com库除user_log开头的表:
# mysqlhotcopy --flushlog -u='mysqlbackup' -p='www.ttlsa.com' ttlsa_com./~^user_log/ /backup/mysqlback
备份ttlsa_com库以user_0,user_1,user_2......,user_9开头的表:
# mysqlhotcopy --flushlog -u='mysqlbackup' -p='www.ttlsa.com' ttlsa_com./^\(user_[0-9]\)/ /backup/mysqlback
6. 记录slave和master信息
# perl ./mysqlhotcopy -u mysqlbackup -p www.ttlsa.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.ttlsa.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 status\G" --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
转载请注明来自 运维生存时间:  http://www.ttlsa.com/html/3689.html

转载于:https://my.oschina.net/766/blog/211112

文章来源: https://blog.csdn.net/weixin_34245749/article/details/91493025
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!