因此,我的目的是备份一些包含我的文档和 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