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) โปรดดูไฟล์ใบอนุญาตสำหรับข้อมูลเพิ่มเติม