要求|安裝|開始使用 |應用程式介面 |設定| PDO 設定 |待辦事項 |許可證|製作人員
這是 MySQL 隨附的 mysqldump cli 的 php 版本,沒有相依性、輸出壓縮和健全的預設值。
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 ' );
請參閱 wiki,了解一些範例以及 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
忽略所有表現在預設啟用以下選項,並且無法停用它們,因為應始終使用它們。
要轉儲資料庫,您需要以下權限:
使用SHOW GRANTS FOR user@host;了解使用者擁有哪些權限。請參閱以下連結以了解更多資訊:
取得 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 年多過去了,原始原始碼幾乎所剩無幾,但是:
最初基於 James Elliott 2009 年的腳本。
由邁克爾·J·卡爾金斯改編和擴展。 https://github.com/clouddueling
目前由迭戈·托雷斯 (Diego Torres) 維護、開發和改進。 https://github.com/ifsnop