repo นี้มีคลาสที่ใช้งานง่ายเพื่อถ่ายโอนฐานข้อมูลโดยใช้ PHP ปัจจุบันรองรับ MySQL, PostgreSQL, SQLite และ MongoDB เบื้องหลังการใช้งาน mysqldump , pg_dump , sqlite3 และ mongodump
ต่อไปนี้เป็นตัวอย่างง่ายๆ ของวิธีสร้างดัมพ์ฐานข้อมูลด้วยไดรเวอร์ต่างๆ:
MySQL
SpatieDbDumperฐานข้อมูลMySql::create()
->setDbName($ชื่อฐานข้อมูล)
->setUserName($ชื่อผู้ใช้)
->setPassword($รหัสผ่าน)
->dumpToFile('dump.sql');PostgreSQL
SpatieDbDumperฐานข้อมูลPostgreSql::create()
->setDbName($ชื่อฐานข้อมูล)
->setUserName($ชื่อผู้ใช้)
->setPassword($รหัสผ่าน)
->dumpToFile('dump.sql');SQLite
SpatieDbDumperDatabasesSqlite::create()
->setDbName($pathToDatabaseFile)
->dumpToFile('dump.sql');includeTables
MongoDB
SpatieDbDumperฐานข้อมูลMongoDb::create()
->setDbName($ชื่อฐานข้อมูล)
->setUserName($ชื่อผู้ใช้)
->setPassword($รหัสผ่าน)
->dumpToFile('dump.gz');เราลงทุนทรัพยากรจำนวนมากเพื่อสร้างแพ็คเกจโอเพ่นซอร์สที่ดีที่สุดในระดับเดียวกัน คุณสามารถสนับสนุนเราได้โดยการซื้อหนึ่งในผลิตภัณฑ์ที่ต้องชำระเงินของเรา
เราขอขอบคุณอย่างยิ่งที่คุณส่งโปสการ์ดจากบ้านเกิดของคุณถึงเรา โดยระบุว่าคุณใช้แพ็คเกจใดของเรา คุณจะพบที่อยู่ของเราในหน้าติดต่อของเรา เราเผยแพร่โปสการ์ดที่ได้รับทั้งหมดบนวอลล์โปสการ์ดเสมือนของเรา
สำหรับการทิ้ง mysqldump ของ MySQL-db ควรติดตั้ง
สำหรับการทิ้ง pg_dump ของ PostgreSQL-db ควรได้รับการติดตั้ง
สำหรับการทิ้ง sqlite3 ของ SQLite-db ควรได้รับการติดตั้ง
สำหรับการทิ้ง mongodump ของ MongoDB-db ควรได้รับการติดตั้ง
สำหรับการบีบอัดไฟล์ดัมพ์ ควรติดตั้ง gzip และ/หรือ bzip2
คุณสามารถติดตั้งแพ็คเกจผ่านทางผู้แต่ง:
ผู้แต่งต้องการ spatie/db-dumper
นี่เป็นวิธีที่ง่ายที่สุดในการสร้างดัมพ์ของ MySql db:
SpatieDbDumperฐานข้อมูลMySql::create()
->setDbName($ชื่อฐานข้อมูล)
->setUserName($ชื่อผู้ใช้)
->setPassword($รหัสผ่าน)
->dumpToFile('dump.sql');หากคุณกำลังทำงานกับ PostgreSQL เพียงใช้ dumper นั้น วิธีการส่วนใหญ่จะใช้ได้บน MySql ทั้งสอง และ PostgreSql-dumper
SpatieDbDumperฐานข้อมูลPostgreSql::create()
->setDbName($ชื่อฐานข้อมูล)
->setUserName($ชื่อผู้ใช้)
->setPassword($รหัสผ่าน)
->dumpToFile('dump.sql'); หากมีการติดตั้งไบนารี mysqldump (หรือ pg_dump ) ในตำแหน่งที่ไม่ใช่ค่าเริ่มต้น คุณสามารถแจ้งให้แพ็คเกจทราบได้โดยใช้ setDumpBinaryPath() -function:
SpatieDbDumperฐานข้อมูลMySql::create()
->setDumpBinaryPath('/กำหนดเอง/ตำแหน่ง')
->setDbName($ชื่อฐานข้อมูล)
->setUserName($ชื่อผู้ใช้)
->setPassword($รหัสผ่าน)
->dumpToFile('dump.sql'); หากแอปพลิเคชันของคุณถูกปรับใช้และคุณจำเป็นต้องเปลี่ยนโฮสต์ (ค่าเริ่มต้นคือ 127.0.0.1) คุณสามารถเพิ่มฟังก์ชัน setHost() ได้:
SpatieDbDumperฐานข้อมูลMySql::create()
->setDbName($ชื่อฐานข้อมูล)
->setUserName($ชื่อผู้ใช้)
->setPassword($รหัสผ่าน)
->setHost($โฮสต์)
->dumpToFile('dump.sql');เมื่อสร้างดัมพ์ฐานข้อมูล คุณอาจต้องควบคุมการรวมค่า AUTO_INCREMENT นี่อาจเป็นสิ่งสำคัญในการหลีกเลี่ยงความขัดแย้งของคีย์หลักหรือเพื่อรักษาความสอดคล้องของ ID เมื่อถ่ายโอนข้อมูลข้ามสภาพแวดล้อม
หากต้องการละเว้นค่า AUTO_INCREMENT จากตารางในดัมพ์ของคุณ ให้ใช้เมธอดskipAutoIncreation สิ่งนี้มีประโยชน์อย่างยิ่งในการป้องกันข้อขัดแย้งเมื่อนำเข้าดัมพ์ไปยังฐานข้อมูลอื่นซึ่งอาจมีค่า AUTO_INCREMENT เฉพาะเจาะจงอยู่แล้ว หรือเมื่อค่าที่แน่นอนไม่เกี่ยวข้อง
SpatieDbDumperฐานข้อมูลMySql::create()
->setDbName('dbname')
->setUserName('ชื่อผู้ใช้')
->setPassword('รหัสผ่าน')
->ข้ามการเพิ่มอัตโนมัติ()
->dumpToFile('dump.sql');ตามค่าเริ่มต้น ค่า AUTO_INCREMENT จะรวมอยู่ในการถ่ายโอนข้อมูล อย่างไรก็ตาม หากก่อนหน้านี้คุณเคยใช้เมธอดskipAutoIncreation และต้องการให้แน่ใจว่าค่า AUTO_INCREMENT รวมอยู่ในดัมพ์ครั้งต่อๆ ไป ให้ใช้เมธอดdontSkipAutoIncreation เพื่อรวมค่าเหล่านั้นไว้อย่างชัดเจน
SpatieDbDumperฐานข้อมูลMySql::create()
->setDbName('dbname')
->setUserName('ชื่อผู้ใช้')
->setPassword('รหัสผ่าน')
->อย่าข้ามการเพิ่มอัตโนมัติ()
->dumpToFile('dump.sql'); ในบางแอปพลิเคชันหรือสภาพแวดล้อม ข้อมูลประจำตัวของฐานข้อมูลจะถูกจัดเตรียมเป็น URL แทนที่จะเป็นแต่ละคอมโพเนนต์ ในกรณีนี้ คุณสามารถใช้เมธอด setDatabaseUrl แทนแต่ละเมธอดได้
SpatieDbDumperฐานข้อมูลMySql::create()
->setDatabaseUrl($databaseUrl)
->dumpToFile('dump.sql');เมื่อระบุ URL แพ็คเกจจะแยกวิเคราะห์โดยอัตโนมัติและจัดเตรียมส่วนประกอบแต่ละรายการให้กับรถเทที่เกี่ยวข้อง
ตัวอย่างเช่น หากคุณระบุ URL mysql://username:password@hostname:3306/dbname รถดัมพ์จะใช้โฮสต์ hostname ซึ่งทำงานบนพอร์ต 3306 และจะเชื่อมต่อกับ dbname ด้วย username และ password
การใช้อาร์เรย์:
SpatieDbDumperฐานข้อมูลMySql::create()
->setDbName($ชื่อฐานข้อมูล)
->setUserName($ชื่อผู้ใช้)
->setPassword($รหัสผ่าน)
->includeTables(['table1', 'table2', 'table3'])
->dumpToFile('dump.sql');การใช้สตริง:
SpatieDbDumperฐานข้อมูลMySql::create()
->setDbName($ชื่อฐานข้อมูล)
->setUserName($ชื่อผู้ใช้)
->setPassword($รหัสผ่าน)
->includeTables('table1, table2, table3')
->dumpToFile('dump.sql');ในการใช้ " --column-statistics=0 " เป็นตัวเลือกในคำสั่ง mysqldump คุณสามารถใช้เมธอด doNotUseColumnStatistics() ได้
หากคุณติดตั้ง mysqldump 8 มันจะทำการสืบค้นตามตาราง column_statics เริ่มต้นในฐานข้อมูล information_schema ใน MySql (บริการ) เวอร์ชันเก่าบางเวอร์ชัน เช่น 5.7 จะไม่มีตารางนี้อยู่ ดังนั้นคุณอาจมีข้อยกเว้นระหว่างการดำเนินการ mysqldump เพื่อหลีกเลี่ยงปัญหานี้ คุณสามารถใช้เมธอด doNotUseColumnStatistics()
SpatieDbDumperฐานข้อมูลMySql::create()
->setDbName($ชื่อฐานข้อมูล)
->setUserName($ชื่อผู้ใช้)
->setPassword($รหัสผ่าน)
-> doNotUseColumnStatistics()
->dumpToFile('dump.sql');คุณสามารถแยกตารางออกจากดัมพ์ได้โดยใช้อาร์เรย์:
SpatieDbDumperฐานข้อมูลMySql::create()
->setDbName($ชื่อฐานข้อมูล)
->setUserName($ชื่อผู้ใช้)
->setPassword($รหัสผ่าน)
->excludeTables(['table1', 'table2', 'table3'])
->dumpToFile('dump.sql');หรือโดยใช้สตริง:
SpatieDbDumperฐานข้อมูลMySql::create()
->setDbName($ชื่อฐานข้อมูล)
->setUserName($ชื่อผู้ใช้)
->setPassword($รหัสผ่าน)
->แยกตาราง('table1, table2, table3')
->dumpToFile('dump.sql'); คุณสามารถใช้ doNotCreateTables เพื่อป้องกันการเขียนคำสั่งสร้าง
$dumpCommand = MySql::create()
->setDbName('dbname')
->setUserName('ชื่อผู้ใช้')
->setPassword('รหัสผ่าน')
->doNotCreateTables()
->getDumpCommand('dump.sql', 'credentials.txt'); คุณสามารถใช้ doNotDumpData เพื่อป้องกันการเขียนข้อมูลแถว
$dumpCommand = MySql::create()
->setDbName('dbname')
->setUserName('ชื่อผู้ใช้')
->setPassword('รหัสผ่าน')
->doNotDumpData()
->getDumpCommand('dump.sql', 'credentials.txt'); หากคุณต้องการเพิ่มตัวเลือกที่กำหนดเองให้กับคำสั่ง dump คุณสามารถใช้ addExtraOption
$dumpCommand = MySql::create()
->setDbName('dbname')
->setUserName('ชื่อผู้ใช้')
->setPassword('รหัสผ่าน')
->addExtraOption('--xml')
->getDumpCommand('dump.sql', 'credentials.txt'); หากคุณทำงานกับ MySql คุณสามารถตั้งชื่อฐานข้อมูลโดยใช้ --databases เป็นตัวเลือกเพิ่มเติมได้ สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อใช้ร่วมกับตัวเลือก --add-drop-database mysqldump (ดูเอกสาร mysqldump)
$dumpCommand = MySql::create()
->setUserName('ชื่อผู้ใช้')
->setPassword('รหัสผ่าน')
->addExtraOption('--ฐานข้อมูล dbname')
->addExtraOption('--เพิ่ม-วางฐานข้อมูล')
->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 - วิธีนี้จะบีบอัดดัมพ์ db ของคุณด้วย gzip ตรวจสอบให้แน่ใจว่าได้ติดตั้ง gzip บนระบบของคุณก่อนใช้งาน
Bzip2Compressor - วิธีนี้จะบีบอัดดัมพ์ db ของคุณด้วย bzip2 ตรวจสอบให้แน่ใจว่าติดตั้ง bzip2 บนระบบของคุณก่อนใช้งาน
$dumpCommand = MySql::create()
->setDbName('dbname')
->setUserName('ชื่อผู้ใช้')
->setPassword('รหัสผ่าน')
->useCompressor(GzipCompressor ใหม่()) // หรือ `new Bzip2Compressor()`->dumpToFile('dump.sql.gz'); คุณสามารถสร้างคอมเพรสเซอร์ของคุณเองได้โดยใช้อินเทอร์เฟซ Compressor อินเทอร์เฟซดังกล่าวมีลักษณะดังนี้:
เนมสเปซ SpatieDbDumperCompressors; อินเทอร์เฟซคอมเพรสเซอร์
{ฟังก์ชันสาธารณะ useCommand(): สตริง; ฟังก์ชันสาธารณะ useExtension(): สตริง;
- useCommand ควรส่งคืนคำสั่งการบีบอัดที่ db dump จะถูกปั๊มไป นี่คือการใช้งาน GzipCompression
เนมสเปซ SpatieDbDumperCompressors; คลาส GzipCompressor ใช้งานคอมเพรสเซอร์
{ฟังก์ชันสาธารณะ useCommand(): string{return 'gzip';
}ฟังก์ชันสาธารณะ useExtension(): string{return 'gz';
-
-การทดสอบผู้แต่ง $
โปรดดู CHANGELOG สำหรับข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่เปลี่ยนแปลงเมื่อเร็วๆ นี้
โปรดดูการมีส่วนร่วมเพื่อดูรายละเอียด
โปรดตรวจสอบนโยบายความปลอดภัยของเราเกี่ยวกับวิธีการรายงานจุดอ่อนด้านความปลอดภัย
ฟรีค ฟาน เดอร์ แฮร์เทน
ผู้ร่วมให้ข้อมูลทั้งหมด
การสนับสนุน PostgreSQL เบื้องต้นได้รับการสนับสนุนโดย Adriano Machado การสนับสนุน SQLite ได้รับการสนับสนุนโดย Peter Matseykanets
ใบอนุญาตเอ็มไอที (MIT) โปรดดูไฟล์ใบอนุญาตสำหรับข้อมูลเพิ่มเติม