在服务器中查看此结构:
/home
/home/user1
config.cnf
/home/user2
config.cnf
/home/user3
config.cnf
每个用户在同一服务器中都有一个关联的数据库。我创建了一个php脚本,使用mysqldump
命令使用每个用户的凭据备份数据库,以便单独备份每个数据库。首先,让我向您展示工作流程:
声明连接参数,如user,host,data base name
$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);
生成配置文件后,是时候朗读备份了:
exec("mysqldump --defaults-extra-file={$config} {$db} | gzip > bk.sql.gz");
我可以确认脚本运行正常且没有错误。我打开了文件,数据就在那里,但每次备份都会始终返回第一个用户数据库的数据。我的意思是:
/home/user1
中运行脚本备份用户的1个数据库; /home/user2
中运行脚本备份用户的1个数据库; /home/user3
中运行脚本备份用户的1个数据库; 另外,这很奇怪,因为在运行脚本后,我检查每个用户的config.cnf并正确写入凭据。所以我遗漏了一些东西,以使mysqldump按预期运行每个用户的数据库?