Посмотрите на эту структуру на сервере:
/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);
Как только файл конфигурации сгенерирован, настало время переписать резервную копию:
exec("mysqldump --defaults-extra-file={$config} {$db} | gzip > bk.sql.gz");
Я могу подтвердить, что скрипт работает без ошибок. Я открыл файл, и данные там, но каждая сделанная резервная копия всегда возвращает данные для первой пользовательской базы данных, всегда. Я имею в виду:
/home/user1
резервное копирование базы данных пользователя 1;/home/user2
резервное копирование базы данных пользователя 1;/home/user3
резервное копирование базы данных пользователя 1;Кроме того, это очень странно, потому что после запуска скрипта я проверяю config.cnf для каждого пользователя и учетные данные пишутся правильно. Так что я что-то упустил, чтобы mysqldump работал так, как ожидалось для базы данных каждого пользователя?
Задача ещё не решена.
Других решений пока нет …