mysqldump总是使用不同的config.cnf文件备份相同的数据库

时间:2015-03-29 17:50:44

标签: php mysql database mysqldump

在服务器中查看此结构:

/home
    /home/user1
        config.cnf
    /home/user2
        config.cnf
    /home/user3
        config.cnf

每个用户在同一服务器中都有一个关联的数据库。我创建了一个php脚本,使用mysqldump命令使用每个用户的凭据备份数据库,以便单独备份每个数据库。首先,让我向您展示工作流程:

  1. 声明连接参数,如user,host,data base name

    $user = env('db_username');
    $password = env('db_password');
    $db = env('db_database');
    $host = env('db_host');
    
  2. 因为使用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);
    
  3. 生成配置文件后,是时候朗读备份了:

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

    • /home/user1中运行脚本备份用户的1个数据库;
    • /home/user2中运行脚本备份用户的1个数据库;
    • /home/user3中运行脚本备份用户的1个数据库;

    另外,这很奇怪,因为在运行脚本后,我检查每个用户的config.cnf并正确写入凭据。所以我遗漏了一些东西,以使mysqldump按预期运行每个用户的数据库?

0 个答案:

没有答案