【问题标题】:xtrabackup only performs a full back up if is executed with super user privilegesxtrabackup 仅在以超级用户权限执行时才执行完整备份
【发布时间】:2023-04-06 17:54:01
【问题描述】:

根据这个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 运行相同的命令解决了这个问题,问题是备份目录是以 root 身份创建的,所以我的用户无权访问该目录,所以我总是必须递归地更改该目录的所有权,所以我可以阅读它。这种方法对我来说不是很有效。

  • 还有其他替代方法吗?
  • 我总是必须 用 sudo 执行这个命令?

【问题讨论】:

  • 您是否尝试过使用拥有数据库文件的同一用户来运行它?通常是mysql
  • 我想做的是和我的用户一起运行它。
  • 您想要什么和 UNIX 权限允许什么可能是两件不同的事情。数据库应该受到保护。
  • @tadman 你有什么推荐的?
  • 不要与权限系统抗争并使用它。让mysql 用户为您完成备份工作并将其转储到您有权访问的目录中。使用cron 很容易做到这一点。

标签: mysql backup percona


【解决方案1】:

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

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

useradd -G mysql yves

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

【讨论】:

  • 对不起,即使我让用户成为 mysql 组的一部分,我仍然得到同样的错误。但似乎没有写权限的是mysqld InnoDB: The error means mysqld does not have the access rights to the directory.
  • 确保 /var/lib/mysql 中的所有文件都具有组读/写权限,然后您的用户应该能够进行备份。 innobackup 在文件级别运行,因此如果您的用户无法打开文件,那么 innobackup(由您执行)也不能。或者编写一个包装脚本,将备份作为 root 然后 chown 完成备份;超级简单。
  • 这对我有用,但我还需要允许为mysql 组中的用户列出数据库目录:find /var/lib/mysql/* -type d -exec chmod 755 {} \;
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-18
      • 1970-01-01
      • 2013-07-02
      • 2019-12-31
      • 1970-01-01
      • 2010-09-19
      • 2017-11-30
      • 2013-08-25
      相关资源
      最近更新 更多