مقدمه
ایمپورت و اکسپورت گرفتن از دیتابیسها یکی از کارهای روزمره در مدیریت سرورها و توسعه نرمافزار است. از بکاپگیری و بازیابی اطلاعات گرفته تا انتقال سایت بین سرورها، کپیکردن محیطهای کاری یا رفع خطاهای دیتابیس، همه و همه به فایلهای Dump وابسته هستند.
در این آموزش از دیدگاه، یاد میگیرید چطور دیتابیسهای MySQL یا MariaDB را بهصورت کامل یا جزئی خروجی بگیرید و دوباره در سرور مقصد وارد کنید. همچنین با انتقال جداول خاص، مهاجرت کاربران و سطح دسترسیها، و مدیریت فایلهای حجیم SQL آشنا میشوید. تمام دستورات در MySQL و MariaDB یکسان هستند و تفاوتی ندارند.
نکات کلیدی این آموزش
-
ابزار mysqldump استانداردترین روش برای بکاپ منطقی (Logical Backup) است و ساختار و دادهها را در فایل
.sqlذخیره میکند. -
برای ایمپورت، دیتابیس مقصد باید از قبل ساخته شده باشد.
-
امکان خروجی گرفتن از جداول خاص بهجای کل دیتابیس وجود دارد.
-
کاربران و سطح دسترسیها داخل دیتابیس mysql ذخیره میشوند و باید جداگانه منتقل شوند.
-
فشردهسازی با gzip باعث کاهش حجم و افزایش سرعت انتقال میشود.
-
برای دیتابیسهای بزرگ InnoDB استفاده از
--single-transactionو--quickضروری است. -
فایلهای SQL بزرگ را میتوان به چند بخش کوچکتر تقسیم کرد.
-
خطاهایی مثل Table already exists با گزینههایی مثل
--add-drop-tableقابل پیشگیری هستند.
پیشنیازها
برای انجام عملیات ایمپورت و اکسپورت دیتابیس نیاز دارید به:
اگر بهدنبال راهاندازی کامل پایگاه داده MySQL از ابتدا هستید، راهنمای راهاندازی پایگاه داده از راه دور با MySQL را نیز مطالعه کنید.
-
یک سرور لینوکسی (Ubuntu، Debian، CentOS و …) با دسترسی sudo
-
نصب MySQL یا MariaDB
-
حداقل یک دیتابیس نمونه برای تمرین
-
دسترسی به یوزر دیتابیس با سطح دسترسی مناسب (ترجیحاً root)
خروجی گرفتن از دیتابیس MySQL یا MariaDB
برای گرفتن بکاپ از یک دیتابیس، از دستور زیر استفاده کنید:
mysqldump -u username -p database_name > backup.sql-
usernameنام کاربر دیتابیس -
database_nameنام دیتابیس -
backup.sqlفایل خروجی
اگر دستور بدون خطا اجرا شود، خروجیای در ترمینال نمایش داده نمیشود. برای بررسی صحت فایل میتوانید ابتدای آن را مشاهده کنید:
head -n 5 backup.sqlایمپورت کردن دیتابیس
1. ساخت دیتابیس مقصد
ابتدا وارد محیط MySQL شوید:
mysql -u root -pسپس دیتابیس جدید بسازید:
CREATE DATABASE new_database;2. ایمپورت فایل SQL
پس از خروج از محیط MySQL:
mysql -u username -p new_database < backup.sqlدر صورت موفقیتآمیز بودن عملیات، خروجیای نمایش داده نمیشود.
ایمپورت و اکسپورت جداول خاص
خروجی گرفتن از جداول مشخص
mysqldump -u root -p database_name table1 table2 > tables.sqlایمپورت جداول
mysql -u root -p target_database < tables.sqlانتقال کاربران و سطح دسترسیها
دیتاهای مربوط به کاربران داخل دیتابیس سیستمی mysql ذخیره میشوند و بهصورت پیشفرض در mysqldump نیستند.
روش اول: خروجی گرفتن از جدولهای سطح دسترسی
mysqldump -u root -p mysql user db tables_priv columns_priv procs_priv > users.sqlو سپس ایمپورت در سرور مقصد:
mysql -u root -p mysql < users.sql
FLUSH PRIVILEGES;روش دوم (پیشنهادی): استفاده از GRANT
این روش سازگارتر و امنتر است و فقط دستورات GRANT را منتقل میکند.
مدیریت فایلهای SQL حجیم
فشردهسازی با gzip
mysqldump -u root -p database_name | gzip > backup.sql.gz
gunzip < backup.sql.gz | mysql -u root -p database_nameغیرفعالسازی موقت Foreign Key
SET foreign_key_checks = 0;
SET unique_checks = 0;
SET autocommit = 0;و بعد از اتمام:
COMMIT;
SET foreign_key_checks = 1;
SET unique_checks = 1;تقسیم فایلهای بزرگ
split -l 5000 large.sql part_خطاهای رایج و راهحلها
-
ایمپورت روی دیتابیس اشتباه
همیشه نام دیتابیس مقصد را دوبار چک کنید. -
فراموش کردن ساخت دیتابیس
قبل از ایمپورت حتماً دیتابیس را بسازید. -
سطح دسترسی ناکافی
از یوزری با دسترسی کامل استفاده کنید. -
خطای Table already exists
هنگام خروجی گرفتن از--add-drop-tableاستفاده کنید. -
ناسازگاری Charset
ازutf8mb4در هر دو سمت استفاده شود.
جمعبندی
در این آموزش از دیدگاه یاد گرفتید چگونه دیتابیسهای MySQL و MariaDB را بهصورت کامل یا جزئی ایمپورت و اکسپورت کنید، کاربران و دسترسیها را منتقل نمایید و با دیتابیسهای حجیم بدون دردسر کار کنید. تسلط بر این مهارتها برای بکاپگیری، مهاجرت سرور، توسعه و محیطهای Production کاملاً ضروری است.
برای آشنایی بیشتر با محیط سرور اوبونتو که این دستورات معمولاً روی آن اجرا میشوند، راهنمای نصب Ubuntu 24 را ببینید.
