ข้อกำหนด | กำลังติดตั้ง | เริ่มต้นใช้งาน | เอพีไอ | การตั้งค่า | การตั้งค่า PDO | สิ่งที่ต้องทำ | ใบอนุญาต | เครดิต
นี่คือ mysqldump cli เวอร์ชัน php ที่มาพร้อมกับ MySQL โดยไม่มีการพึ่งพา การบีบอัดเอาต์พุต และค่าเริ่มต้นที่สมเหตุสมผล
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 ' );
อ้างถึงวิกิสำหรับตัวอย่างบางส่วนและการเปรียบเทียบระหว่างการถ่ายโอนข้อมูล mysqldump และ mysqldump-php
คุณสามารถลงทะเบียน callable ที่จะใช้ในการแปลงค่าระหว่างการส่งออก ตัวอย่างการใช้งานสำหรับสิ่งนี้คือการลบข้อมูลที่ละเอียดอ่อนออกจากดัมพ์ฐานข้อมูล:
$ 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 ' );
คุณสามารถลงทะเบียน callable ที่จะใช้เพื่อรายงานความคืบหน้าของดัมพ์ได้
$ 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 สำหรับ user@host; เพื่อทราบว่าผู้ใช้มีสิทธิ์อะไรบ้าง ดูลิงค์ต่อไปนี้สำหรับข้อมูลเพิ่มเติม:
สิทธิ์ขั้นต่ำที่จำเป็นในการสำรองข้อมูลสคีมาฐานข้อมูล MySQL คืออะไร
รหัสปัจจุบันสำหรับการทดสอบเป็นการแฮ็กที่น่าเกลียด อาจมีวิธีที่ดีกว่ามากในการใช้ PHPUnit ดังนั้นจึงยินดีรับ PR สคริปต์ทดสอบจะสร้างและเติมฐานข้อมูลโดยใช้ประเภทข้อมูลที่เป็นไปได้ทั้งหมด จากนั้นจะส่งออกโดยใช้ทั้ง mysqldump-php และ mysqldump และเปรียบเทียบผลลัพธ์ เฉพาะในกรณีที่เป็นการทดสอบที่เหมือนกันก็ถือว่าใช้ได้ หลังจากคอมมิตนี้ การทดสอบบางอย่างจะดำเนินการโดยใช้ phpunit
การทดสอบบางอย่างจะถูกข้ามไปหากเซิร์ฟเวอร์ mysql ไม่รองรับ
การทดสอบสองสามรายการเป็นการเปรียบเทียบระหว่างโค้ด sql ดั้งเดิมกับ mysqldump-php ที่สร้าง sql เท่านั้น เนื่องจากตัวเลือกบางตัวไม่มีใน mysqldump
หลังจากรายงานข้อผิดพลาดนี้ ได้มีการแนะนำข้อผิดพลาดใหม่ _binary จะถูกต่อท้ายด้วยเมื่อใช้ตัวเลือก hex-blob หากค่าว่างเปล่า
mysqldump-php เข้ากันไม่ได้กับ php 5.2 แบบย้อนหลังเพราะเราใช้เนมสเปซ อย่างไรก็ตามสามารถแก้ไขได้เล็กน้อยหากจำเป็น
เขียนการทดสอบเพิ่มเติม ทดสอบกับ mariadb ด้วย
จัดรูปแบบโค้ดทั้งหมดให้เป็นมาตรฐาน PHP-FIG https://www.php-fig.org/
โครงการนี้เป็นซอฟต์แวร์โอเพ่นซอร์สที่ได้รับอนุญาตภายใต้ใบอนุญาต GPL
หลังจากผ่านไปกว่า 8 ปี แทบจะไม่เหลืออะไรจากซอร์สโค้ดต้นฉบับเลย แต่:
เดิมทีอิงจากสคริปต์ของ James Elliott ในปี 2009 https://code.google.com/archive/p/db-mysqldump/
ดัดแปลงและขยายโดย Michael J. Calkins https://github.com/clouddueling
ปัจจุบันได้รับการดูแล พัฒนา และปรับปรุงโดย Diego Torres https://github.com/ifsnop