为了执行 mysqlbackup,我必须以 root 身份执行它。
这是我以普通用户执行它时的示例:
mysqlbackup --compress --user=root --socket=/var/lib/mysql/mysql.sock --backup-dir=/home/user/backup backup
MySQL Enterprise Backup version 3.12.2 Linux-2.6.32-400.37.11.el6uek.i686-i686 [2016/01/19]
Copyright (c) 2003, 2016, Oracle and/or its affiliates. All Rights Reserved.
mysqlbackup: INFO: Starting with following command line ...
mysqlbackup --compress --user=root --socket=/var/lib/mysql/mysql.sock
--backup-dir=/home/user/backup backup
mysqlbackup: INFO:
mysqlbackup: INFO: MySQL server version is '5.5.44-MariaDB'.
mysqlbackup: INFO: Got some server configuration information from running server.
IMPORTANT: Please check that mysqlbackup run completes successfully.
At the end of a successful 'backup' run mysqlbackup
prints "mysqlbackup completed OK!".
160226 08:30:02 mysqlbackup: INFO: MEB logfile created at /home/user/backup/meta/MEB_2016-02-26.08-30-02_compress_backup.log
mysqlbackup: ERROR: Opening of file /var/lib/mysql/ibdata1 failed. Error code: 13, Permission denied
这导致权限被拒绝,所以我尝试用 sudo 执行它,我得到:
sudo mysqlbackup
[sudo] password for user:
sudo: mysqlbackup: command not found
但是当我以 root 身份执行它时,我没有任何问题......
我的用户位于 sudoers 文件内,这样你就知道,我也可以使用 sudo 执行其他命令,没有任何问题,但在这种情况下,我的问题是,为什么我不能使用 sudo 执行它以及如何能够执行它无需重复使用 sudo -i 来获取根环境?
笔记:它们都有相同的 $PATH
[root@localhost ~]# echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/user/.local/bin:/home/user/bin
[root@localhost ~]# exit
[user@localhost backup]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/user/.local/bin:/home/user/bin
答案1
可能secure_path
是在 /etc/sudoers 中设置的。显示的路径which mysqlbackup
不包含在那里,但是echo $PATH
当以您的用户身份或从 root 登录运行时会显示,对吧?不过这看起来确实很奇怪。
答案2
因此,作为普通用户,您的备份失败的原因是因为尝试复制/备份libdata
的文件mysqlbackup
由不同的用户(很可能是“mysql”)或特权用户拥有。因此,mysqlbackup
当您尝试这样做时,以提升的用户身份运行可能是正确的选择。
我推测您无法mysqlbackup
作为高级用户找到的原因是您的PATH
环境设置不正确或根本没有设置。我是否正确地假设你不能做这样的事情:
sudo /usr/bin/mysqldump --compr....
如果可以的话,请确保使用 的绝对路径运行命令mysqldump
。如果由于配置方式而不起作用sudo
,那么您需要尝试不同的策略,例如。
PATH=/usr/bin sudo mysqlbackup --compress ...
如果这有效的话,那就太好了。但是,这对于将来的命令行使用来说不太好。您可以创建一个alias
以便将来运行mysqlbackup
,这样您就不需要在命令行中指定 PATH 供将来使用:
对于bash:
(对于其他 shell,例如zsh
,您需要阅读有关如何设置别名的文档)
echo 'alias mysqlbackup="PATH=/usr/bin sudo mysqlbackup"' >> ~/.bashrc
.bashrc
...在获取文件之后(注销和登录就足够了,或者获取文件 IE . ~/.bashrc
),将来可以通过简单地运行以下命令来调用:
mysqlbackup --compress...
不过,假设这些都不起作用。您可能需要让计算机管理员更改您的 sudo 权限,以便mysqlbackup
包含正确的 PATH 或在 sudoers 文件中指定绝对路径,mysqlbackup
以便您能够在执行时从 shell 调用它sudo
。
希望这有帮助。