該儲存庫包含一個易於使用的類,用於使用 PHP 轉儲資料庫。目前支援 MySQL、PostgreSQL、SQLite 和 MongoDB。在幕後使用mysqldump
、 pg_dump
、 sqlite3
和mongodump
。
以下是如何使用不同驅動程式建立資料庫轉儲的簡單範例:
MySQL
SpatieDbDumperDatabasesMySql::create() ->setDbName($資料庫名稱) ->setUserName($使用者名稱) ->setPassword($密碼) ->dumpToFile('dump.sql');
PostgreSQL
SpatieDbDumperDatabasesPostgreSql::create() ->setDbName($資料庫名稱) ->setUserName($使用者名稱) ->setPassword($密碼) ->dumpToFile('dump.sql');
SQLite
SpatieDbDumperDatabasesSqlite::create() ->setDbName($pathToDatabaseFile) ->dumpToFile('dump.sql');
includeTables
選項時需要 Sqlite 版本 3.32.0。
MongoDB
SpatieDbDumperDatabasesMongoDb::create() ->setDbName($資料庫名稱) ->setUserName($使用者名稱) ->setPassword($密碼) ->dumpToFile('dump.gz');
我們投入了大量資源來創建一流的開源套件。您可以透過購買我們的一款付費產品來支持我們。
我們非常感謝您從家鄉寄給我們一張明信片,並註明您正在使用我們的哪種套餐。您可以在我們的聯絡頁面上找到我們的地址。我們在虛擬明信片牆上發布所有收到的明信片。
為了轉儲 MySQL-db,應該安裝mysqldump
。
為了轉儲 PostgreSQL-db,應該安裝pg_dump
。
為了轉儲 SQLite-db,應該安裝sqlite3
。
為了轉儲 MongoDB-db,應該安裝mongodump
。
若要壓縮轉儲文件,應安裝gzip
和/或bzip2
。
您可以透過 Composer 安裝該軟體包:
作曲家需要 spatie/db-dumper
這是建立 MySql 資料庫轉儲的最簡單方法:
SpatieDbDumperDatabasesMySql::create() ->setDbName($資料庫名稱) ->setUserName($使用者名稱) ->setPassword($密碼) ->dumpToFile('dump.sql');
如果您使用 PostgreSQL,只需使用該轉儲程序,大多數方法在 MySql 上都可用。和 PostgreSql-dumper。
SpatieDbDumperDatabasesPostgreSql::create() ->setDbName($資料庫名稱) ->setUserName($使用者名稱) ->setPassword($密碼) ->dumpToFile('dump.sql');
如果mysqldump
(或pg_dump
)二進位檔案安裝在非預設位置,您可以使用setDumpBinaryPath()
函數讓套件知道:
SpatieDbDumperDatabasesMySql::create() ->setDumpBinaryPath('/自訂/位置') ->setDbName($資料庫名稱) ->setUserName($使用者名稱) ->setPassword($密碼) ->dumpToFile('dump.sql');
如果您的應用程式已部署並且需要更改主機(預設為 127.0.0.1),您可以新增setHost()
函數:
SpatieDbDumperDatabasesMySql::create() ->setDbName($資料庫名稱) ->setUserName($使用者名稱) ->setPassword($密碼) ->setHost($主機) ->dumpToFile('dump.sql');
建立資料庫轉儲時,您可能需要控制 AUTO_INCRMENT 值的包含情況。這對於避免主鍵衝突或在跨環境傳輸資料時保持 ID 一致性至關重要。
若要從轉儲中的表中省略 AUTO_INCREMENT 值,請使用skipAutoIncrement 方法。當將轉儲匯入到可能已經存在這些特定 AUTO_INCREMENT 值的另一個資料庫時,或當確切值不相關時,這對於防止衝突特別有用。
SpatieDbDumperDatabasesMySql::create() ->setDbName('資料庫名稱') ->setUserName('使用者名稱') ->setPassword('密碼') ->跳過自動增量() ->dumpToFile('dump.sql');
預設情況下,AUTO_INCREMENT 值包含在轉儲中。但是,如果您以前使用過skipAutoIncrement 方法並希望確保AUTO_INCREMENT 值包含在後續轉儲中,請使用dontSkipAutoIncrement 方法明確包含它們。
SpatieDbDumperDatabasesMySql::create() ->setDbName('資料庫名稱') ->setUserName('使用者名稱') ->setPassword('密碼') ->不要跳過自動增量() ->dumpToFile('dump.sql');
在某些應用程式或環境中,資料庫憑證是作為 URL 而不是單一元件提供。在這種情況下,您可以使用setDatabaseUrl
方法而不是單獨的方法。
SpatieDbDumperDatabasesMySql::create() ->setDatabaseUrl($databaseUrl) ->dumpToFile('dump.sql');
提供 URL 時,套件將自動解析它並將各個元件提供給適用的轉儲程式。
例如,如果您提供 URL mysql://username:password@hostname:3306/dbname
,轉儲程式將使用在連接埠3306
上執行的hostname
host ,並將使用username
和password
連接到dbname
。
使用數組:
SpatieDbDumperDatabasesMySql::create() ->setDbName($資料庫名稱) ->setUserName($使用者名稱) ->setPassword($密碼) ->includeTables(['表1', '表2', '表3']) ->dumpToFile('dump.sql');
使用字串:
SpatieDbDumperDatabasesMySql::create() ->setDbName($資料庫名稱) ->setUserName($使用者名稱) ->setPassword($密碼) ->includeTables('表1,表2,表3') ->dumpToFile('dump.sql');
為了在 mysqldump 指令中使用「 --column-statistics=0 」作為選項,您可以使用doNotUseColumnStatistics()方法。
如果您安裝了mysqldump 8 ,它會預設查詢information_schema資料庫中的column_statics表。在某些舊版的MySql(服務)中,例如5.7,該表不存在。所以在執行mysqldump的過程中可能會出現異常。為了避免這種情況,您可以使用doNotUseColumnStatistics()方法。
SpatieDbDumperDatabasesMySql::create() ->setDbName($資料庫名稱) ->setUserName($使用者名稱) ->setPassword($密碼) ->doNotUseColumnStatistics() ->dumpToFile('dump.sql');
您可以使用陣列從轉儲中排除表:
SpatieDbDumperDatabasesMySql::create() ->setDbName($資料庫名稱) ->setUserName($使用者名稱) ->setPassword($密碼) ->excludeTables(['表1', '表2', '表3']) ->dumpToFile('dump.sql');
或使用字串:
SpatieDbDumperDatabasesMySql::create() ->setDbName($資料庫名稱) ->setUserName($使用者名稱) ->setPassword($密碼) ->excludeTables('表1,表2,表3') ->dumpToFile('dump.sql');
您可以使用doNotCreateTables
來防止編寫 create 語句。
$dumpCommand = MySql::create() ->setDbName('資料庫名稱') ->setUserName('使用者名稱') ->setPassword('密碼') ->不建立表() ->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
作為額外選項來設定資料庫名稱。當與--add-drop-database
mysqldump
選項結合使用時,這特別有用(請參閱 mysqldump 文件)。
$dumpCommand = MySql::create() ->setUserName('使用者名稱') ->setPassword('密碼') ->addExtraOption('--資料庫 dbname') ->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(): string{return 'gzip'; }公用函數 useExtension(): string{return 'gz'; } }
$ 作曲家測試
請參閱變更日誌以了解有關最近更改內容的更多資訊。
詳細資訊請參閱貢獻。
請查看我們的安全政策,以了解如何通報安全漏洞。
弗里克·范德赫滕
所有貢獻者
最初的 PostgreSQL 支援是由 Adriano Machado 貢獻的。 SQlite 支持由 Peter Matseykanets 貢獻。
麻省理工學院許可證 (MIT)。請參閱許可證文件以獲取更多資訊。