要件 |インストール |はじめに | 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 ダンプの比較については、Wiki を参照してください。
エクスポート中に値を変換するために使用される呼び出し可能オブジェクトを登録できます。このユースケースの例は、データベース ダンプから機密データを削除することです。
$ 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
dump 設定をオーバーライドします。
$ 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
次のオプションはデフォルトで有効になり、常に使用する必要があるため、無効にする方法はありません。
データベースをダンプするには、次の権限が必要です。
SHOW GRANTS FOR user@host を使用します。ユーザーがどのような権限を持っているかを知るため。詳細については、次のリンクを参照してください。
MySQL データベース スキーマのバックアップを取得するために必要な最小限の権限はどれですか?
現在のテスト用コードは醜いハックです。おそらく、PHPUnit を使用してそれらを行うもっと良い方法があるので、PR を歓迎します。テスト スクリプトは、考えられるすべてのデータ型を使用してデータベースを作成し、データを設定します。次に、mysqldump-php と mysqldump の両方を使用してエクスポートし、出力を比較します。同一の場合のみテストはOKです。このコミットの後、phpunit を使用していくつかのテストが実行されます。
mysql サーバーがサポートしていない場合、一部のテストはスキップされます。
mysqldump では一部のオプションが使用できないため、いくつかのテストは元の SQL コードと mysqldump-php で生成された SQL の間でのみ比較しています。
このバグレポートの後、新しいバグレポートが導入されました。値が空の場合、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