Я знаю, как вы это делаете с консоли, и знаю, что вы можете выполнять консольные команды с помощью php, но есть ли способ рекурсивно выгружать базу данных в файл, а затем восстанавливать ее из этого файла позже, просто используя php? Я хочу, чтобы он работал на серверах windows и nix.
Я предполагаю, что потребуется перебрать таблицы и строки, но как мне получить их список? Или это вообще можно сделать? Похоже, если бы db был подходящего размера, потребовался бы огромный объем памяти. Мысли?






mysql_query("SELECT * INTO OUTFILE 'sql/backup.sql' FROM my_table");
mysql_query("LOAD DATA INFILE 'sql/backup.sql' INTO TABLE my_table");
Запустите ПОКАЗАТЬ ТАБЛИЦЫ; запрос. Просмотрите результаты и запустите запросы, перечисленные deizel для каждой таблицы.
Удачи!
Вы можете использовать функцию exec() для вызова mysqldump. Это направит вывод mysqldump (экспорт базы данных) обратно в ваш PHP-скрипт, и вы сможете обработать его там, но это необходимо. Это можно использовать для экспорта отдельной таблицы или всей базы данных. Инструмент может быть установлен на клиентском компьютере или сценарий PHP может быть запущен на сервере MySQL.
/path/to/mysqldump --host=[svr] --user=[user] --password=[passwd] [db]
Убедитесь, что пользователь, переданный в MySQL, имеет разрешения SELECT и LOCK TABLE для каждой базы данных, для которой требуется резервное копирование.
Вы можете просто выгрузить его прямо в файл (mysqldump dbname> dump.sql), а затем оттуда сжать его и обработать, а не возвращать в PHP. Это могло вызвать проблемы с памятью в больших базах данных.
Загляните в базу данных mysql.
Почему это было отклонено? Вы можете получить информацию о PK оттуда.
Я подозреваю, что он был отклонен, потому что ответ слишком расплывчатый, чтобы быть полезным.
Этот может помочь с первичными ключами
SHOW CREATE TABLE my_table
Обратите внимание, что SELECT INTO OUTFILE завершится ошибкой, если файл существует. И процессу базы данных требуется разрешение на запись в целевой каталог.