Этот репозиторий содержит простой в использовании класс для дампа базы данных с помощью PHP. В настоящее время поддерживаются MySQL, PostgreSQL, SQLite и MongoDB. За кулисами используются mysqldump
, pg_dump
, sqlite3
и mongodump
.
Вот простые примеры того, как создать дамп базы данных с разными драйверами:
MySQL
SpatieDbDumperDatabasesMySql::create() ->setDbName($имя_базы_данных) ->setUserName($userName) ->setPassword($пароль) ->dumpToFile('dump.sql');
PostgreSQL
SpatieDbDumperDatabasesPostgreSql::create() ->setDbName($имя_базы_данных) ->setUserName($userName) ->setPassword($пароль) ->dumpToFile('dump.sql');
SQLite
SpatieDbDumperDatabasesSqlite::create() ->setDbName($pathToDatabaseFile) ->dumpToFile('dump.sql');
includeTables
требуется Sqlite версии 3.32.0.
МонгоБД
SpatieDbDumperDatabasesMongoDb::create() ->setDbName($имя_базы_данных) ->setUserName($userName) ->setPassword($пароль) ->dumpToFile('dump.gz');
Мы вкладываем много ресурсов в создание лучших в своем классе пакетов с открытым исходным кодом. Вы можете поддержать нас, купив один из наших платных продуктов.
Мы очень признательны вам за отправку нам открытки из вашего родного города с указанием того, какой из наших пакетов вы используете. Наш адрес вы найдете на странице контактов. Все полученные открытки мы публикуем на нашей виртуальной стене открыток.
Для создания дампа MySQL-db должен быть установлен mysqldump
.
Для создания дампа PostgreSQL-db необходимо установить pg_dump
.
Для дампа SQLite-db должен быть установлен sqlite3
.
Для создания дампа необходимо установить mongodump
MongoDB-db.
Для сжатия файлов дампа необходимо установить gzip
и/или bzip2
.
Вы можете установить пакет через композитор:
композитору требуется spatie/db-dumper
Это самый простой способ создать дамп базы данных MySql:
SpatieDbDumperDatabasesMySql::create() ->setDbName($имя_базы_данных) ->setUserName($userName) ->setPassword($пароль) ->dumpToFile('dump.sql');
Если вы работаете с PostgreSQL, просто используйте этот дампер, большинство методов доступны как в MySql. и PostgreSql-дампер.
SpatieDbDumperDatabasesPostgreSql::create() ->setDbName($имя_базы_данных) ->setUserName($userName) ->setPassword($пароль) ->dumpToFile('dump.sql');
Если двоичный файл mysqldump
(или pg_dump
) установлен не в папке по умолчанию, вы можете сообщить об этом пакету с помощью функции setDumpBinaryPath()
:
SpatieDbDumperDatabasesMySql::create() ->setDumpBinaryPath('/custom/location') ->setDbName($имя_базы_данных) ->setUserName($userName) ->setPassword($пароль) ->dumpToFile('dump.sql');
Если ваше приложение развернуто и вам необходимо изменить хост (по умолчанию — 127.0.0.1), вы можете добавить функцию setHost()
:
SpatieDbDumperDatabasesMySql::create() ->setDbName($имя_базы_данных) ->setUserName($userName) ->setPassword($пароль) ->setHost($хост) ->dumpToFile('dump.sql');
При создании дампа базы данных вам может потребоваться контролировать включение значений AUTO_INCREMENT. Это может иметь решающее значение для предотвращения конфликтов первичных ключей или для обеспечения согласованности идентификаторов при передаче данных между средами.
Чтобы исключить значения AUTO_INCREMENT из таблиц в дампе, используйте метод SkipAutoIncrement. Это особенно полезно для предотвращения конфликтов при импорте дампа в другую базу данных, где эти конкретные значения AUTO_INCREMENT могут уже существовать, или когда точные значения не имеют значения.
SpatieDbDumperDatabasesMySql::create() ->setDbName('имя_базы_данных') ->setUserName('имя пользователя') ->setPassword('пароль') ->skipAutoIncrement() ->dumpToFile('dump.sql');
По умолчанию значения AUTO_INCREMENT включаются в дамп. Однако если вы ранее использовали методskipAutoIncrement и хотите, чтобы значения AUTO_INCREMENT были включены в последующий дамп, используйте метод dontSkipAutoIncrement, чтобы явно включить их.
SpatieDbDumperDatabasesMySql::create() ->setDbName('имя_базы_данных') ->setUserName('имя пользователя') ->setPassword('пароль') ->dontSkipAutoIncrement() ->dumpToFile('dump.sql');
В некоторых приложениях или средах учетные данные базы данных предоставляются в виде URL-адресов, а не отдельных компонентов. В этом случае вы можете использовать метод setDatabaseUrl
вместо отдельных методов.
SpatieDbDumperDatabasesMySql::create() ->setDatabaseUrl($databaseUrl) ->dumpToFile('dump.sql');
При предоставлении URL-адреса пакет автоматически анализирует его и передает отдельные компоненты соответствующему дамперу.
Например, если вы укажете URL-адрес mysql://username:password@hostname:3306/dbname
, дамп будет использовать хост hostname
, работающий на порту 3306
, и подключится к dbname
с username
и password
.
Использование массива:
SpatieDbDumperDatabasesMySql::create() ->setDbName($имя_базы_данных) ->setUserName($userName) ->setPassword($пароль) ->includeTables(['таблица1', 'таблица2', 'таблица3']) ->dumpToFile('dump.sql');
Использование строки:
SpatieDbDumperDatabasesMySql::create() ->setDbName($имя_базы_данных) ->setUserName($userName) ->setPassword($пароль) ->includeTables('таблица1, таблица2, таблица3') ->dumpToFile('dump.sql');
Чтобы использовать « --column-statistics=0 » в качестве опции в команде mysqldump, вы можете использовать метод doNotUseColumnStatistics() .
Если вы установили mysqldump 8 , он по умолчанию запрашивает таблицу columns_statics в базе данных Information_schema . В какой-то старой версии MySql (сервиса), например 5.7, эта таблица не существует. Таким образом, у вас может возникнуть исключение во время выполнения mysqldump. Чтобы избежать этого, вы можете использовать метод doNotUseColumnStatistics() .
SpatieDbDumperDatabasesMySql::create() ->setDbName($имя_базы_данных) ->setUserName($userName) ->setPassword($пароль) ->doNotUseColumnStatistics() ->dumpToFile('dump.sql');
Вы можете исключить таблицы из дампа, используя массив:
SpatieDbDumperDatabasesMySql::create() ->setDbName($имя_базы_данных) ->setUserName($userName) ->setPassword($пароль) ->excludeTables(['таблица1', 'таблица2', 'таблица3']) ->dumpToFile('dump.sql');
Или с помощью строки:
SpatieDbDumperDatabasesMySql::create() ->setDbName($имя_базы_данных) ->setUserName($userName) ->setPassword($пароль) ->excludeTables('таблица1, таблица2, таблица3') ->dumpToFile('dump.sql');
Вы можете использовать doNotCreateTables
, чтобы предотвратить запись операторов создания.
$dumpCommand = MySql::create() ->setDbName('имя_базы_данных') ->setUserName('имя пользователя') ->setPassword('пароль') ->doNotCreateTables() ->getDumpCommand('dump.sql', 'credentials.txt');
Вы можете использовать doNotDumpData
, чтобы предотвратить запись данных строки.
$dumpCommand = MySql::create() ->setDbName('имя_базы_данных') ->setUserName('имя пользователя') ->setPassword('пароль') ->doNotDumpData() ->getDumpCommand('dump.sql', 'credentials.txt');
Если вы хотите добавить произвольную опцию в команду дампа, вы можете использовать addExtraOption
$dumpCommand = MySql::create() ->setDbName('имя_базы_данных') ->setUserName('имя пользователя') ->setPassword('пароль') ->addExtraOption('--xml') ->getDumpCommand('dump.sql', 'credentials.txt');
Если вы работаете с MySql, вы можете установить имя базы данных, используя --databases
в качестве дополнительной опции. Это особенно полезно при использовании в сочетании с опцией mysqldump
--add-drop-database
(см. документацию mysqldump).
$dumpCommand = MySql::create() ->setUserName('имя пользователя') ->setPassword('пароль') ->addExtraOption('--имя базы данных') ->addExtraOption('--add-drop-database') ->getDumpCommand('dump.sql', 'credentials.txt');
В MySql у вас также есть возможность использовать дополнительную опцию --all-databases
. Это полезно, если вы хотите запустить полную резервную копию всех баз данных в указанном соединении MySQL.
$dumpCommand = MySql::create() ->setUserName('имя пользователя') ->setPassword('пароль') ->addExtraOption('--все-базы данных') ->getDumpCommand('dump.sql', 'credentials.txt');
Обратите внимание, что использование ->addExtraOption('--databases dbname')
или ->addExtraOption('--all-databases')
переопределит имя базы данных, установленное при предыдущем вызове ->setDbName()
.
Если вы хотите, чтобы выходной файл был сжат, вы можете использовать класс компрессора.
Из коробки идут два компрессора:
GzipCompressor
— сжимает дамп вашей базы данных с помощью gzip
. Перед использованием убедитесь, что в вашей системе установлен gzip
.
Bzip2Compressor
— сжимает дамп вашей базы данных с помощью bzip2
. Перед использованием убедитесь, что в вашей системе установлен bzip2
.
$dumpCommand = MySql::create() ->setDbName('имя_базы_данных') ->setUserName('имя пользователя') ->setPassword('пароль') ->useCompressor(new GzipCompressor()) // или `new Bzip2Compressor()`->dumpToFile('dump.sql.gz');
Вы можете создать свой собственный компрессор, реализуя интерфейс Compressor
. Вот как выглядит этот интерфейс:
пространство имен SpatieDbDumperCompressors;компрессор интерфейса {публичная функция useCommand(): строка;публичная функция useExtension(): строка; }
useCommand
должен просто возвращать команду сжатия, в которую будет перекачиваться дамп базы данных. Вот реализация GzipCompression
.
пространство имен SpatieDbDumperCompressors; класс GzipCompressor реализует Compressor {публичная функция useCommand(): строка {return 'gzip'; } Публичная функция useExtension(): строка {return 'gz'; } }
$ тест композитора
Пожалуйста, посетите CHANGELOG для получения дополнительной информации о том, что изменилось за последнее время.
Пожалуйста, смотрите ВКЛАД для получения подробной информации.
Пожалуйста, ознакомьтесь с нашей политикой безопасности, чтобы узнать, как сообщать об уязвимостях безопасности.
Фрик Ван дер Хертен
Все участники
Первоначальная поддержка PostgreSQL была предоставлена Адриано Мачадо. Поддержку SQlite предоставил Петр Мацейканец.
Лицензия MIT (MIT). Дополнительную информацию см. в файле лицензии.