Php mysqldump始终使用不同的config.cnf文件备份同一数据库

Php mysqldump始终使用不同的config.cnf文件备份同一数据库,php,mysql,database,mysqldump,Php,Mysql,Database,Mysqldump,请查看服务器中的此结构: /home /home/user1 config.cnf /home/user2 config.cnf /home/user3 config.cnf 每个用户在同一服务器中都有与其帐户关联的数据库。我创建了一个php脚本,它使用mysqldump命令备份数据库,并使用每个用户的凭据分别备份每个数据库。首先,让我向您展示工作流程: 声明连接参数,如用户、主机、数据库名称 $user = env('d

请查看服务器中的此结构:

/home
    /home/user1
        config.cnf
    /home/user2
        config.cnf
    /home/user3
        config.cnf
每个用户在同一服务器中都有与其帐户关联的数据库。我创建了一个php脚本,它使用mysqldump命令备份数据库,并使用每个用户的凭据分别备份每个数据库。首先,让我向您展示工作流程:

声明连接参数,如用户、主机、数据库名称

$user = env('db_username');
$password = env('db_password');
$db = env('db_database');
$host = env('db_host');
因为使用mysqldump-p{password}将密码作为参数传递是有风险的,所以我继续创建一个临时config.cnf文件,其中包含每个配置文件的以下内容:

$config = 'config.cnf';

// [client]
// user = the-user
// password = the-password
// host = localhost

$credentials = "[client]\nuser = {$user}\npassword = {$password}\nhost = {$host}";
\File::put($config, $credentials);
一旦生成配置文件,就应该进行rum备份:

exec("mysqldump --defaults-extra-file={$config} {$db} | gzip > bk.sql.gz");
我可以确认脚本运行正确,没有错误。我打开了文件,数据就在那里,但是每次备份都会返回第一个用户数据库的数据,总是这样。我的意思是:

在/home/user1中运行脚本备份user的1数据库; 在/home/user2中运行脚本备份用户1的数据库; 在/home/user3中运行脚本备份用户1的数据库;
另外,这非常奇怪,因为在运行脚本之后,我检查了每个用户的config.cnf,并且正确写入了凭据。因此,为了让每个用户的数据库都能像预期的那样运行mysqldump,我缺少了一些东西?

因为哪个用户正在运行脚本,哪个用户正在备份?脚本正在与相应的用户一起运行。服务器是centos 6机器。因此,脚本被复制到每个用户主文件夹中。所以,每次我运行脚本时,我都会在每种情况下su-[用户]哦,我明白了!我使用相关用户的数据库用户凭据运行脚本。例如,为了备份数据库2,我使用user=user2 passowrd=user2。主机对所有人来说都是一样的:localhostIt是一种奇怪的不对称性,它总是备份数据的user1。如果使用配置文件的绝对路径,如`-defaults extra file=/home/{$user}/{$config}`,是否有帮助?假设DB username=Unix username,否则脚本还需要一个变量。我觉得自己太笨了。从一开始一切都很好。在彻底检查了转储文件中的数据后,我发现备份对于每个用户/数据库都是可以的。为什么我感到困惑?因为某种奇怪的原因,insert语句被放置在一个巨大的左边距,所以如果你需要查看数据,你需要向右滚动,就像明天永远不存在一样。非常罕见。但一切都好。多谢各位!