مقدمه
وارد کردن و خارج کردن پایگاه داده ها یکی از وظایف رایج در توسعه نرمافزار و مدیریت سیستمهاست. از دامپهای داده میتوانید برای پشتیبانگیری و بازیابی اطلاعات، کپی محیطها، یا انتقال دادهها به سرور جدید یا ارائهدهنده هاستینگ استفاده کنید.
در این آموزش، با دامپهای پایگاه داده در MySQL یا MariaDB (که دستوراتشان قابل تعویض هستند) کار خواهید کرد. ابتدا یک پایگاه داده کامل را با استفاده از `mysqldump` به فایل `.sql` صادر میکنید، سپس نحوه وارد کردن آن فایل با کلاینت `mysql` را یاد میگیرید. در ادامه، روشهای صادر کردن و وارد کردن جداول خاص، انتقال حسابهای کاربری و مجوزها، و مدیریت کارآمد فایلهای دامپ SQL بزرگ را بررسی میکنید. این مهارتها برای پشتیبانگیریهای منظم، کپی محیطها، مهاجرت به محیط تولید، یا عیبیابی مشکلات داده در محیطهای مختلف ضروری هستند.
پیشنیازها
برای وارد کردن یا خارج کردن پایگاه داده در MySQL یا MariaDB، به موارد زیر نیاز دارید:
– نصب MySQL یا MariaDB روی سیستم.
– دسترسی به حساب کاربری با مجوزهای کافی (حداقل دسترسی خواندن کامل برای صادرات).
– آشنایی اولیه با خط فرمان.
**نکته**: میتوانید از برنامه MySQL One-Click در **DigitalOcean Marketplace** برای نصب آسان استفاده کنید.
خارج کردن و وارد کردن پایگاه داده در MySQL یا MariaDB
وارد کردن و خارج کردن پایگاه دادهها بخش مهمی از مدیریت پایگاه داده است. چه بخواهید از دادهها پشتیبان بگیرید، آنها را به محیط جدیدی بازیابی کنید، یا بین سرورها مهاجرت کنید، نیاز به ایجاد دامپ و بارگذاری آن در یک نمونه دیگر دارید.
خارج کردن پایگاه داده
ابزار `mysqldump` پایگاه دادهها را به فایلهای متنی SQL صادر میکند که انتقال و جابهجایی را آسان میکند. برای این کار به نام پایگاه داده و اطلاعات کاربری با حداقل دسترسی خواندن کامل نیاز دارید.
دستور زیر را اجرا کنید:
“`
mysqldump -u username -p database_name > data-dump.sql
“`
– `username`: نام کاربری برای ورود به پایگاه داده.
– `database_name`: نام پایگاه دادهای که میخواهید صادر کنید.
– `data-dump.sql`: فایل خروجی که دادهها در آن ذخیره میشوند.
این دستور هیچ خروجی ترمینالی تولید نمیکند. برای بررسی فایل، از دستور زیر استفاده کنید:
“`
head -n 5 data-dump.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` آن را در ترمینال نمایش میدهد.
وارد کردن پایگاه داده
برای وارد کردن فایل دامپ، ابتدا باید یک پایگاه داده جدید ایجاد کنید.
1. با حساب root یا کاربری با مجوزهای کافی وارد MySQL شوید:
“`
mysql -u root -p
“`
2. پایگاه داده جدید را ایجاد کنید (مثلاً `new_database`):
“`
CREATE DATABASE new_database;
“`
خروجی تأیید ایجاد پایگاه داده:
“`
Query OK, 1 row affected (0.00 sec)
“`
3. از محیط MySQL خارج شوید (`CTRL+D`) و فایل دامپ را وارد کنید:
“`
mysql -u username -p new_database < data-dump.sql
“`
اگر دستور موفقیتآمیز باشد، هیچ خروجیای نمایش داده نمیشود. برای بررسی، وارد MySQL شوید، پایگاه داده را انتخاب کنید (`USE new_database;`) و جداول را ببینید (`SHOW TABLES;`).
صادر کردن و وارد کردن جداول خاص
گاهی فقط نیاز به صادر کردن یا وارد کردن چند جدول خاص دارید، مثلاً برای دیباگ یا مهاجرت بخشی از دادهها.
صادر کردن جداول خاص
نام جداول را بعد از نام پایگاه داده در دستور `mysqldump` مشخص کنید:
“`
mysqldump -u username -p database_name table1 table2 > selected-tables.sql
“`
مثال: برای صادر کردن جداول `users` و `orders` از پایگاه داده `store`:
“`
mysqldump -u root -p store users orders > users-orders.sql
“`
محتوای فایل را با `head -n 10 users-orders.sql` بررسی کنید.
وارد کردن جداول خاص
ابتدا پایگاه داده مقصد را ایجاد کنید، سپس فایل را وارد کنید:
“`
mysql -u username -p target_database < selected-tables.sql
“`
مثال:
“`
mysql -u root -p test_store < users-orders.sql
“`
برای تأیید، وارد MySQL شوید و جداول را بررسی کنید:
“`
USE test_store;
SHOW TABLES;
“`
صادر کردن و وارد کردن با مجوزهای کاربری
برای مهاجرت کامل، باید حسابهای کاربری و مجوزها را نیز منتقل کنید. این اطلاعات در پایگاه داده سیستمی `mysql` ذخیره میشوند.
روش ۱: صادر کردن جداول اعطای مجوز
مرحله ۱: صادر کردن حسابهای کاربری و مجوزها
برای صادر کردن کاربران و مجوزهایشان:
“`
mysqldump -u root -p mysql user db tables_priv columns_priv procs_priv > users_and_privileges.sql
“`
مرحله ۲: وارد کردن در سرور مقصد
فایل را به پایگاه داده سیستمی `mysql` وارد کنید:
“`
mysql -u root -p mysql < users_and_privileges.sql
“`
مرحله ۳: بهروزرسانی مجوزها
سپس مجوزها را بهروزرسانی کنید:
“`
FLUSH PRIVILEGES;
“`
روش ۲: تولید دستورات GRANT
مرحله ۱: تولید دستورات GRANT
برای تولید دستورات `GRANT`:
“`
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
“`
مرحله ۲: بررسی و وارد کردن اسکریپت GRANT
فایل را بررسی و وارد کنید:
“`
mysql -u root -p < all_user_grants.sql
FLUSH PRIVILEGES;
“`
مدیریت فایلهای .sql بزرگ و وارد کردن کند
برای پایگاه دادههای بزرگ، وارد کردن ممکن است کند باشد یا منابع زیادی مصرف کند.
فشردهسازی برای صرفهجویی در فضا و زمان
فایل را هنگام صادر کردن فشرده کنید:
“`
mysqldump -u username -p database_name | gzip > database_name.sql.gz
“`
برای وارد کردن:
“`
gunzip < database_name.sql.gz | mysql -u username -p database_name
“`
غیرفعال کردن موقت بررسی کلید خارجی
قبل از وارد کردن:
“`
SET foreign_key_checks = 0;
SET unique_checks = 0;
SET autocommit = 0;
“`
بعد از وارد کردن:
“`
SET foreign_key_checks = 1;
SET unique_checks = 1;
COMMIT;
“`
استفاده از پرچمهای –quick و –single-transaction
برای پایگاه دادههای InnoDB:
“`
mysqldump -u username -p –single-transaction –quick database_name > database_name.sql
“`
تقسیم فایل SQL به قطعات کوچکتر
فایل بزرگ را تقسیم کنید:
“`
split -l 5000 large_dump.sql chunk_
“`
سپس به ترتیب وارد کنید:
“`
for file in chunk_*; do mysql -u username -p database_name < “$file”; done
“`
استفاده از LOAD DATA INFILE برای دادههای حجیم
برای فایلهای `.csv` یا `.tsv`:
“`
LOAD DATA INFILE ‘/path/to/file.csv’ INTO TABLE table_name FIELDS TERMINATED BY ‘,’ LINES TERMINATED BY ‘\n’ IGNORE 1 LINES;
“`
اشتباهات رایج و نحوه اجتناب از آنها
۱. وارد کردن به پایگاه داده اشتباه
همیشه نام پایگاه داده را بررسی کنید:
“`
mysql -u username -p target_database < data-dump.sql
“`
۲. عدم ایجاد پایگاه داده مقصد
قبل از وارد کردن، پایگاه داده را بسازید:
“`
CREATE DATABASE new_database;
“`
۳. استفاده از اعتبارنامه اشتباه
از حسابی با مجوزهای کافی استفاده کنید.
۴. عدم استفاده از –add-drop-table
این پرچم از خطای “جدول از قبل وجود دارد” جلوگیری میکند:
“`
mysqldump -u username -p –add-drop-table database_name > data-dump.sql
“`
۵. نادیده گرفتن مهاجرت مجوزها
جداول `mysql` یا دستورات `GRANT` را منتقل کنید.
۶. عدم تطابق کاراکترست و کولاسیون
از `–default-character-set=utf8mb4` استفاده کنید:
“`
mysqldump -u username -p –default-character-set=utf8mb4 database_name > dump.sql
“`
۷. وارد کردن فایلهای بزرگ بدون بهینهسازی
از فشردهسازی و غیرفعال کردن بررسیها استفاده کنید.
۸. مشکلات مجوز فایل
دسترسی فایل را با `ls -l data-dump.sql` بررسی کنید.
نتیجهگیری
در این آموزش، نحوه صادر کردن و وارد کردن پایگاه دادههای MySQL یا MariaDB با `mysqldump` را آموختید. این تکنیکها برای پشتیبانگیری، مهاجرت سرور، کپی محیطها و بازیابی دادهها ضروری هستند. برای اطلاعات بیشتر، به **صفحه مستندات رسمی mysqldump** مراجعه کنید.