一个 rsync cronjob 运行,但不复制文件

一个 rsync cronjob 运行,但不复制文件

因此,我的目的是备份一些包含我的文档和 MySQL 数据文件等的关键目录。我设置了一个 cronjob,它似乎适用于其中的所有命令。文件每天都会复制到备份驱动器中。

只是那个应该复制 MySQL 文件夹内容的程序只是复制了文件夹,但没有复制任何内容。

我把所有目录末尾的斜杠“/”都去掉了,因为我读到这意味着复制目录中的所有信息。

知道为什么命令创建并将 MYSQL 目录复制到我的备份位置但没有文件吗?这是权限问题吗,只有 root 用户才能执行此操作?如果是这样,我该如何完成?

我的 crontab 文件包含:

44 4 * * * /usr/bin/rsync -av --delete /var/www/html /media/stan/Seagate\ Expansion\ Drive/backups/
33 3 * * * /usr/bin/rsync -av --delete /home/stan/documents /media/stan/Seagate\ Expansion\ Drive/backups/
03 3 * * * /usr/bin/rsync -av /var/lib/mysql /media/stan/Seagate\ Expansion\ Drive/backups/
02 2 * * * /usr/bin/rsync -av --delete /var/backups /media/stan/Seagate\ Expansion\ Drive/backups/

更新: 我从命令行运行特定命令并出现以下错误:

stan@corsair:~$ /usr/bin/rsync -av /var/lib/mysql /media/stan/Seagate\ Expansion\ Drive/backups/
sending incremental file list
rsync: opendir "/var/lib/mysql" failed: Permission denied (13)
mysql/

sent 73 bytes  received 20 bytes  186.00 bytes/sec
total size is 0  speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1183) [sender=3.1.0]

编辑。我​​使用的解决方案 我认为 rsync 不是最好的工具,因为我必须停止 MySQL 服务器。我采纳了 @AB 的 mysqldump 建议。

最后的命令添加了急需的压缩,每次备份可节省 75% 的空间:

mysqldump -u root -pmypass --all-databases | gzip >  /media/stan/Seagate\ Expansion\ Drive/backups/mysql/mysqlbak-$(date  "+\%Y-\%m-\%d_\%H:\%M:\%S").sql.gz

答案1

在开始备份之前停止 MySQL 服务器

sudo service mysql stop

你有权限问题

rsync:opendir“/var/lib/mysql”失败:权限被拒绝(13)

因此使用你的 root 的 crontab:

sudo crontab -e

我更喜欢使用 进行备份mysqldump。因此,服务既不能停止也不能重新启动。

mysqldump -u root -p --all-databases > /media/stan/Seagate\ Expansion\ Drive/backups/

或者摘自评论(@NormanBird)如下,gzip

mysqldump -u root -pmypass --all-databases | gzip > /media/stan/Seagate\ Expansion\ Drive/backups/mysql/mysqlbak-$(date "+\%Y-\%m-\%d_\%H:\%M:\%S").sql.gz

相关内容