آنچه در این مقاله میخوانید
نحوه وارد کردن و صادر کردن پایگاههای داده در MySQL یا MariaDB
۵ شهریور ۱۴۰۴
در دنیای توسعه نرمافزار و مدیریت سیستمها، عملیات صادرات و واردات پایگاههای داده یکی از وظایف روزمره و حیاتی به شمار میرود. این فرآیندها برای پشتیبانگیری و بازیابی دادهها، تکثیر محیطها، یا انتقال اطلاعات به سرورهای جدید یا ارائهدهندگان هاستینگ استفاده میشوند.
در این راهنما از وبلاگ لیارا، تمرکز ما بر کار با فایلهای دامپ در MySQL یا MariaDB است (دستورات در هر دو سیستم یکسان عمل میکنند). ابتدا با صادرات کامل یک پایگاه داده به فایل .sql با استفاده از ابزار mysqldump آشنا میشوید، سپس نحوه واردات آن فایل با کلاینت mysql را میآموزید. در ادامه، به صادرات و واردات جدولهای خاص، انتقال حسابهای کاربری و مجوزها، و مدیریت کارآمد فایلهای دامپ بزرگ میپردازیم. این مهارتها برای پشتیبانگیریهای منظم، کلونینگ محیطها، مهاجرتهای تولیدی، یا رفع مشکلات دادهای در محیطهای مختلف ضروری هستند.
با پایگاه داده MySQL لیارا، در کمترین زمان، یک دیتابیس پرسرعت و امن راهاندازی کنید.
✅ پشتیبانگیری خودکار ✅ امنیت بالا ✅ عملکرد بهینه
خرید دیتابیس MySQL لیارا
برای راهاندازی دیتابیس با استفاده از Liara Console کافیست به مستندات لیارا نگاهی بیاندازید.
آنچه در ادامه خواهید خواند:
- پیش نیازها
- نکات کلیدی پیش از شروع فرآیند
- صادرات و واردات پایگاه داده MySQL یا MariaDB
- صادرات و واردات فقط جدولهای خاص
- مدیریت فایلهای .sql بزرگ و واردات کند
- اشتباهات رایج که باید اجتناب کنید
- جمع بندی
پیش نیازها
برای صادرات یا واردات پایگاه داده MySQL یا MariaDB، به موارد زیر نیاز دارید:
- یک ماشین مجازی با کاربر sudo غیر روت. اگر به سرور نیاز دارید.
- MySQL یا MariaDB نصبشده. برای نصب MySQL، راهنمای نحوه نصب MySQL در اوبونتو (راهنمای گام به گام)“را مطالع کنید. برای MariaDB، راهنمای چگونه MariaDB را نصب کنیم را دنبال کنید.
- یک پایگاه داده نمونه در سرور پایگاه دادهتان ایجاد شده. برای ایجاد یکی، میتوانید از مستندات لیارا کمک بگیرید.
نکات کلیدی پیش از شروع فرآیند
- ابزار mysqldump استانداردی برای پشتیبانگیری منطقی است. این ابزار ساختار و دادههای پایگاه داده را به فایل .sql صادر میکند که به راحتی قابل انتقال یا بازیابی در سیستمهای دیگر است.
- واردات دامپ به پایگاه داده جدید یا موجود با کلاینت mysql انجام میشود. پیش از واردات، مطمئن شوید پایگاه داده هدف وجود دارد. در صورت نیاز، از دستور CREATE DATABASE استفاده کنید.
- صادرات جدولهای انتخابی پشتیبانی میشود. با فهرست کردن نام جدولها پس از نام پایگاه داده در mysqldump، میتوانید فقط جدولهای خاص را صادر و وارد کنید.
- حسابهای کاربری و مجوزها باید جداگانه مهاجرت شوند. زیرا اعتبار کاربران در پایگاه داده سیستمی mysql ذخیره میشود، باید جدولهای grant مربوطه را صادر کنید یا دستورات GRANT را دستی تولید نمایید.
- صادرات فشردهسازیشده فضا را صرفهجویی میکند و انتقال را سریعتر میسازد. میتوانید خروجی mysqldump را از طریق gzip پایپ کنید و در زمان واردات، آن را decompress نمایید تا ذخیرهسازی و عملکرد بهینه شود.
- برای پایگاههای داده بزرگ InnoDB، از گزینههای –single-transaction و –quick استفاده کنید. این گزینهها صادراتهای سازگار و بدون بلاکینگ ایجاد میکنند و مصرف حافظه را کاهش میدهند.
- فایلهای SQL بزرگ را میتوان به قطعات کوچکتر تقسیم کرد تا واردات روانتر شود. با فرمان split، فایلهای دامپ بزرگ را به بخشهای قابل مدیریت تقسیم کنید تا از مشکلات timeout یا حافظه جلوگیری شود.
- مشکلات رایج مانند خطای جدول از قبل وجود دارد را با پرچمهایی مانند –add-drop-table میتوان اجتناب کرد. همیشه فایل دامپ را بررسی یا ویرایش کنید تا با محیط مقصد همخوانی داشته باشد و از رونویسی ناخواسته جلوگیری شود.

صادرات و واردات پایگاه داده MySQL یا MariaDB
صادرات و واردات پایگاههای داده بخشی روتین از مدیریت پایگاه داده است. چه برای پشتیبانگیری دادهها، بازیابی در محیط جدید، یا مهاجرت بین سرورها، اغلب نیاز به ایجاد دامپ پایگاه داده و بارگذاری آن در نمونه دیگری دارید.
در این بخش، ابتدا محتوای یک پایگاه داده موجود MySQL یا MariaDB را با mysqldump به فایل .sql صادر میکنید. سپس، آن فایل را با فرمان mysql به پایگاه داده جدیدی وارد مینمایید. این ابزارها به طور پیشفرض با نصب MySQL یا MariaDB در دسترس هستند و در هر دو سیستم به یک شیوه عمل میکنند.
صادرات پایگاه داده MySQL یا MariaDB
ابزار کنسولی mysqldump پایگاههای داده را به فایلهای متنی SQL صادر میکند. این کار انتقال و جابجایی پایگاههای داده را آسانتر میسازد. به نام پایگاه داده و اعتبار حسابی نیاز دارید که حداقل دسترسی کامل خواندنی به پایگاه داده داشته باشد.
برای صادرات پایگاه دادهتان از mysqldump استفاده کنید:
mysqldump -u username -p database_name > data-dump.sql
username
: نام کاربری که با آن به پایگاه داده وارد میشوید.database_name
: نام پایگاه داده برای صادرات.data-dump.sql
: فایل در دایرکتوری جاری که خروجی را ذخیره میکند.
این فرمان هیچ خروجی ترمینالی تولید نمیکند، اما میتوانید محتوای data-dump.sql را بررسی کنید تا مطمئن شوید فایل SQL دامپ معتبر است.
فرمان زیر را اجرا کنید:
head -n 5 data-dump.sql
بالای فایل باید شبیه این باشد، که دامپ MySQL برای پایگاه دادهای به نام database_name را نشان میدهد.
قطعه دامپ SQL
-- MySQL dump 10.13 Distrib 5.7.16, for Linux (x86_64)
--
-- Host: localhost Database: database_name
-- ------------------------------------------------------
-- Server version 5.7.16-0ubuntu0.16.04.1
اگر خطایی در فرآیند صادرات رخ دهد، mysqldump آنها را روی صفحه نمایش میدهد.
واردات پایگاه داده MySQL یا MariaDB
برای واردات فایل دامپ موجود به MySQL یا MariaDB، باید پایگاه داده جدیدی ایجاد کنید. این پایگاه داده دادههای واردشده را نگه میدارد.
ابتدا، با root یا کاربر دیگری که مجوز ایجاد پایگاههای داده جدید را دارد، به MySQL وارد شوید:
mysql -u root -p
این فرمان شما را به پرامپت شل MySQL میبرد. سپس، پایگاه داده جدید را با فرمان زیر ایجاد کنید. در این مثال، پایگاه داده جدید new_database نام دارد:
CREATE DATABASE new_database;
خروجی زیر تأیید ایجاد پایگاه داده را نشان میدهد.
خروجی
Query OK, 1 row affected (0.00 sec)
سپس، با فشار CTRL+D از شل MySQL خارج شوید. از خط فرمان معمولی، فایل دامپ را با فرمان زیر وارد کنید:
mysql -u username -p new_database < data-dump.sql
username
: نام کاربری که با آن به پایگاه داده وارد میشوید.new_database
: نام پایگاه داده تازه ایجادشده.data-dump.sql
: فایل دامپ داده برای واردات، واقع در دایرکتوری جاری.
اگر فرمان با موفقیت اجرا شود، هیچ خروجی تولید نمیکند. اگر خطایی رخ دهد، mysql آنها را در ترمینال چاپ میکند. برای بررسی موفقیت واردات، به شل MySQL وارد شوید و دادهها را بررسی کنید. با USE new_database پایگاه داده جدید را انتخاب کنید و سپس SHOW TABLES; را برای دیدن لیست جدولها و تأیید دادههای واردشده اجرا نمایید.
صادرات و واردات فقط جدولهای خاص
در برخی موارد، ممکن است بخواهید فقط چند جدول خاص را صادر یا وارد کنید نه کل پایگاه داده. این کار برای پایگاههای داده بزرگ، دیباگینگ، یا مهاجرت زیرمجموعهای از دادهها مفید است.
صادرات جدولهای خاص
برای صادرات یک یا چند جدول خاص، نام جدولها را به عنوان آرگومانهای پس از نام پایگاه داده به فرمان mysqldump پاس دهید:
mysqldump -u username -p database_name table1 table2 > selected-tables.sql
username
: حساب کاربری پایگاه دادهتان.database_name
: نام پایگاه داده حاوی جدولها.table1, table2, etc.
: جدولهای خاصی که میخواهید صادر کنید.selected-tables.sql
: فایل خروجی حاوی داده و ساختار جدولهای صادرشده.
برای مثال، برای صادرات فقط جدولهای users و orders از پایگاه دادهای به نام store:
mysqldump -u root -p store users orders > users-orders.sql
این فرمان دامپ SQL حاوی فقط جدولهای مشخصشده و دادههایشان را تولید میکند. میتوانید محتوای آن را با باز کردن فایل در ویرایشگر متن یا بررسی چند خط اول تأیید کنید:
head -n 10 users-orders.sql
واردات جدولهای خاص
برای واردات جدولهای خاص از فایل دامپ، از فرمان mysql همانند واردات کامل پایگاه داده استفاده کنید. اما مطمئن شوید پایگاه داده مقصد از قبل وجود دارد.
mysql -u username -p target_database < selected-tables.sql
برای نمونه، برای واردات جدولهای users و orders از دامپ قبلی به پایگاه داده جدیدی به نام test_store:
mysql -u root -p test_store < users-orders.sql
این کار فقط جدولهای مشخصشده را در پایگاه داده test_store بازسازی و پر میکند. اگر جدولها از قبل در پایگاه داده مقصد وجود داشته باشند، رونویسی میشوند مگر اینکه فایل دامپ با گزینههایی برای رد ایجاد جدول یا درجها تولید شده باشد.
برای تأیید جدولهای واردشده، به شل MySQL وارد شوید و جدولها را بررسی کنید:
mysql -u root -p
سپس، در پرامپت MySQL:
USE test_store;
SHOW TABLES;
باید فقط جدولهای واردشده را ببینید.
صادرات و واردات با مجوزهای کاربری
هنگام مهاجرت پایگاه داده MySQL یا MariaDB، کپی فقط دادهها کافی نیست. باید حسابهای کاربری مناسب و مجوزها را نیز همراه ببرید. این اعتبارها و مجوزها در پایگاههای داده فردی ذخیره نمیشوند؛ بلکه در پایگاه داده سیستمی ویژهای به نام mysql قرار دارند که تمام اطلاعات کنترل دسترسی کاربران را مدیریت میکند.
به طور پیشفرض، mysqldump فقط ساختار و دادههای پایگاه داده کاربردی را صادر میکند. حسابهای کاربری، رمزها، یا قوانین دسترسی را شامل نمیشود مگر اینکه explicit درخواست دهید.
دو روش رایج برای مهاجرت حسابهای کاربری و مجوزهایشان وجود دارد. هر رویکرد مزایا و معایب خود را دارد، بسته به اینکه به کامل بودن یا قابلیت حمل تمرکز دارید.
1. دامپ جدولهای Grant از پایگاه داده mysql
این روش جدولهای کلیدی داخلی که جزئیات حساب کاربری و مجوزهای مرتبط را ذخیره میکنند، را کپی میکند. این راه سریع و مستقیم برای تکثیر دسترسی کاربران است، به ویژه هنگام مهاجرت بین نسخههای سرور مشابه.
گام 1: صادرات حسابهای کاربری و مجوزها
برای صادرات کاربران همراه با مجوزهای جهانی، سطح پایگاه داده، جدول، ستون، و روتین، اجرا کنید:
mysqldump -u root -p mysql user db tables_priv columns_priv procs_priv > users_and_privileges.sql
این فرمان فایل دامپ SQL حاوی موارد زیر را ایجاد میکند:
- نامهای کاربری و اتصالات هاست
- رمزهای هششده
- مجوزهای شده در سطوح مختلف
مهم: کل پایگاه داده mysql را دامپ نکنید. آن شامل متادیتای داخلی مانند تنظیمات سرور و دادههای پلاگین است که ممکن است با سرور مقصد سازگار نباشد. فقط به جدولهای مرتبط با grant پایبند باشید.
گام 2: واردات در سرور مقصد
هنگامی که فایل دامپ در ماشین مقصد در دسترس است، آن را مستقیماً به پایگاه داده سیستمی mysql وارد کنید:
mysql -u root -p mysql < users_and_privileges.sql
گام 3: بارگذاری مجدد مجوزها
پس از واردات، جدولهای grant را دستی بارگذاری کنید تا سرور تغییرات را تشخیص دهد:
FLUSH PRIVILEGES;
این فرمان را از شل MySQL اجرا کنید. آن حسابهای کاربری واردشده و مجوزهایشان را فوراً فعال میکند—بدون نیاز به ریاستارت سرور پایگاه داده.
2. تولید دستورات GRANT (توصیهشده برای قابلیت حمل)
اگر به نسخه متفاوتی از MySQL یا MariaDB مهاجرت میکنید، یا میخواهید کنترل و شفافیت بیشتری روی کاربران منتقلشده داشته باشید، این روش اغلب ترجیح داده میشود. به جای کپی جدولهای سیستمی خام، دستورات GRANT واقعی که مجوزهای کاربری را تعریف میکنند، استخراج میکند.
گام 1: تولید فرمانهای GRANT
میتوانید اسکریپت SQL از دستورات GRANT برای تمام کاربران غیرسیستمی با این one-liner شل تولید کنید:
mysql -B -N -u root -p -e "SELECT CONCAT('SHOW GRANTS FOR ''', user, '''@''', host, ''';') FROM mysql.user WHERE user NOT IN ('mysql.infoschema', 'mysql.session', 'mysql.sys', 'root')" \
| mysql -B -N -u root -p \
| sed 's/$/;/' > all_user_grants.sql
این فرمان چه میکند:
- بخش اول تمام حسابهای کاربری منظم را از جدول mysql.user انتخاب میکند.
- بخش دوم SHOW GRANTS را برای هر کاربر اجرا میکند.
- فرمان sed سمیکالن به هر خط اضافه میکند تا سینتکس SQL معتبر باشد.
- خروجی نهایی به عنوان all_user_grants.sql ذخیره میشود.
این فایل لیست خوانا و تمیز از دستورات GRANT است که میتواند روی سرور دیگری اعمال شود.
گام 2: بررسی و واردات اسکریپت GRANT
فایل all_user_grants.sql را در ویرایشگر متن باز کنید و بررسی نمایید. میتوانید خطوط مرتبط با کاربرانی که نمیخواهید مهاجرت دهید، حذف کنید.
برای اعمال مجوزها روی سرور جدید، اجرا کنید:
mysql -u root -p < all_user_grants.sql
از آنجا که دستور GRANT به طور ضمنی کاربران را ایجاد و مجوزها را میکند، FLUSH PRIVILEGES دستی ضروری نیست اما اجرای آن پس از واردات تمرین خوبی است:
FLUSH PRIVILEGES;
این روش عموماً ایمنتر و قابل حملتر در نسخههای مختلف MySQL یا MariaDB است، زیرا از واردات مستقیم جدولهای سیستمی داخلی اجتناب میکند.
مدیریت فایلهای .sql بزرگ و واردات کند
هنگام کار با پایگاههای داده بزرگ، واردات میتواند به طور قابل توجهی کند یا منابعبر باشد. فایلهای .sql بزرگ زمان بیشتری برای پردازش نیاز دارند، و بسته به سختافزار و تنظیمات سرور، ممکن است به timeoutها، جدولهای قفلشده، یا عملکرد کاهشیافته منجر شود.
در اینجا چند استراتژی برای مدیریت و سرعت بخشیدن به فرآیند واردات دامپهای پایگاه داده بزرگ آورده شده است.

استفاده از فشردهسازی برای صرفهجویی در فضا و زمان
میتوانید فایل دامپ پایگاه داده را با gzip فشرده کنید تا اندازه فایل کاهش یابد و زمان انتقال سریعتر شود. خروجی mysqldump را میتوان مستقیماً به gzip پایپ کرد، بدون نیاز به ذخیره نسخه غیرفشرده.
mysqldump -u username -p database_name | gzip > database_name.sql.gz
برای واردات از فایل فشرده، از gunzip برای decompress داده استفاده کنید و آن را به کلاینت mysql استریم نمایید:
gunzip < database_name.sql.gz | mysql -u username -p database_name
این روش به ویژه هنگام جابجایی دادهها در شبکهها یا محیطهای با محدودیت ذخیرهسازی مفید است.
غیرفعال کردن موقتی چکهای کلید خارجی و ایندکسها
در حین واردات، MySQL چکهای کلید خارجی را اعمال میکند و ایندکسها را برای هر ردیف درجشده بهروزرسانی مینماید. میتوانید این چکها را موقتاً غیرفعال کنید تا عملکرد بهبود یابد.
در ابتدای فایل .sql یا پیش از اجرای واردات، چکها را غیرفعال کنید:
SET foreign_key_checks = 0;
SET unique_checks = 0;
SET autocommit = 0;
در انتهای واردات، آنها را مجدداً فعال و تغییرات را commit کنید:
SET foreign_key_checks = 1;
SET unique_checks = 1;
COMMIT;
میتوانید این خطوط را دستی به فایل دامپ اضافه کنید یا آنها را به صورت تعاملی پیش و پس از واردات اجرا نمایید. این کار overhead را در عملیات درج بزرگ کاهش میدهد.
استفاده از پرچمهای –quick و –single-transaction
هنگام صادرات پایگاههای داده بزرگ InnoDB، گزینههای –quick و –single-transaction را به فرمان mysqldump اضافه کنید:
mysqldump -u username -p --single-transaction --quick database_name > database_name.sql
--single-transaction
: اسنپشات سازگار از پایگاه داده بدون قفل جدولها ایجاد میکند.--quick
: ردیفها را مستقیماً به فایل خروجی استریم میکند بدون بارگذاری همه آنها در حافظه.
این ترکیب برای جدولهای بزرگ InnoDB ایدهآل است و تأثیر минимال روی پایگاه داده در حال اجرا در حین صادرات دارد.
تقسیم فایل SQL به قطعات کوچکتر
برای فایلهای دامپ بسیار بزرگ، میتوانید فایل را با فرمان split به بخشهای کوچکتر و قابل مدیریت تقسیم کنید. این کار کمک میکند تا از محدودیتهای حافظه یا timeout اجتناب شود.
split -l 5000 large_dump.sql chunk_
این فرمان فایلهایی به نام chunk_aa، chunk_ab و غیره ایجاد میکند، هر کدام حاوی ۵۰۰۰ خط. سپس میتوانید آنها را به ترتیب وارد کنید:
for file in chunk_*; do
mysql -u username -p database_name < "$file"
done
این رویکرد اجازه میدهد پیشرفت را نظارت کنید و اگر فرآیند قطع شود، آسانتر بازیابی نمایید.
در نظر گرفتن LOAD DATA INFILE برای دادههای bulk
اگر دادههایتان در فرمت .csv یا .tsv ساده در دسترس است، از فرمان LOAD DATA INFILE برای واردات bulk بسیار سریعتر استفاده کنید. این روش SQL استاندارد را دور میزند و دادهها را مستقیماً به جدول درج میکند.
LOAD DATA INFILE '/path/to/file.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
این یکی از سریعترین راهها برای واردات حجمهای بزرگ دادههای tabular خام به MySQL یا MariaDB است، اما نیاز به دادههای ساختارمند و delimited دارد.
اشتباهات رایج که باید اجتناب کنید
صادرات و واردات پایگاههای داده MySQL یا MariaDB وظیفهای حیاتی است، به ویژه در محیطهای تولیدی. در حالی که فرآیند عموماً ساده است، غفلتهای کوچک میتواند به از دست رفتن داده، واردات شکستخورده، یا برنامههای شکسته منجر شود. این بخش برخی از اشتباهات رایج و نحوه اجتناب مؤثر از آنها را توصیف میکند.
- واردات به پایگاه داده اشتباه
اشتباه رایج واردات فایل .sql به پایگاه داده نادرست است، به ویژه هنگام کار در محیطهای متعدد. این میتواند دادههای موجود را بدون هشدار رونویسی یا خراب کند. همیشه نام پایگاه داده را پیش از اجرای فرمان واردات دوبار بررسی کنید:
mysql -u username -p target_database < data-dump.sql
همچنین میتوانید از SHOW TABLES; و SELECT COUNT(*) FROM table_name; در شل MySQL پس از واردات برای تأیید دادههای مورد انتظار استفاده کنید.
- فراموش کردن ایجاد پایگاه داده هدف
فرمان واردات mysql فرض میکند پایگاه داده مقصد از قبل وجود دارد. اگر نه، با خطایی مانند Unknown database مواجه میشوید. مطمئن شوید ابتدا پایگاه داده را ایجاد کنید:
CREATE DATABASE new_database;
جایگزین، از گزینه –databases با mysqldump در زمان صادرات برای شامل کردن دستورات CREATE DATABASE و USE در فایل دامپ استفاده کنید.
- استفاده از اعتبار نادرست یا مجوزهای ناکافی
اگر حساب کاربری مورد استفاده برای صادرات یا واردات فاقد مجوزهای لازم باشد، عملیات شکست میخورد. برای مثال:
- mysqldump ممکن است بدون مجوزهای SELECT، LOCK TABLES، یا SHOW VIEW شکست بخورد.
- mysql ممکن است در واردات داده اگر کاربر مجوزهای INSERT، CREATE، یا ALTER نداشته باشد، شکست بخورد.
از حساب کاربری با مجوزهای کامل، مانند root، اگر مطمئن نیستید استفاده کنید. همیشه خروجی ترمینال را برای خطاهای مجوز بررسی نمایید.
- عدم استفاده از –add-drop-table در صادرات
بدون پرچم –add-drop-table، واردات فایل دامپ به پایگاه دادهای که جدولهایی با نامهای مشابه دارد، به خطاهایی مانند Table already exists منجر میشود. این پرچم اطمینان میدهد هر جدول پیش از بازسازی drop شود:
mysqldump -u username -p --add-drop-table database_name > data-dump.sql
این به ویژه هنگام واردات مجدد به محیط توسعه یا staging موجود مهم است.
- رد مهاجرت مجوزهای کاربری
حسابهای کاربری، نقشها، و مجوزها در دامپهای استاندارد پایگاه داده شامل نمیشوند. اگر فراموش کنید آنها را جداگانه صادر کنید، کاربران در سرور مقصد نمیتوانند متصل شوند یا عملیات انجام دهند. میتوانید:
- جدولهای مربوطه را از پایگاه داده mysql دامپ کنید (مانند user، db، tables_priv)
- یا دستورات GRANT را با SHOW GRANTS تولید و اعمال کنید
همیشه پس از واردات دادههای grant، FLUSH PRIVILEGES; را اجرا کنید تا تغییرات اعمال شود.
- نادیده گرفتن سازگاری charset و collation
سرورهای مختلف ممکن است charset پیشفرض متفاوتی (مانند latin1 در مقابل utf8mb4) استفاده کنند، که به متن خراب یا غیرقابل خواندن پس از واردات منجر میشود. برای اجتناب:
- charset و collation را در هر دو سرور منبع و مقصد بررسی کنید:
SHOW CREATE DATABASE database_name;
- از گزینه –default-character-set با mysqldump و mysql استفاده کنید:
mysqldump -u username -p --default-character-set=utf8mb4 database_name > dump.sql
این کار encoding دادههایتان را در محیطهای مختلف سازگار نگه میدارد.
- واردات فایلهای بزرگ بدون بهینهسازی
فایلهای .sql بسیار بزرگ زمان زیادی برای واردات نیاز دارند و ممکن است به محدودیتهای منابع برخورد کنند. علائم رایج شامل خطاهای out-of-memory یا timeout سرور است. برای کاهش زمان واردات و بار:
- چکهای foreign key و autocommit را غیرفعال کنید.
- از پرچمهای –quick و –single-transaction در صادرات برای جدولهای InnoDB استفاده کنید.
- فایل دامپ را با gzip فشرده کنید یا با split تقسیم نمایید.
نظارت عملکرد سرور در حین واردات نیز کمک میکند bottlenecks را زود تشخیص دهید.
- نادیده گرفتن مجوزهای فایل یا مسیرها
مسئله ساده اما رایج تلاش برای واردات فایل .sql که در مسیر مشخصشده وجود ندارد یا توسط کاربر جاری قابل خواندن نیست. همیشه وجود فایل و مجوزها را بررسی کنید:
ls -l data-dump.sql
مطمئن شوید فایل مجوزهای خواندن مناسب (-rw-r–r– یا مشابه) دارد و در دایرکتوری درست هنگام اجرای فرمان واردات هستید.
اجتناب از این اشتباهات میتواند زمان صرفهجویی کند، از از دست رفتن داده جلوگیری نماید، و جریان کاری روانتری هنگام کار با پایگاههای داده MySQL یا MariaDB تضمین کند. همیشه فرآیند را در محیط غیرتولیدی پیش از اجرای واردات یا مهاجرتهای حیاتی تست کنید.
سوالات متداول
در ادامه به سوالاتی که امکان دارد در این زمینه برای شما بدون پاسخ بماند، جوابهای کوتاه اما مفیدی دادهایم که با استفاده از آن میتوانید به سوال خود پاسخ صحیحی را بدهید.
تفاوت بین mysqldump و پشتیبانگیری باینری چیست؟
mysqldump پشتیبانگیری منطقی ایجاد میکند با صادرات محتوای پایگاه داده به عنوان دستورات SQL. آن قابل حمل، خوانا برای انسان، و ایدهآل برای مهاجرت داده بین سرورها یا نسخهها است. در مقابل، پشتیبانگیری باینری فایلهای داده واقعی روی دیسک را کپی میکند. پشتیبانگیریهای باینری برای مجموعههای داده بزرگ سریعتر هستند و همه چیز (شامل دادههای غیر-SQL مانند لاگها) را شامل میشوند، اما به ساختار فایل و سازگاری نسخه سرور وابستهاند. دامپهای منطقی برای جابجاییهای cross-version یا cross-platform ایمنتر هستند، در حالی که پشتیبانگیریهای باینری برای بازیابیهای کامل همان سرور بهترند.
آیا میتوانم دامپ MySQL را به MariaDB وارد کنم؟
بله. MySQL و MariaDB بسیار سازگار هستند، و فایلهای mysqldump ایجادشده از MySQL معمولاً بدون تغییر به MariaDB وارد میشوند. با این حال، اگر دامپ شامل ویژگیها یا سینتکس معرفیشده در نسخههای جدیدتر MySQL (مانند توابع JSON یا تنظیمات خاص موتور ذخیرهسازی) باشد، ممکن است نیاز به بررسی فایل دامپ و تنظیم دستورات ناسازگار پیش از واردات داشته باشید.
چگونه فقط schema را بدون داده صادر کنم؟
برای صادرات فقط ساختار جدول (schema) و رد داده، از پرچم –no-data با mysqldump استفاده کنید:
mysqldump -u username -p --no-data database_name > schema_only.sql
این کار فایل دامپی ایجاد میکند که تمام دستورات CREATE TABLE را شامل میشود اما INSERTها را حذف میکند. مفید برای تکثیر ساختارهای پایگاه داده یا تولید الگوها برای محیطهای توسعه.
اگر خطای “table already exists” در واردات بگیرم چه کنم؟
این خطا وقتی رخ میدهد که پایگاه داده مقصد جدولهایی با نامهای مشابه دامپ داشته باشد. برای حل:
- جدولهای موجود را دستی drop کنید یا دستورات DROP TABLE IF EXISTS را با افزودن –add-drop-table به فرمان صادرات شامل نمایید:
mysqldump -u username -p --add-drop-table database_name > data-dump.sql
- پیش از واردات، پایگاه داده خالی جدیدی ایجاد کنید تا از تعارض اجتناب شود.
- فایل دامپ را ویرایش کنید و دستورات جدولهای تعارضدار را اگر میخواهید رد کنید، حذف نمایید.
همیشه محتوای فایل دامپ را پیش از واردات به محیط تولیدی بررسی کنید تا عملیات destructive مانند DROP TABLE یا TRUNCATE نداشته باشد.
آیا میتوانم چندین پایگاه داده را همزمان صادر کنم؟
بله. از گزینه –databases با mysqldump به دنبال لیست فضای جداشده نامهای پایگاه داده استفاده کنید:
mysqldump -u username -p --databases db1 db2 db3 > multi-database-dump.sql
این فرمان دستورات CREATE DATABASE و USE را برای هر پایگاه داده شامل میکند، که بازیابی آنها را بعداً آسانتر میسازد.
چگونه تمام پایگاههای داده روی سرور را صادر کنم؟
برای صادرات هر پایگاه داده روی سرور MySQL یا MariaDB، از گزینه –all-databases استفاده کنید:
mysqldump -u root -p --all-databases > all_databases.sql
این پشتیبان کامل شامل پایگاههای داده سیستمی مانند mysql ایجاد میکند که حسابهای کاربری و مجوزها را دارد. فقط برای مهاجرتهای کامل سرور یا بازیابی فاجعه استفاده شود.
آیا واردات دامپ به پایگاه داده زنده ایمن است؟
واردات به پایگاه داده تولیدی باید با احتیاط انجام شود. اگر دامپ شامل DROP TABLE یا INSERT باشد، میتواند دادهها را رونویسی یا تکرار کند. برای ایمنی:
- واردات را ابتدا در محیط staging تست کنید.
- پیش از واردات، پشتیبان از پایگاه داده زنده بگیرید.
- فایل دامپ را برای فرمانهای destructive مانند DROP یا TRUNCATE بررسی کنید.
چرا واردات من اینقدر طول میکشد؟
واردات کند میتواند ناشی از مجموعههای داده بزرگ، چکهای foreign key فعال، بهروزرسانیهای مکرر ایندکس، یا منابع سرور ناکافی باشد. برای سرعت بخشیدن:
- چکهای foreign key و autocommit را غیرفعال کنید.
- از پرچمهای –quick و –single-transaction در صادرات استفاده کنید.
- فایل دامپ را با gzip فشرده کنید.
- اگر ممکن، از LOAD DATA INFILE برای مجموعههای داده خام بزرگ استفاده نمایید.
نتیجهگیری
در این راهنما، نحوه صادرات و واردات پایگاههای داده MySQL یا MariaDB با mysqldump را آموختید. پوشش دادیم انتقالهای کامل پایگاه داده، صادرات جدولهای انتخابی، مهاجرت حسابهای کاربری و مجوزها، و استراتژیهایی برای مدیریت کارآمد فایلهای دامپ بزرگ. این تکنیکها برای پشتیبانگیریها، مهاجرتهای سرور، تکثیر محیطها، و وظایف بازیابی ضروری هستند. تسلط بر آنها کمک میکند تا پایگاههای دادهتان را با اطمینان بیشتری در توسعه و تولید مدیریت کنید.