একটি মাইএসকিউএল ডাম্প উত্পন্ন করতে .php ফাইল ব্যবহার করে


118

আমার কাছে থাকা তথ্যগুলি এখানে:

আমি মাইএসকিউএল এবং পিএইচপি 5 ব্যবহার করে একটি লিনাক্স ভিত্তিক সিস্টেমের সাথে কাজ করছি। আমার mysqldumpএকটি। Php ফাইলের মধ্যে থেকে একটি উত্পন্ন করতে সক্ষম হওয়া দরকার এবং তারপরে যে ডাম্পটি আমি নির্দিষ্ট করব সেখানে সার্ভারের কোনও ফাইলে সংরক্ষণ করা উচিত।

যেহেতু আমি একজন পিএইচপি দুর্বল, আমি চাই কেউ আমাকে কিছু সহায়তা, দিকনির্দেশনা, বা কোড দেয়, যা আমার প্রয়োজন অনুসারে করবে। এটি ইন্টারনেট থেকে দূর থেকে চালাতে হবে।


2
পরীক্ষা করে দেখুন এই । আমি mysqldumpদ্বারা ব্যবহার করা হবে system()
ডেভ


এটি একটি পিএইচপি ফাইলের সাহায্যে মাইএসকিএলডাম্প তৈরি করতে সহায়তা করে। kvcodes.com/2017/10/php-create-mysql-backup
Kvvaradha

এক্সেক () বা সিস্টেম () এর উপর নির্ভর করবেন না, কারণ বেশিরভাগ সময় তারা ভাগ করা হোস্টিংয়ে অক্ষম থাকে। উত্তরের বাহ্যিক প্রোগ্রামগুলি চালনা না করে কোনও ডাটাবেস ডাম্প তৈরির জন্য একটি সঠিক পদ্ধতি কার্যকর করা উচিত।
ডিয়েগো

উত্তর:


159

আপনি exec()একটি বহিরাগত কমান্ড কার্যকর করতে ফাংশনটি ব্যবহার করতে পারেন ।

দ্রষ্টব্য: shell_exec()এবং এর মধ্যে exec()আমি দ্বিতীয়টি বেছে নেব, যা পিএইচপি স্ক্রিপ্টে আউটপুট ফেরায় না - পিএইচপি স্ক্রিপ্টের জন্য স্ট্রিং হিসাবে পুরো এসকিউএল ডাম্প পাওয়ার দরকার নেই: আপনার কেবল এটি কোনও ফাইলের মধ্যে লিখিত প্রয়োজন, এবং এটি কমান্ড দ্বারা নিজেই করা যেতে পারে।


বাহ্যিক আদেশটি করবে:

  • mysqldumpডান প্যারামিটার সহ কল করুন
  • এবং আউটপুটটিকে একটি ফাইলে পুনর্নির্দেশ করুন।

উদাহরণ স্বরূপ :

mysqldump --user=... --password=... --host=... DB_NAME > /path/to/output/file.sql


যার অর্থ আপনার পিএইচপি কোডটি দেখতে এমন হবে:

exec('mysqldump --user=... --password=... --host=... DB_NAME > /path/to/output/file.sql');


অবশ্যই, সঠিক সংযোগের তথ্যগুলি ব্যবহার করার জন্য, সেইগুলির সাথে প্রতিস্থাপন করা ...


2
আমি খুব শীঘ্রই এই সময়ে একটি ছুরিকাঘাত করা হবে। "ডাম্প সম্পূর্ণ!" অথবা অন্যকিছু?
থমাস ওয়ার্ড

6
exec()কমান্ড শেষ না হওয়া পর্যন্ত আর ফিরে আসবে না; সুতরাং, কেবল echo "dump complete"কল করার পরে কিছু রাখুনexec()
পাস্কাল মার্টিন

7
এটি আজ আমাকে সাহায্য করেছে - এবং অক্স সিংহের ব্যবহারকারীদের জন্য একটি নোট: আমি যখন মাইএসকিএল ইনস্টল করেছি তখন আমার জন্য মাইএসকিএলড্প শর্টকাট তৈরি করা হয়নি, তাই আমাকে এটি খুঁজে বের করতে হয়েছিল - এখানে পথটি রয়েছে:/usr/local/mysql/bin/mysqldump
নটলিজার্ডস

4
আপনার মন্তব্য, জামমিপেক, আমার জীবন বাঁচিয়েছে। দয়া করে নোট করুন যে কোনও 1 এর জন্য এই সামান্য সংযোজনের দরকার হতে পারে: '/ usr / স্থানীয় / mysql / বিন / mysqldump -u ...'
হেল্পে

1
উইন্ডোজ ব্যবহারকারীদের জন্য নোট: উইন্ডোতে আপনাকে mysqldump.exe এর সম্পূর্ণ পথ নির্দিষ্ট করতে হবে, যেমনexec("C:/pathto/mysql/bin/mysqldump.exe <options as above>");
পোগোসামা

83

আপনি যদি এটি ব্রাউজারের মাধ্যমে ডাউনলোড করতে একটি ব্যাকআপ তৈরি করতে চান তবে আপনি ফাইলটি ব্যবহার না করেও এটি করতে পারেন।

পিএইচপি ফাংশন passthru () ব্রাউজারে সরাসরি mysqldump আউটপুট পুনর্নির্দেশ করবে। এই উদাহরণে এটি জিপ করা হবে।

প্রো: আপনাকে টেম্প ফাইলগুলি ব্যবহার করতে হবে না।

কন: উইন্ডোজে কাজ করবে না। বিশাল ডেটাসেটের সাথে সীমা থাকতে পারে।

<?php

$DBUSER="user";
$DBPASSWD="password";
$DATABASE="user_db";

$filename = "backup-" . date("d-m-Y") . ".sql.gz";
$mime = "application/x-gzip";

header( "Content-Type: " . $mime );
header( 'Content-Disposition: attachment; filename="' . $filename . '"' );

$cmd = "mysqldump -u $DBUSER --password=$DBPASSWD $DATABASE | gzip --best";   

passthru( $cmd );

exit(0);
?>

25

এখানে একবার দেখুন: https://github.com/ifsnop/mysqldump-php ! এটি পিএইচপি-তে লিখিত একটি দেশীয় সমাধান।

আপনি এটি সুরকার ব্যবহার করে ইনস্টল করতে পারেন এবং এটি করা যেমন সহজ:

<?php

use Ifsnop\Mysqldump as IMysqldump;

try {
    $dump = new IMysqldump\Mysqldump('database', 'username', 'password');
    $dump->start('storage/work/dump.sql');
} catch (\Exception $e) {
    echo 'mysqldump-php error: ' . $e->getMessage();
}

?>

এটি আসল মাইএসকিल्डম্প থেকে প্রচুর বিকল্প অনুলিপি সহ উন্নত ব্যবহারকারীদের সমর্থন করে।

সমস্ত বিকল্পগুলি গিথুব পৃষ্ঠায় ব্যাখ্যা করা হয়েছে, তবে কমবেশি স্বতঃস্পষ্ট:

$dumpSettingsDefault = array(
    'include-tables' => array(),
    'exclude-tables' => array(),
    'compress' => 'None',
    'no-data' => false,
    'add-drop-database' => false,
    'add-drop-table' => false,
    'single-transaction' => true,
    'lock-tables' => false,
    'add-locks' => true,
    'extended-insert' => true,
    'disable-foreign-keys-check' => false,
    'where' => '',
    'no-create-info' => false
);

2
এমনকি সার্ভারগুলিতে যা সুরক্ষার দ্বারা execএবং / অথবা shell_execঅক্ষম করা হয়েছে, মাইকিকিলডাম্প-পিএইচপি দুর্দান্ত কাজ করে! উম্বেলারের সার্ভারে এখনই এটি চেষ্টা করে সফলভাবে ডাম্প পেয়েছি। টিপটির জন্য আপনাকে অনেক ধন্যবাদ!
জিওভানিপিডস

এটি মাইএসকিএল শেল কমান্ডগুলি উপলব্ধ নেই এমন সার্ভারগুলির জন্য উপযুক্ত!
আন্দ্রেজ

9

দয়া করে নীচের লিঙ্কটিতে রেফার করুন যাতে একটি স্ক্রিপ্টলেট রয়েছে যা আপনাকে সহায়তা করবে: http://davidwalsh.name/backup-mysql-database-php

দ্রষ্টব্য: এই স্ক্রিপ্টে নুল ডাটা ধরণের বাগ থাকতে পারে


ধন্যবাদ, এটি "শেল_এক্সেক () সুরক্ষার কারণে অক্ষম করা হয়েছে" (সেখানে আপনি যান, গুগল)
ডিবেস্টার

1
মনে রাখবেন যে এটি mysqli এর পরিবর্তে অবহেলিত mysql কমান্ড ব্যবহার করে।
পাস্কেল রাজ্জিক

"NULL ডেটা টাইপ সহ বাগগুলি" ব্যাক-আপ সমাধানের জন্য সমস্যার মতো মনে হচ্ছে।
অ্যালেক্সিস

7

সুরক্ষার কারণে, একটি কনফিগারেশন ফাইলে পাসওয়ার্ড নির্দিষ্ট করার পরামর্শ দেওয়া হয় এবং কমান্ডে নয় (কোনও ব্যবহারকারী একটি ব্যবহার করতে পারে ps aux | grep mysqldumpএবং পাসওয়ার্ডটি দেখতে পারে)।

//create a temporary file
$file   = tempnam(sys_get_temp_dir(), 'mysqldump');

//store the configuration options
file_put_contents($file, "[mysqldump]
user={$user}
password=\"{$password}\"");

//execute the command and output the result
passthru("mysqldump --defaults-file=$file {$dbname}");

//delete the temporary file
unlink($file);

5

এখানে আপনি পিএমএর মতো মাইএসকিএল কাঠামো এবং ডেটা ডাম্প করার একটি বিস্তৃত সমাধান খুঁজে পেতে পারেন (এবং এক্সিকিউট, পাস্ত্র্রু ব্যবহার না করে):

https://github.com/antarasi/MySQL-Dump-with-Foreign-keys

এটি আমার বর্ধিতকরণের সাথে ডিজাইমকজুক প্রকল্পের কাঁটাচামচ।

ব্যবহার সহজ

<?php
//MySQL connection parameters
$dbhost = 'localhost';
$dbuser = 'dbuser';
$dbpsw = 'pass';
$dbname = 'dbname';

//Connects to mysql server
$connessione = @mysql_connect($dbhost,$dbuser,$dbpsw);

//Set encoding
mysql_query("SET CHARSET utf8");
mysql_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci'");

//Includes class
require_once('FKMySQLDump.php');


//Creates a new instance of FKMySQLDump: it exports without compress and base-16 file
$dumper = new FKMySQLDump($dbname,'fk_dump.sql',false,false);

$params = array(
    //'skip_structure' => TRUE,
    //'skip_data' => TRUE,
);

//Make dump
$dumper->doFKDump($params);

?>

একটি যাদুমন্ত্র মত কাজ করে :-)


এটি কাজ করে - তবে এটি পিএইচপিএমওয়াইডমিন মাইএসকিএলডাম্পের চেয়ে আলাদা আউটপুট উত্পাদন করে। কেন? আমার পিএইচপিএমওয়াইডমিন ব্যাকআপ সম্পূর্ণ হওয়ার পরে, ডেটা নেই missing
নেতৃত্বাধীন

@ Ledew-ডি: ডেটা ডাম্প অন্তর্ভুক্ত করা উচিত নয় শুধুমাত্র যদি বিকল্প skip_data => সত্য একটি প্যারামিটার হিসেবে পাঠানো হয়
অন্তরা

3

যতক্ষণ না আপনি এক্সিকিউটিভ () ব্যবহারের অনুমতি পান না আপনি এক্সিকিউটিভ পাচ্ছেন নিজের পিএইচপি কোডের মাধ্যমে শেল কমান্ডগুলি কার্যকর করতে পারেন।

সুতরাং ধরে নিচ্ছি যে আপনি কমান্ড লাইনে mysqldump লিখতে জানেন, যেমন

mysqldump -u [username] -p [database] > [database].sql

তারপরে আপনি এটিকে () ফাংশনটি সম্পাদন করতে প্যারামিটার হিসাবে ব্যবহার করতে পারেন।

exec("mysqldump -u mysqluser -p my_database > my_database_dump.sql");

3

মেজরলিওর উত্তর আমাকে সঠিক দিকে নির্দেশ করেছে তবে এটি আমার পক্ষে কার্যকর হয়নি। আমি এই সাইটটি পেয়েছি যা একই পদ্ধতির অনুসরণ করে এবং কাজ করে।

$dir = "path/to/file/";
$filename = "backup" . date("YmdHis") . ".sql.gz";

$db_host = "host";
$db_username = "username";
$db_password = "password";
$db_database = "database";

$cmd = "mysqldump -h {$db_host} -u {$db_username} --password={$db_password} {$db_database} | gzip > {$dir}{$filename}";
exec($cmd);

header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"$filename\"");

passthru("cat {$dir}{$filename}");

আমি আশা করি এটি অন্য কাউকে সাহায্য করবে!


আপনার এখানে আউটপুটটি শেষ ব্যবহারকারীটির কাছে ফিরিয়ে দেয় কি না? আইই কার্যকর করার পরে এটি এমনভাবে আউটপুট করে যা আপনি অনুলিপি / পেস্ট করতে পারবেন? যদি তা হয় তবে এটি গ্রহণযোগ্য উত্তরটি কী অর্জন করতে পারে না - কেবল সার্ভারে ফাইল তৈরি করে যাতে আমি এটিকে স্কিপ দ্বারা দখল করতে পারি।
থমাস ওয়ার্ড

@ThomasW। এই কোডটি দুটি কাজ করে: এটি সার্ভারে সংরক্ষিত একটি ফাইল উত্পন্ন করে এবং ডাউনলোড ডায়লগটি প্রম্পট করে। আপনি যদি কেবল ফাইলটি সঞ্চয় করতে চান তবে শিরোনাম () এবং পাস্ত্র্রু () অংশটি করবেন না। এবং যদি আপনার কেবল ফাইলের অবস্থানের প্রয়োজন হয় তবে আপনি সর্বদা $ dir & $ ফাইলের নাম ভেরিয়েবলগুলি প্রতিধ্বনিত করতে পারেন .... আপনি যা চয়ন করুন তা বিবেচনা করুন না কেন আপনি এখনও এসসিপি
ম্যাটাসে কানেকা


0

<?php exec('mysqldump --all-databases > /your/path/to/test.sql'); ?>

আপনি যে কোনও বিকল্প মাইএসকিডম্প্প সহ অবশ্যই কমান্ডটি প্রসারিত করতে পারেন। man mysqldumpআরও বিকল্পের জন্য ব্যবহার করুন (তবে আমার ধারণা আপনি এটি জানতেন;))



0

global $wpdb;
$export_posts = $wpdb->prefix . 'export_posts';
$backupFile = $_GET['targetDir'].'export-gallery.sql';
$dbhost=DB_HOST;
$dbuser=DB_USER;
$dbpass=DB_PASSWORD;
$db=DB_NAME;
$path_to_mysqldump = "D:\xampp_5.6\mysql\bin";
$query= "D:\\xampp_5.6\mysql\bin\mysqldump.exe -u$dbuser -p$dbpass $db $export_posts> $backupFile";
exec($query);
echo $query;


0

উপরের কোডগুলির মধ্যে আমার পক্ষে কাজ হয়নি। আমি উইন্ডোজ ব্যবহার করছি। কোডের নীচে আমার পক্ষে কাজ করেছে ...

$sql = "SELECT * FROM  $tableName WHERE yourclause";
$result = $conn->query($sql);


if($result){

        if ($result->num_rows > 0) {

            $myfile = fopen("daily_events_$district.sql", "w") or die("Unable to open file!");

            while($row = $result->fetch_assoc()) {  

                $rowToString = implode("','",$row);
                $writeToFile = "INSERT INTO $tableName VALUES('$rowToString');". PHP_EOL;
                fwrite($myfile,$writeToFile);
            }
            echo "File saved successfully";
        }
    } else {
        echo "No result found";
    }

এটি আপনার ক্যোয়ারী অনুসারে আপনার প্রজেক্ট ফোল্ডারে ফাইলটি সংরক্ষণ করবে যা আপনি চান ডেটা।


এই সমাধানটি মূলত ত্রুটিযুক্ত, কারণ এটি ভুল এসকিউএল স্ট্রিংগুলি তৈরি করে
আপনার সাধারণ অনুভূতি

-1

শেল_এক্সেক () ব্যবহার করে ডাটাবেস ডাম্প করার জন্য নীচের পদ্ধতিটি নিম্নরূপ:

shell_exec('mysqldump -h localhost -u username -ppassword databasename  | gzip > dbname.sql.gz');

-2
<?php
    $toDay = date('d-m-Y');

    $dbhost =   "localhost";
    $dbuser =   "YOUR DB USER";
    $dbpass =   "USER PASSWORD";
    $dbname =   "DB NAME";

    exec("mysqldump --user=$dbuser --password='$dbpass' --host=$dbhost $dbname > /home/....../public_html/".$toDay."_DB.sql");


?>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.