요구사항 | 설치 | 시작하기 | API | 설정 | PDO 설정 | 할 일 | 라이센스 | 크레딧
이것은 종속성, 출력 압축 및 정상적인 기본값 없이 MySQL과 함께 제공되는 mysqldump cli의 PHP 버전입니다.
기본적으로 MySQLDump-PHP는 테이블 구조, 데이터 자체, 보기, 트리거 및 이벤트 백업을 지원합니다.
MySQLDump-PHP는 다음을 지원하는 유일한 라이브러리입니다.
버전 2.0부터 데이터베이스 연결은 PDO 연결 문자열에 문서화된 표준 DSN을 사용하여 이루어집니다.
작곡가 사용:
$ 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' 절을 등록하여 테이블별로 데이터를 제한할 수 있습니다. 이는 덤프 설정 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
.다음 옵션은 이제 기본적으로 활성화되어 있으며 항상 사용해야 하므로 비활성화할 수 있는 방법이 없습니다.
데이터베이스를 덤프하려면 다음 권한이 필요합니다.
user@host에 대해 SHOW GRANTS를 사용하십시오. 사용자가 어떤 권한을 갖고 있는지 알아보세요. 자세한 내용은 다음 링크를 참조하세요.
MySQL 데이터베이스 스키마의 백업을 가져오는 데 필요한 최소 권한은 무엇입니까?
현재 테스트용 코드는 보기 흉한 해킹입니다. 아마도 PHPUnit을 사용하여 이를 수행하는 훨씬 더 좋은 방법이 있을 것이므로 PR을 환영합니다. 테스트 스크립트는 가능한 모든 데이터 유형을 사용하여 데이터베이스를 생성하고 채웁니다. 그런 다음 mysqldump-php와 mysqldump를 모두 사용하여 내보내고 출력을 비교합니다. 동일한 테스트인 경우에만 괜찮습니다. 커밋 후 phpunit을 사용하여 일부 테스트가 수행됩니다.
mysql 서버가 지원하지 않는 경우 일부 테스트를 건너뜁니다.
몇 가지 테스트에서는 원본 SQL 코드와 mysqldump-php에서 생성된 SQL만 비교합니다. 왜냐하면 일부 옵션은 mysqldump에서 사용할 수 없기 때문입니다.
이 버그 보고서 이후에 새로운 버그 보고서가 도입되었습니다. hex-blob 옵션을 사용하는 경우에도 값이 비어 있으면 _binary가 추가됩니다.
mysqldump-php는 네임스페이스를 사용하기 때문에 이전 버전인 PHP 5.2와 호환되지 않습니다. 그러나 필요한 경우 간단하게 수정할 수 있습니다.
더 많은 테스트를 작성하고 mariadb로도 테스트하세요.
모든 코드를 PHP-FIG 표준으로 포맷하세요. https://www.php-fig.org/
이 프로젝트는 GPL 라이센스에 따라 라이센스가 부여된 오픈 소스 소프트웨어입니다.
8년 이상이 지나면 원래 소스 코드에는 거의 아무것도 남지 않습니다.
원래는 2009년 James Elliott의 스크립트를 기반으로 했습니다. https://code.google.com/archive/p/db-mysqldump/
Michael J. Calkins가 각색하고 확장했습니다. https://github.com/clouddueling
현재 Diego Torres가 유지 관리, 개발 및 개선했습니다. https://github.com/ifsnop