Требования | Установка | Начало работы | API | Настройки | Настройки PDO | ДЕЛО | Лицензия | Кредиты
Это PHP-версия mysqldump cli, которая поставляется с MySQL, без зависимостей, сжатия вывода и разумных настроек по умолчанию.
MySQLDump-PHP изначально поддерживает резервное копирование структур таблиц, самих данных, представлений, триггеров и событий.
MySQLDump-PHP — единственная библиотека, которая поддерживает:
Начиная с версии 2.0 подключения к базе данных осуществляются с использованием стандартного DSN, описанного в строке подключения PDO.
Использование Композитора:
$ composer require ifsnop/mysqldump-php
Использование Curl для всегдай загрузки и распаковки последней версии:
$ curl --silent --location https://api.github.com/repos/ifsnop/mysqldump-php/releases | grep -i tarball_url | head -n 1 | cut -d '"' -f 4 | xargs curl --location --silent | tar xvz
С автозагрузчиком/композитором:
<?php
use Ifsnop Mysqldump as IMysqldump ;
try {
$ dump = new IMysqldump Mysqldump ( ' mysql:host=localhost;dbname=testdb ' , ' username ' , ' password ' );
$ dump -> start ( ' storage/work/dump.sql ' );
} catch ( Exception $ e ) {
echo ' mysqldump-php error: ' . $ e -> getMessage ();
}
Обычный старый PHP:
<?php
include_once ( dirname ( __FILE__ ) . ' /mysqldump-php-2.0.0/src/Ifsnop/Mysqldump/Mysqldump.php ' );
$ dump = new Ifsnop Mysqldump Mysqldump ( ' mysql:host=localhost;dbname=testdb ' , ' username ' , ' password ' );
$ dump -> start ( ' storage/work/dump.sql ' );
Обратитесь к вики за некоторыми примерами и сравнением дампов mysqldump и mysqldump-php.
Вы можете зарегистрировать вызываемый объект, который будет использоваться для преобразования значений во время экспорта. Примером использования этого является удаление конфиденциальных данных из дампов базы данных:
$ dumper = new IMysqldump Mysqldump ( ' mysql:host=localhost;dbname=testdb ' , ' username ' , ' password ' );
$ dumper -> setTransformTableRowHook ( function ( $ tableName , array $ row ) {
if ( $ tableName === ' customers ' ) {
$ row [ ' social_security_number ' ] = ( string ) rand ( 1000000 , 9999999 );
}
return $ row ;
});
$ dumper -> start ( ' storage/work/dump.sql ' );
Вы можете зарегистрировать вызываемый объект, который будет использоваться для сообщения о ходе дампа.
$ dumper ->setInfoHook( function ( $ object , $ info ) {
if ( $ object === ' table ' ) {
echo $ info [ ' name ' ], $ info [ ' rowCount ' ];
});
Вы можете зарегистрировать специальные предложения «где» для таблицы, чтобы ограничить данные для каждой таблицы. Они переопределяют настройку по умолчанию where
дамп:
$ dumper = new IMysqldump Mysqldump ( ' mysql:host=localhost;dbname=testdb ' , ' username ' , ' password ' );
$ dumper -> setTableWheres ( array (
' users ' => ' date_registered > NOW() - INTERVAL 3 MONTH AND deleted=0 ' ,
' logs ' => ' date_logged > NOW() - INTERVAL 1 DAY ' ,
' posts ' => ' isLive=1 '
));
Вы можете зарегистрировать «ограничения» для конкретной таблицы, чтобы ограничить возвращаемые строки для каждой таблицы:
$ dumper = new IMysqldump Mysqldump ( ' mysql:host=localhost;dbname=testdb ' , ' username ' , ' password ' );
$ dumper -> setTableLimits ( array (
' users ' => 300 ,
' logs ' => 50 ,
' posts ' => 10
));
/**
* Constructor of Mysqldump. Note that in the case of an SQLite database
* connection, the filename must be in the $db parameter.
*
* @param string $dsn PDO DSN connection string
* @param string $user SQL account username
* @param string $pass SQL account password
* @param array $dumpSettings SQL database settings
* @param array $pdoSettings PDO configured attributes
*/
public function __construct(
$ dsn = '' ,
$ user = '' ,
$ pass = '' ,
$ dumpSettings = array (),
$ pdoSettings = array ()
)
$ dumpSettingsDefault = array (
' include-tables ' => array (),
' exclude-tables ' => array (),
' compress ' => Mysqldump:: NONE ,
' init_commands ' => array (),
' no-data ' => array (),
' if-not-exists ' => false ,
' reset-auto-increment ' => false ,
' add-drop-database ' => false ,
' add-drop-table ' => false ,
' add-drop-trigger ' => true ,
' add-locks ' => true ,
' complete-insert ' => false ,
' databases ' => false ,
' default-character-set ' => Mysqldump:: UTF8 ,
' disable-keys ' => true ,
' extended-insert ' => true ,
' events ' => false ,
' hex-blob ' => true , /* faster than escaped content */
' insert-ignore ' => false ,
' net_buffer_length ' => self :: MAXLINESIZE ,
' no-autocommit ' => true ,
' no-create-db ' => false ,
' no-create-info ' => false ,
' lock-tables ' => true ,
' routines ' => false ,
' single-transaction ' => true ,
' skip-triggers ' => false ,
' skip-tz-utc ' => false ,
' skip-comments ' => false ,
' skip-dump-date ' => false ,
' skip-definer ' => false ,
' where ' => '' ,
/* deprecated */
' disable-foreign-keys-check ' => true
);
$ pdoSettingsDefaults = array (
PDO :: ATTR_PERSISTENT => true ,
PDO :: ATTR_ERRMODE => PDO :: ERRMODE_EXCEPTION ,
PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY => false
);
// missing settings in constructor will be replaced by default options
$ this -> _pdoSettings = self :: array_replace_recursive ( $ pdoSettingsDefault , $ pdoSettings );
$ this -> _dumpSettings = self :: array_replace_recursive ( $ dumpSettingsDefault , $ dumpSettings );
true
для игнорирования всех таблиц.Следующие параметры теперь включены по умолчанию, и отключить их невозможно, поскольку их следует использовать всегда.
Чтобы создать дамп базы данных, вам необходимы следующие привилегии:
Используйте ПОКАЗАТЬ ГРАНТЫ ДЛЯ пользователя@хост; чтобы узнать, какие привилегии имеет пользователь. Для получения дополнительной информации перейдите по следующей ссылке:
Какие минимальные права необходимы для получения резервной копии схемы базы данных MySQL?
Текущий код для тестирования — это уродливый хак. Вероятно, есть гораздо лучшие способы сделать это с помощью PHPUnit, поэтому пиар приветствуется. Сценарий тестирования создает и заполняет базу данных, используя все возможные типы данных. Затем он экспортирует его, используя mysqldump-php и mysqldump, и сравнивает выходные данные. Только если оно идентично, тесты в порядке. После этого коммита выполняются некоторые тесты с использованием phpunit.
Некоторые тесты пропускаются, если сервер MySQL их не поддерживает.
Несколько тестов сравнивают только исходный код sql и sql, сгенерированный mysqldump-php, поскольку некоторые параметры недоступны в mysqldump.
После этого отчета об ошибке был представлен новый. _binary добавляется также при использовании опции hex-blob, если значение пустое.
mysqldump-php не обратно совместим с PHP 5.2, поскольку он использует пространства имен. Однако при необходимости это можно тривиально исправить.
Напишите больше тестов, также протестируйте с помощью MariaDB.
Отформатируйте весь код в соответствии со стандартами PHP-FIG. https://www.php-fig.org/
Этот проект представляет собой программное обеспечение с открытым исходным кодом, лицензированное по лицензии GPL.
Спустя более чем 8 лет от исходного исходного кода почти ничего не осталось, но:
Первоначально основано на сценарии Джеймса Эллиотта 2009 года. https://code.google.com/archive/p/db-mysqldump/
Адаптировано и расширено Майклом Дж. Калкинсом. https://github.com/clouddueling
В настоящее время поддерживается, развивается и улучшается Диего Торресом. https://github.com/ifsnop