使用Amanda ZRM备份远程MySQL数据库
本文写道最后的时候,我才发现ZRM for MySQL的一个致命问题,就我目前的理解和测试来看,它恢复数据的时候是采取覆盖的方式,举个例子,假定某台数据库服务器上有两个数据库test1,test2,你备份了这两个数据库,某一天,test2数据库里的某一个表坏了,那么它无法做到仅仅只是恢复损坏的表,甚至无法做到仅仅恢复test2,而是直接把test1,test2都恢复。那这绝对是一个噩梦。
但愿我目前的理解是错误的,只是我实在找不到控制恢复粒度的地方。下面的文字就当闲着无聊看看吧。
Zmanda Recovery Manager(ZRM)提供了备份MySQL数据库的能力,并且支持两种备份模式:逻辑备份和裸备份,有关详细的介绍,可以看官方的介绍。下面给出一个备份的实例。
先介绍备份的环境,如果大家看过之前的那篇Amanda集中备份实例,那么大概就知道是什么样的一个网络架构了,承接上文,这里备份服务器还是cp1.domain.com,MySQL数据库分别运行在cp2.domain.com和cp3.domain.com上,需要备份其所有的数据库。
一、服务端的安装和配置
首先从官方站点下载对应系统的服务端程序,然后安装。注意:服务端与perl-DBI,MySQL-client程序库有依赖关系,安装之前先安装这个两个包。
安装完后,/etc/mysql-zrm/是其配置文件的所在地。/etc/mysql-zrm/目录下有一个mysql-zrm.conf文件,这是最重要的配置文件。在/etc/mysql-zrm/目录下,你可以创建一些目录,每一个目录就是一个备份集的名称,我这里为了直观,采取了主机名的方式来创建备份集
mkdir /etc/mysql-zrm/{cp2.domain.com,cp3.domain.com}
cp /etc/mysql-zrm/{mysql-zrm.conf,cp2.domain.com/,cp3.domain.com/}
/etc/mysql-zrm/mysql-zrm.conf可以做为全局配置文件,针对每一台需要备份的数据库的不同,可以在备份集目录里的mysql-zrm.conf再定义,这里的定义可以覆盖全局定义。
首先,我们把一些全局定义信息配置在/etc/mysql-zrm/mysql-zrm.conf文件里
#cat /etc/mysql-zrm/mysql-zrm.conf
backup-level=0
backup-mode=logical
backup-type=regular
destination=/yourpath/db
compress=1
compress-plugin=/bin/gzip
encrypt=1
encrypt-plugin="/usr/share/mysql-zrm/plugins/encrypt.pl"
decrypt-option="-d"
all-databases=1
user="backup-user"
password="securepassword"
mailto="your@domain.com"
上面的配置信息应该比较直观。
然后配置每一台MySQL服务器的一些特有参数
#cat /etc/mysql-zrm/cp2.domain.com/mysql-zrm.conf
host="cp2.domain.com"
destination=/yourpath/db
#cat /etc/mysql-zrm/cp3.domain.com/mysql-zrm.conf
host="cp3.domain.com"
destination=/yourpath/db
创建加密的密码文件
[root@cp1:~# touch /etc/mysql-zrm/.passphrase
[root@cp1:~# echo encryptpass > /etc/mysql-zrm/.passphrase
[root@cp1:~# chmod 700 /etc/mysql-zrm/.passphrase
二、配置客户端
这里有两台机器,cp2和cp3,因为我们备份的类型一样,所以cp2的配置过程和cp3的配置过程一样,这里只描述cp2的配置过程
1.登录cp2服务器
2.用MySQL的管理员帐号(一般是root)登录MySQL数据库
mysql -uroot -p
Enter password:
Welcome TO the MySQL monitor. Commands end WITH ; OR \g.
Your MySQL connection id IS 38208
Server version: 5.0.45-log Source distribution
Type 'help;' OR '\h' FOR help. Type '\c' TO clear the buffer.
mysql>
3.创建一个用户备份的帐号并授予一定的权限,帐号的定义在备份服务器的/etc/mysql-zrm/mysql-zrm.conf文件里有定义,这里帐号是backup-user,密码是securepassword
mysql> GRANT SELECT, INSERT, UPDATE, CREATE, DROP, reload, shutdown,
-> ALTER, super, LOCK TABLES, replication client ON *.* TO
-> 'backup-user'@'cp1.domain.com' IDENTIFIED BY 'securepassword';
提示:如果你需要备份的数据库不是全部,那么在授权的时候,最好是指定,而不是上面的*.*方式,安全为主!
三、测试备份
配置还是比较简单的,现在我们开始测试。
首先的用root帐号登录cp1机器,然后执行下面的指令:
root@cp1:/etc/mysql-zrm# mysql-zrm --action backup --backup-level 0 --backup-set cp3.domain.com
backup:INFO: ZRM for MySQL Community Edition - version 2.1
cp3.domain.com:backup:INFO: START OF BACKUP
cp3.domain.com:backup:INFO: PHASE START: Initialization
cp3.domain.com:backup:INFO: The quick backup-type is supported only for snapshot backups. Setting backup-type to 'regular'
cp3.domain.com:backup:WARNING: Binary logging is off.
cp3.domain.com:backup:INFO: backup-set=cp3.domain.com
cp3.domain.com:backup:INFO: backup-date=20090415180321
cp3.domain.com:backup:INFO: mysql-server-os=Linux/Unix
cp3.domain.com:backup:INFO: backup-type=regular
cp3.domain.com:backup:INFO: host=cp3.3yidc.cn
cp3.domain.com:backup:INFO: backup-date-epoch=1239789801
cp3.domain.com:backup:INFO: mysql-zrm-version=ZRM for MySQL Community Edition - version 2.1
cp3.domain.com:backup:INFO: mysql-version=5.0.45
cp3.domain.com:backup:INFO: backup-directory=/yourpath/db/cp3.domain.com/20090415180321
cp3.domain.com:backup:INFO: backup-level=0
cp3.domain.com:backup:INFO: backup-mode=logical
cp3.domain.com:backup:INFO: PHASE END: Initialization
cp3.domain.com:backup:INFO: PHASE START: Running pre backup plugin
cp3.domain.com:backup:INFO: PHASE END: Running pre backup plugin
cp3.domain.com:backup:INFO: PHASE START: Flushing logs
cp3.domain.com:backup:INFO: PHASE END: Flushing logs
cp3.domain.com:backup:INFO: PHASE START: Creating logical backup
cp3.domain.com:backup:INFO: logical-databases=apachelogs dtc fireyang hnnoritz mysql s567 wordpress
cp3.domain.com:backup:INFO: PHASE END: Creating logical backup
cp3.domain.com:backup:INFO: PHASE START: Calculating backup size & checksums
cp3.domain.com:backup:INFO: last-backup=/csdata/backup/db/cp3.domain.com/20090415180226
cp3.domain.com:backup:INFO: backup-size=4.04 MB
cp3.domain.com:backup:INFO: PHASE END: Calculating backup size & checksums
cp3.domain.com:backup:INFO: PHASE START: Compression/Encryption
cp3.domain.com:backup:INFO: compress=/bin/gzip
cp3.domain.com:backup:INFO: encrypt=/usr/share/mysql-zrm/plugins/encrypt.pl
cp3.domain.com:backup:INFO: decrypt-option=-d
cp3.domain.com:backup:INFO: backup-size-compressed=0.46 MB
cp3.domain.com:backup:INFO: PHASE END: Compression/Encryption
cp3.domain.com:backup:INFO: read-locks-time=00:00:02
cp3.domain.com:backup:INFO: flush-logs-time=00:00:00
cp3.domain.com:backup:INFO: compress-encrypt-time=00:00:02
cp3.domain.com:backup:INFO: backup-time=00:00:02
cp3.domain.com:backup:INFO: backup-status=Backup succeeded
cp3.domain.com:backup:INFO: Backup succeeded
cp3.domain.com:backup:INFO: PHASE START: Running post backup plugin
cp3.domain.com:backup:INFO: PHASE END: Running post backup plugin
cp3.domain.com:backup:INFO: PHASE START: Mailing backup report
cp3.domain.com:backup:INFO: PHASE END: Mailing backup report
cp3.domain.com:backup:INFO: PHASE START: Cleanup
cp3.domain.com:backup:INFO: PHASE END: Cleanup
cp3.domain.com:backup:INFO: END OF BACKUP
以上是备份cp3.domain.com的数据库,用同样的指令可以备份cp2.domain.com数据库。
4、检验
如果上述备份过程没有报错,那么接下来就要看看备份的数据是不是有效了。在cp1机器上执行下面的指令
root@cp1:~# mysql-zrm --action verify-backup --backup-set cp3.domain.com
verify-backup:INFO: ZRM for MySQL Community Edition - version 2.1
cp3.domain.com:verify-backup:INFO: Verification successful
root@cp1:~# mysql-zrm --action verify-backup --backup-set cp2.domain.com
verify-backup:INFO: ZRM for MySQL Community Edition - version 2.1
cp2.domain.com:verify-backup:INFO: Verification successful
校验都没有报错,我们还可以看看备份的性能,备份的详细信息等,更多的使用方式,可以查看mysql-zrm(1)
root@cp1:~# mysql-zrm --action report --show backup-performance-info
REPORT TYPE : backup-performance-info
backup_set backup_date backup_level backup_size backup_size_compressed backup_time
----------------------------------------------------------------------------------------------------------------------------------------------------------------
cp3.domain.com Wed 15 Apr 2009 06:03:21 0 4.04 MB 0.46 MB 00:00:02
cp3.domain.com Wed 15 Apr 2009 06:02:26 0 4.04 MB 0.46 MB 00:00:02
cp3.domain.com Wed 15 Apr 2009 06:01:38 0 4.04 MB 0.46 MB 00:00:03
cp2.domain.com Wed 15 Apr 2009 05:19:57 0 315.05 MB 121.38 MB 00:02:36
cp3.domain.com Wed 15 Apr 2009 05:19:33 0 4.03 MB 0.46 MB 00:00:02
root@cp1:~# mysql-zrm --action list --backup-set cp3.domain.com
list:INFO: ZRM for MySQL Community Edition - version 2.1
0 /csdata/backup/db/cp3.domain.com/20090415180321
Index File
{ decrypt-option=-d
backup-status=Backup succeeded
mysql-version=5.0.45
backup-date=20090415180321
mysql-zrm-version=ZRM for MySQL Community Edition - version 2.1
compress-encrypt-time=00:00:02
backup-type=regular
logical-databases=apachelogs dtc fireyang hnnoritz mysql s567 wordpress
mysql-server-os=Linux/Unix
backup-level=0
last-backup=/csdata/backup/db/cp3.domain.com/20090415180226
backup-size-compressed=0.46 MB
backup-size=4.04 MB
encrypt=/usr/share/mysql-zrm/plugins/encrypt.pl
backup-set=cp3.domain.com
backup-time=00:00:02
host=cp3.3yidc.cn
backup-directory=/csdata/backup/db/cp3.domain.com/20090415180321
flush-logs-time=00:00:00
read-locks-time=00:00:02
compress=/bin/gzip
backup-date-epoch=1239789801
}
root@cp1:~#
五、恢复
假定cp2服务器上的数据库ehcpbackup20090403170240丢失了(这里是我人工删除了这个库),我们看看如何从备份里恢复。
1.登录cp1机器
2.执行下面的命令,看看cp2机器上的数据库现在备份在哪里(为了显示直观,输出结果有处理)
root@cp1:~# mysql-zrm-reporter --show restore-info --where backup-set=cp2.domain.com
REPORT TYPE : restore-info
backup_set backup_date backup_level backup_directory
------------------------------------------------------------------------------
cp3.domain.com 15/4 2009 0 /yourpath/db/cp2.domain.com/20090415171957
3.然后执行真正的备份指令:
root@cp1:~#mysql-zrm --action restore --backup-set cp2.domain.com --source-directory \
> /yourpath/db/cp2.domain.com/20090415171957
INFO: ZRM for MySQL Enteprise Edition - version 1.1
WARNING: Binary logging is off. Incremental backups cannot be done.
INFO: Restore done in 169 seconds.
MySQL server has been shutdown. Please restart after verification.
4.重启cp2机器上的MySQL服务。
到此恢复完成。
使用Amanda ZRM备份远程MySQL数据库的更多相关文章
- 如何定时备份远程mysql数据库
通常,站长们都没有自己的服务器,每天都要手动备份数据库那也很麻烦.这里推荐一个方法,利用windows的计划任务来实现. 前提:本地机器上装有mysql服务. 假设本地机器上mysql服务目录 d: ...
- 备份还原mysql数据库
Windows下cmd命令行中备份还原mysql数据库 先cmd 上cd 到mysql的安装bin目录下,然后再运行下面的命令. 例如:cd C:\Program Files\MySQL\MySQL ...
- Navicat备份远程Oracle数据库到本地
公司的数据库是本地的,我只能在公司连,回家就不能跑项目了,一跑就报SQLException,所以希望可以把数据库复制到我的本地来. 因为一直在用Navicat操作数据库,这里就分享一下用Navicat ...
- C#备份还原MySql数据库
原文:C#备份还原MySql数据库 项目结束,粘点代码出来让Google或Baidu一下,原因是现在还搜不到这么现成的 调用MySql的工具mysqldump来实现. 类Cmd来实现调用cmd命令, ...
- phpMyAdmin访问远程MySQL数据库的方法
本地phpmyadmin远程连接服务器端MySQL 首先要确定你的mysql远程连接已开启,如果没有开启按照下面的二个方法操作: 方法一:改表法 因为在linux环境下,默认是关闭3306端口远程连接 ...
- 自动备份远程mongodb数据库并拉取到本地
自动备份远程mongodb数据库并拉取到本地 目标: 远程服务器 .1中的mongodb数据拉回公司测试服务器中 .远程服务器中编写自动备份mongodb脚本 ①编写脚本 # vim /opt/bac ...
- 连接远程MySQL数据库项目启动时,不报错但是卡住不继续启动的,
连接远程MySQL数据库项目启动时,不报错但是卡住不继续启动的, 2018-03-12 17:08:52.532DEBUG[localhost-startStop-1]o.s.beans.factor ...
- 【MySql 】is not allowed to connect to this MySql server 无法访问远程MySQL数据库
问题:访问远程MySQL数据库时报错[is not allowed to connect to this MySql server ]不允许访问,因为MySQL默认只有本机localhost能够访问M ...
- 访问远程mysql数据库,出现报错,显示“1130 - Host'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server“
在使用Navicat for MySQl访问远程mysql数据库,出现报错,显示“1130 - Host'xxx.xxx.xxx.xxx' is not allowed to connect to t ...
随机推荐
- solr(一) : 整合 tomcat
前面 lucene 初探 都是为了solr打基础的. 虽然lucene 的filter 没有涉及, 但是打基础, 差不多够用了. 一. solr 和 lucene 的区别 这里我就用自己的理解来说了, ...
- spring boot 与 thymeleaf (3): 设置属性、条件、遍历、局部变量、优先级、内联语法
前面记录了 thymeleaf 基本表达式, 这里继续看一下其他功能. 一. 设置属性值 这里的controller, html框架 还是沿用上一篇的部分. html: <div class=& ...
- postgresql 导出和导入数据库
使用 pg_dump 和 pg_restore 来备份和还原 postgresql的数据: 导出:pg_dump导入:pg_restore 最简单的导出命令如下:(导出指定数据库) $ pg_dump ...
- Ice简介+Qt代码示例
1.ICE是什么? ICE是ZEROC的开源通信协议产品,它的全称是:The Internet Communications Engine,翻译为中文是互联网通信引擎,是一个面向对象的中间件,它封装并 ...
- Spark2.1.0——深入浅出度量系统
Spark2.1.0--深入浅出度量系统 对于一个系统而言,首先考虑要满足一些业务场景,并实现功能.随着系统功能越来越多,代码量级越来越高,系统的可维护性.可测试性.性能都会成为新的挑战,这时监控功能 ...
- 分布式理论(一) —— CAP 定理
目录: 什么是 CAP 定理 为什么只能 3 选 2 能不能解决 3 选 2 的问题 引用 1. 什么是 CAP 定理 2000 年的时候,Eric Brewer 教授提出了 CAP 猜想,2年后,被 ...
- Visual Studio 监视与快速监视即时窗口没有智能提示
工具->选项->文本编辑器->C# 将 自动列出成员 参数信息 都勾选上
- RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列
一.理论: .net环境下,C#代码调用RabbitMQ消息队列,本文用easynetq开源的.net Rabbitmq api来实现. EasyNetQ 是一个易于使用的RabbitMQ的.Net客 ...
- 对vector等STL标准容器进行排序操作(转!)
西方有句谚语:不要重复发明轮子! STL几乎封装了所有的数据结构中的算法,从链表到队列,从向量到堆栈,对hash到二叉树,从搜索到排序,从增加到删除......可以说,如果你理解了STL,你会发现你已 ...
- Dagger2 单例
解锁Dagger2使用姿势(二) 之带你理解@Scope Dagger2从0基础使用,到单例注入的正确姿势 Android之dagger2的简单运用和详细解读(入门)