xtrabackup 仅在以超级用户权限执行时才执行完整备份

xtrabackup only performs a full back up if is executed with super user privileges

根据这个link,我执行了这个命令来备份我的数据库:

 xtrabackup --backup --databases='database' --target-dir=/home/user/backups --datadir=/var/lib/mysql/

但是我收到以下错误:

160520 02:00:54  version_check Done.
160520 02:00:54 Connecting to MySQL server host: localhost, user: root, password: set, port: 0, socket: /var/lib/mysql/mysql.sock
Using server version 5.5.44-MariaDB
xtrabackup version 2.4.2 based on MySQL server 5.7.11 Linux (x86_64) (revision id: 8e86a84)
xtrabackup: uses posix_fadvise().
xtrabackup: cd to /var/lib/mysql/
xtrabackup: open files limit requested 0, set to 1024
xtrabackup: using the following InnoDB configuration:
xtrabackup:   innodb_data_home_dir = .
xtrabackup:   innodb_data_file_path = ibdata1:10M:autoextend
xtrabackup:   innodb_log_group_home_dir = .
xtrabackup:   innodb_log_files_in_group = 2
xtrabackup:   innodb_log_file_size = 5242880
InnoDB: Number of pools: 1
InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to the directory.

我通过 运行 与 sudo 相同的命令解决了这个问题,问题是备份目录被创建为根目录所以我的用户无权访问该目录所以我总是必须更改所有权递归地访问该目录,以便我能够读取它。这种方法对我来说不是很有效。

xtrabackup 工具作为调用它的用户运行,该用户必须能够读取通常由 mysql:mysql 拥有的数据库文件 和模式 660。

一个简单的解决方法通常是将用户添加到 mysql 组,例如:

useradd -G mysql yves

然后注销并重新打开会话,应该可以了。

我认为您正试图按照 Percona 希望您使用他们的东西的方式进行斗争,尽管我可能是错的。

我知道 innobackupex(与 xtrabackup 一起安装的 perl 脚本)应该是 运行 作为 root,因为 Percona 的一位支持工程师在这里这样说:https://www.percona.com/forums/questions-discussions/percona-xtrabackup/8748-error-trying-to-run-backup

也许 xtrabackup 命令应该以相同的方式使用?

如果您在成功 运行 备份脚本一段时间后遇到此错误并且无法弄清楚发生了什么变化,请在您的 MySQL 目录下寻找一个新文件夹(通常 /var/lib/mysql).我已经两次发现仅在用户级别(即:drwx------)使用权限创建的新数据库没有组读取访问权限。修复权限的目录的快速 chmod 750 为我解决了这个问题。