بکاپ گیری از دیتابیس Mysql

سلام

برای اینکه دیتا های دیتابسمون رو حفظ کنیم لازمه هر چند وقت یک بکاپ از دیتابیس بگیریم

اینکار به روش های بسیار مختلفی امکان پذیر هست . امروز من به ۳ روش میگم که چطوری میشه از دیتابیس Mysql بکاپ بگیریم.

  1. بکاپ گیری از دیتابیس Mysql بوسیله PHP
  2. بکاپ گیری Mysql با دستور mysqldump
  3. بکاپ گیری Mysql با دستور mysqlhotcopy
  4. بکاپ گیری Mysql با phpmyadmin

بکاپ گیری از دیتابیس Mysql بوسیله PHP

اگر شما یک دیتابیس سبک دارید از نوع Mysql میتونید بسادگی با PHP یک اسکریپتی بسازید که بکاپ دیتابیس رو توی یک فایل .sql ذخیره کنه و براحتی بعدا بتونید برگردونید. کار سختی در پیش نیست ابتدا باید وصل بشیم به دیتابیس Mysql.

$host = "DBHOST";
$username = "DBUSERNAME";
$password = "DBPASSWORD";
$database_name = "DBNAME";
$conn = mysqli_connect($host, $username, $password, $database_name);
$conn->set_charset("utf8");

سپس یا دستور SHOW TABLES که بصورت یک QUERY ارسال میکنیم به دیتابیس ازش میخوایم که اسم همه table ها رو نشون بده و با استفاده از
یک حلقه while یک آرایه بوجود میارم از نام table ها

$tables = array();
$sql = "SHOW TABLES";
$result = mysqli_query($conn, $sql);

while ($row = mysqli_fetch_row($result)) {
    $tables[] = $row[0];
}

خب حالا باید توی تک تک اعضای این آرایه گردش کنیم و دیتای هر table رو بکشیم بریم

$sqlScript = "";
foreach ($tables as $table) {
    $query = "SHOW CREATE TABLE $table";
    $result = mysqli_query($conn, $query);
    $row = mysqli_fetch_row($result);
    
    $sqlScript .= "\n\n" . $row[1] . ";\n\n";
    
    
    $query = "SELECT * FROM $table";
    $result = mysqli_query($conn, $query);
    
    $columnCount = mysqli_num_fields($result);
    
    for ($i = 0; $i < $columnCount; $i ++) {
        while ($row = mysqli_fetch_row($result)) {
            $sqlScript .= "INSERT INTO $table VALUES(";
            for ($j = 0; $j < $columnCount; $j ++) {
                $row[$j] = $row[$j];
                
                if (isset($row[$j])) {
                    $sqlScript .= '"' . $row[$j] . '"';
                } else {
                    $sqlScript .= '""';
                }
                if ($j < ($columnCount - 1)) {
                    $sqlScript .= ',';
                }
            }
            $sqlScript .= ");\n";
        }
    }
    
    $sqlScript .= "\n"; 
}

خب و در ادامه باید مقادیر گرفته شده رو توی یک فایل با پسوند .sql ذخیره کنیم و اگر مایل بودین اون رو برای دانلود به مرورگر کاربر ارسال کنید

if(!empty($sqlScript))
{
    $backup_file_name = $database_name . '_backup_' . time() . '.sql';
    $fileHandler = fopen($backup_file_name, 'w+');
    $number_of_lines = fwrite($fileHandler, $sqlScript);
    fclose($fileHandler); 

    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename=' . basename($backup_file_name));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($backup_file_name));
    ob_clean();
    flush();
    readfile($backup_file_name);
}

خب تموم شد . فقط این مورد رو بیاد داشته باشید که این برای بکاپ از دیتابیس های بزرگ زیاد جالب نیست و ممکنه با خطای کمبود memory مواجه بشید.
اگر دیتابیس شما خیلی بزرگ نیست میتونید در اول اسکریپ این مورد رو اضافه کنید

ini_set("memory_limit","2048M");

حالا یجای ۲۰۴۸ میتونید مقدار مد نظر خودتون رو وارد کنید

بکاپ گیری Mysql با دستور mysqldump

اینم روش هم خیلی مفید هست و برای دیتابیس های سنگین با رکورد های زیاد هم خوب کار میکنه. فقط شما باید دسترسی shell به سرور داشته باشید.

mysqldump کلا یک سری دستور هست که برای کار با دیتابیس mysql استفاده میشه . الان من به دستوری اشاره میکنم که میشه از دیتابیس Mysql بکاپ میگیره.

خیلی ساده از دستور mysqldump مثل مثال پایین استفاده میکنیم.

mysqldump -u YourUser -p YourDatabaseName > backupFile.sql

شما باید بجای YourUser نام کاربری و بجای YourDatabaseName نام دیتابیسی که قصد دارید بکاپ بگیرید رو بنویسید بعد از اجرای دستور از شما پسورد نام کاربری YourUser رو میگیره ، خب حتما یک مقدار زمان میبره که  کامل از دیتابیس بکاپ بگیره و اون رو توی backupFile.sql که مشخص کردیم بنویسه

بکاپ گیری Mysql با دستور mysqlhotcopy

دستور mysqlhotcopy یک اسکریپت نوشته شده به زبان perl هست که برای بکاپ گیری mysql استفاده می شود . با استفاده از این دستور میشه یک یدتابیس یا یک تیبیل رو بکاپ گرفت . فقط یک نکته داره ، این دستور فقط برای تیبل هایی که از نوع MyISAM و ARCHIVE کاربرد دارد و برای innodb مناسب نیست.

برای استفاده از اون میتونید از کد زیر استفاده کنید؛

mysqlhotcopy DBNAME [/path/to/new_directory]

بجای DBNAME اسم دیتابیس رو مینویسیم و بجای /path… محل ذخیره سازی فایل .sql رو مینویسسیم

بکاپ گیری Mysql با phpmyadmin

یک راه ساده برای گرفتن بکاپ از دیتابیس Mysql استفاده از نرم افزار های مدیریت دیتابیس Mysql هست. اینجا من به نرم افزار phpmyadmin اشاره میکنم.

ابتدا وارد محیط  phpmyadmin میشیم و دیتابیسی که قصد داریم بکاپ ازش بگیریم رو از ستون سمت چپ انتخاب میکنیم.

سپس از منوی های بالای صفحه Export رو انتخاب میکنیم، در قسمت Export method گزینه Custom – display all possible options رو انتخاب میکنیم

به سمت پایین اسکرول میکنیم و در قسمت output گزینه Compression رو بر روی gzipped تنظیم میکنیم.

اگر داخل دیتابیس از دستورات ریلیشن بین جدول ها استفاده کردین گزینه Disable foreign key checks رو چک بزنید.(میتونید این کار رو هم انجام ندین)

و در نهایت دکمه Go در پایین صفحه را فشار بدین و بعد از چند ثانیه فایل بکاپ رو دانلود کنید.

 

پیروز و سبز باشید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *