首页服务器部署
2cb463fb78222ea7be096ee66e1674a0

部署之使用 backup 来备份数据库 (二)

hfpp2012发布于700 次阅读

1. Backup是什么?

Backup是一个ruby的gem,是一个强大的、开源的数据库和文件备份工具。它能备份你的数据库,例如MongoDBMySQLPostgreSQL,还有备份你系统上的目录或文件,例如,可以备份一些重要的配置文件等。备份完之后,它能够支持上传到相应的存储介质,例如本地文件系统,或者通过ftp、ssh等协议连接的远程服务器,亦或是DropboxS3等存储服务器中。备份好的数据支持用压缩工具压缩容量,节约传输和存储资源。还有一点是,它支持通知机制,备份完数据后,它能够通过一些机制,例如slackHipChat、电子邮件等形式来通知。Backup结合linux系统的crontab服务可以实现按时备份。backup这个是其官网,它的源码放于此backup

2. 备份过程

下面就以的实战过程来讲解,我用的是阿里云主机,数据库是PostgreSQL,还有一些配置文件来备份,备份的存储位置就放在主机上的一个目录下,配合crontab服务在凌晨一点自动备份。

2.1 第一步,安装backup这个gem。
gem install backup
2.2 第二步,生成Backup配置文件

backup help generate:model这个指令可以查看具体的参数使用方法。

backup generate:model --trigger rails365_pg \
  --archives --storages='local' --compressor='gzip'

运行完这个命令之后,会在当前目录下产生Backup目录。

编辑新生成的配置文件vim Backup/models/rails365_pg.rb。

Model.new(:rails365_pg, 'Description for rails365_pg') do

  # 备份文件
  archive :my_archive do |archive|
    # Run the `tar` command using `sudo`
    # archive.use_sudo
    archive.add "/home/yinsigan/Backup/models/rails365_pg.rb"
    archive.add "/etc/nginx/conf.d/rails.conf"
    archive.add "/etc/redis/redis.conf"
  end

  # 保持15个备份
  store_with Local do |local|
    local.path       = "~/backups/"
    local.keep       = 15
  end

  # 使用Gzip压缩备份的数据
  compress_with Gzip

  # 备份PostgreSQL数据库
  database PostgreSQL do |db|
    # To dump all databases, set `db.name = :all` (or leave blank)
    db.name               = "rails365_pro"
    db.username           = "postgres"
    db.password           = "xxxxxxx"
    db.host               = "localhost"
    db.port               = 5432
    db.socket             = "/var/run/postgresql/"
    # When dumping all databases, `skip_tables` and `only_tables` are ignored.
    # db.skip_tables        = ["skip", "these", "tables"]
    # db.only_tables        = ["only", "these", "tables"]
    db.additional_options = ["-xc", "-E=utf8"]
  end
end
2.3 执行备份
backup perform --trigger rails365_pg

可能你会发现备份的过程中老是不成功。报的是关于PostgreSQL的认证方面的错。

我是参数这篇文章getting-error-peer-authentication-failed-for-user-postgres-when-trying-to-ge解决的。

找到这个文件

find /etc/postgresql | grep pg_hba.conf

编辑它,把local all postgres peer这一行中的peer改成md5

最后,记得重启postgresql服务器

$ sudo service postgresql restart
3.4 使用crontab按时备份

crontab在unixlinux是很常见的服务,相当于windows的计划任务,就是可以指定时间运行一些程序或任务。

crontab -e

执行此命令进入crontab编辑页面。添加下面一行。

0 1 * * * /bin/bash -l -c 'backup perform --trigger rails365_pg'

重启crontab服务sudo service cron restart

这样就会每天的1点时分进行备份。

关于具体的crontab语法可以自行google。

这里要提到一个技巧。

我们需要debug或测试crontab的效果,你总不能等待一点钟来测试吧。

我们先临时改成每分钟备份一次。

* * * * * /bin/bash -l -c 'backup perform --trigger rails365_pg'

改完后,重启crontab服务sudo service cron restart

执行以下命令观察是否有正确的信息输出。

tail -f /var/log/syslog | grep CRON

再查看backups/rails365_pg是否有相应的目录或文件产生。如果有,说明成功了。

再把时间改回凌晨一点,然后重启crontab就OK了。

完结。

本站文章均为原创内容,如需转载请注明出处,谢谢。

0 条评论
暂无评论~~
喜欢