該儲存庫包含一個易於使用的類,用於使用 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)。請參閱許可證文件以獲取更多資訊。