المتطلبات | تثبيت | البدء | واجهة برمجة التطبيقات | الإعدادات | إعدادات شركة تنمية نفط عمان | المهام | الترخيص | الاعتمادات
هذه نسخة php من mysqldump cli التي تأتي مع 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.
يمكنك تسجيل عنصر قابل للاستدعاء والذي سيتم استخدامه لتحويل القيم أثناء التصدير. مثال لحالة الاستخدام لهذا هو إزالة البيانات الحساسة من عمليات تفريغ قاعدة البيانات:
$ 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 ' );
يمكنك تسجيل قابل للاستدعاء والذي سيتم استخدامه للإبلاغ عن تقدم عملية التفريغ
$ dumper ->setInfoHook( function ( $ object , $ info ) {
if ( $ object === ' table ' ) {
echo $ info [ ' name ' ], $ info [ ' rowCount ' ];
});
يمكنك تسجيل عبارات "أين" الخاصة بالجدول للحد من البيانات على أساس كل جدول. هذه تتجاوز الإعداد الافتراضي 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
لتجاهل كافة الجداوليتم الآن تمكين الخيارات التالية بشكل افتراضي، ولا توجد طريقة لتعطيلها حيث يجب استخدامها دائمًا.
لتفريغ قاعدة بيانات، تحتاج إلى الامتيازات التالية:
استخدم عرض المنح لـ user@host؛ لمعرفة الامتيازات التي يتمتع بها المستخدم. انظر الرابط التالي لمزيد من المعلومات:
ما هو الحد الأدنى من الامتيازات المطلوبة للحصول على نسخة احتياطية من مخطط قاعدة بيانات MySQL؟
الكود الحالي للاختبار هو اختراق قبيح. ربما توجد طرق أفضل بكثير للقيام بذلك باستخدام PHPUnit، لذلك نرحب بالعلاقات العامة. يقوم البرنامج النصي للاختبار بإنشاء قاعدة بيانات وملؤها باستخدام جميع أنواع البيانات الممكنة. ثم يقوم بتصديره باستخدام كل من mysqldump-php وmysqldump، ويقارن المخرجات. فقط إذا كانت الاختبارات متطابقة فلا بأس بها. بعد هذا الالتزام، يتم إجراء بعض الاختبارات باستخدام phpunit.
يتم تخطي بعض الاختبارات إذا كان خادم MySQL لا يدعمها.
يتم إجراء بعض الاختبارات فقط للمقارنة بين كود SQL الأصلي ورمز SQL الذي تم إنشاؤه بواسطة mysqldump-php، لأن بعض الخيارات غير متوفرة في mysqldump.
بعد تقرير الأخطاء هذا، تم تقديم تقرير جديد. يتم إلحاق _binary أيضًا عند استخدام خيار hex-blob، إذا كانت القيمة فارغة.
mysqldump-php غير متوافق مع php 5.2 لأننا نستخدم مساحات الأسماء. ومع ذلك، يمكن إصلاحه بشكل تافه إذا لزم الأمر.
اكتب المزيد من الاختبارات، واختبرها باستخدام mariadb أيضًا.
تنسيق جميع التعليمات البرمجية وفقًا لمعايير PHP-FIG. https://www.php-fig.org/
هذا المشروع عبارة عن برنامج مفتوح المصدر مرخص بموجب ترخيص GPL
بعد مرور أكثر من 8 سنوات، لم يبق أي شيء تقريبًا من الكود المصدري الأصلي، ولكن:
يعتمد في الأصل على نص جيمس إليوت من عام 2009. https://code.google.com/archive/p/db-mysqldump/
تم تعديله وتوسيعه بواسطة مايكل ج. كالكينز. https://github.com/clouddueling
تمت صيانته وتطويره وتحسينه حاليًا بواسطة دييغو توريس. https://github.com/ifsnop