تغییر مسیر دیتابیس MySQL در لینوکس یکی از حیاتی‌ترین مهارت‌هایی است که هر مدیر سرور باید در جعبه ابزار خود داشته باشد. دیتابیس‌ها قلب تپنده هر اپلیکیشن وب هستند و با رشد کسب‌وکار، حجم داده‌ها نیز به طور تصاعدی افزایش می‌یابد؛ اما اغلب سرورهای مجازی (VPS) با یک پارتیشن روت (/) محدود ارائه می‌شوند که پس از مدتی با فایل‌های حجیم MySQL پر می‌شود.

سناریونیاز به تغییر مسیراولویت
پر شدن پارتیشن rootانتقال به هارد دوم یا پارتیشن /homeبحرانی
ارتقا به SSD/NVMeانتقال داده‌ها برای افزایش سرعت I/Oبالا
تفکیک داده‌هاجداسازی سیستم‌عامل از داده‌های دیتابیسمتوسط
💡 نکته مهم: تغییر دایرکتوری داده (Data Directory) صرفاً جابجایی چند فایل ساده نیست؛ این یک فرآیند حساس است که نیازمند دقت در سطوح دسترسی و تنظیمات امنیتی هسته لینوکس است.
💡 در وب داده:
  • ✅ امنیت داده‌ها: اولویت اول در ارائه سرویس ها.
  • ✅ پایداری سرویس: تضمین آپ‌تایم پس از انتقال.

حتماً زمانی که این مقاله را باز کرده‌اید، با هشدار کمبود فضای دیسک مواجه شده‌اید یا قصد دارید زیرساخت دیتابیس خود را بهینه‌سازی کنید. ما در این آموزش گام‌به‌گام، از صفر تا صد فرآیند انتقال را به زبان ساده اما حرفه‌ای بررسی می‌کنیم تا هیچ داده‌ای را از دست ندهید؛ پس همراه ما باشید تا این چالش فنی را به یک فرصت برای بهبود سرور تبدیل کنیم. 😉👇

تغییر مسیر دیتابیس MySQL در لینوکس

دایرکتوری داده (Datadir) چیست؟

به زبان خیلی ساده، دایرکتوری داده یا datadir همان انبار مرکزی MySQL است که تمام جداول، ایندکس‌ها و اطلاعات خام شما در آنجا ذخیره می‌شود. در سیستم‌عامل‌های توزیع لینوکس (مانند Ubuntu یا CentOS)، این مسیر به صورت پیش‌فرض روی /var/lib/mysql تنظیم شده است. اگر MySQL را مثل یک کتابخانه تصور کنید، datadir دقیقاً همان قفسه‌هایی است که کتاب‌ها (داده‌ها) در آن قرار دارند.

ساختار پیش‌فرض به این صورت است:

MySQL Server
    ⬇️
Configuration (my.cnf)
    ⬇️
Data Directory [/var/lib/mysql]
    ├─ Database_1 (Tables, Indexes)
    ├─ Database_2 (Tables, Indexes)
    └─ mysql.sock (Socket File)
🔸 نکته فنی: در سال 2025، با افزایش حجم داده‌های Big Data، مدیریت هوشمندانه این پوشه به یکی از وظایف اصلی ادمین‌های دیتابیس تبدیل شده است تا از گلوگاه‌های (Bottleneck) سخت‌افزاری جلوگیری کنند.

چرا به تغییر مسیر دیتابیس MySQL نیاز داریم؟

اهمیت انتقال پوشه دیتابیس MySQL زمانی مشخص می‌شود که شما با محدودیت‌های فیزیکی سخت‌افزار روبرو می‌شوید. در دنیای میزبانی وب، امنیت و پایداری حرف اول را می‌زند؛ بنابراین جداسازی مسیر داده‌ها از فایل‌های سیستمی یک استاندارد حرفه‌ای محسوب می‌شود.

دلایل اصلی این جابجایی عبارتند از:

  • مدیریت فضا: جلوگیری از کرش کردن سیستم‌عامل به دلیل پر شدن پارتیشن اصلی.
  • افزایش سرعت: انتقال داده‌ها به دیسک‌های پرسرعت اختصاصی (مانند RAID 10 یا NVMe).
  • امنیت و بک‌آپ: امکان تهیه Snapshot جداگانه از پارتیشن داده‌ها بدون درگیری با فایل‌های سیستم‌عامل.
  • مقیاس‌پذیری: افزودن هاردهای جدید به سرور و اختصاص آن‌ها صرفاً به دیتابیس‌های سنگین.

پیش‌نیازهای انتقال مسیر MySQL

قبل از اینکه دست به ترمینال ببرید، باید اطمینان حاصل کنید که شرایط زیر مهیا است. هرگونه اشتباه در این مرحله می‌تواند منجر به خرابی دیتابیس (Database Corruption) شود.

چک‌لیست پیش از شروع:

  • دسترسی root: شما باید کاربر ریشه باشید یا دسترسی sudo داشته باشید.
  • بررسی حجم فعلی دیتابیس:
sudo du -sh /var/lib/mysql
  • ✅ بررسی فضای خالی روی مقصد
df -h /mnt/data
  • فضای مقصد: پارتیشن جدید باید فضای کافی (حداقل 1.5 برابر حجم فعلی) داشته باشد.
  • بک‌آپ کامل: حتماً یک نسخه پشتیبان تهیه کنید.
  • توقف سرویس: انتقال داده‌ها در حالی که MySQL در حال نوشتن است، ممنوع است!
🔶 اگر از سرورهای مجازی وب‌داده استفاده می‌کنید، نه تنها می‌توانید از قابلیت بکاپ‌گیری رایگان استفاده کنید، بلکه می‌توانید قبل از شروع کار یک Snapshot از کل سرور تهیه کنید تا در صورت بروز هرگونه مشکل، تنها با یک کلیک به وضعیت قبل برگردید.
آموزش تغییر مسیر دایرکتوری MySQL در لینوکس

آموزش تغییر مسیر دیتابیس MySQL در لینوکس (گام‌به‌گام)

در این بخش همراه تیم وب‌داده باشید تا به صورت عملی و تصویری، دیتابیس را به یک مسیر جدید (مثلاً /mnt/data/mysql) منتقل کنیم. ما از سناریوی واقعی روی اوبونتو 24.04 استفاده می‌کنیم.

🔸 سناریو:

1🖥️ سیستم‌عامل: Ubuntu 24.04 LTS
2🗄️ سرویس: MySQL 8.0
3💾 مسیر جدید: /mnt/data/mysql

1- متوقف کردن سرویس MySQL

ابتدا باید موتور دیتابیس را خاموش کنیم تا هیچ فایلی در حال تغییر نباشد.

sudo systemctl stop mysql

تایید توقف سرویس

sudo systemctl status mysql
تغییر مسیر دیتابیس MySQL در لینوکس

2- ساخت و آماده‌سازی دایرکتوری مقصد

ساخت دایرکتوری جدید:
sudo mkdir -p /mnt/data/mysql
تنظیم مالکیت:
sudo chown mysql:mysql /mnt/data/mysql
تنظیم Permission:
sudo chmod 750 /mnt/data/mysql

3- انتقال فیزیکی داده‌ها با rsync

برای کپی کردن فایل‌ها، هرگز از cp معمولی استفاده نکنید! ما به استفاده از rsync برای انتقال دیتابیس نیاز داریم تا تمام Permissionها و Ownershipها حفظ شوند.

⚠️ نکته مهم: حتماً از slash انتهایی در مسیر مبدا استفاده کنید:
دستور صحیح (توجه به / انتهایی)

sudo rsync -av --exclude='*.sock' --exclude='*.pid' \
  /var/lib/mysql/ /mnt/data/mysql/

توضیح سوئیچ‌ها:

  • -a: مخفف Archive است و تمام ویژگی‌های فایل را حفظ می‌کند
  • -v: روند پیشرفت را به شما نشان می‌دهد
  • –exclude: فایل‌های socket و PID را کپی نمی‌کند
❌ اشتباه رایج:
# بدون slash انتهایی (اشتباه است!)
sudo rsync -av /var/lib/mysql /mnt/data
# نتیجه: /mnt/data/mysql/mysql (تو در تو!)

4- تغییر نام پوشه قدیمی (برای احتیاط)

به جای حذف سریع، پوشه قدیمی را تغییر نام می‌دهیم تا اگر مشکلی پیش آمد، راه بازگشت داشته باشیم.

sudo mv /var/lib/mysql /var/lib/mysql_backup

5- آموزش ویرایش تنظیمات MySQL

حالا باید به MySQL بگوییم که خانه جدیدش کجاست. این کار با تغییر datadir در فایل my.cnf انجام می‌شود.

🔍 پیدا کردن فایل کانفیگ اصلی:

فایل کانفیگ MySQL در توزیع‌های مختلف، مسیرهای متفاوتی دارد:

روش 1: جستجوی خودکار

mysql --help | grep "Default options" -A 1

روش 2: بررسی دستی

ls -la /etc/mysql/my.cnf
ls -la /etc/my.cnf

مسیرهای معمول:

  • Ubuntu/Debian: /etc/mysql/mysql.conf.d/mysqld.cnf
  • CentOS/RHEL/AlmaLinux: /etc/my.cnf یا /etc/my.cnf.d/mysql-server.cnf
  • MariaDB: /etc/mysql/mariadb.conf.d/50-server.cnf

ویرایش فایل:

# Ubuntu/Debian
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

# CentOS/RHEL
sudo nano /etc/my.cnf

در بخش [mysqld]، خط زیر را پیدا کرده و آدرس جدید را جایگزین کنید:

[mysqld]
datadir = /mnt/data/mysql
📌 نکته مهم: حتماً مسیر جدید را دقیقاً وارد کنید؛ کوچکترین غلط تایپی باعث استارت نشدن سرویس می‌شود.

عبور از لایه‌های امنیتی (AppArmor و SELinux)

اینجاست که اکثر مدیران سرور با شکست مواجه می‌شوند! حتی اگر فایل‌ها را درست کپی کنید، لایه‌های امنیتی لینوکس اجازه دسترسی MySQL به خارج از مسیر پیش‌فرض را نمی‌دهند.

تنظیم AppArmor (مخصوص Ubuntu و Debian)

AppArmor یک لایه امنیتی است که دسترسی برنامه‌ها به فایل‌ها را محدود می‌کند.

روش 1: ویرایش پروفایل Local (توصیه می‌شود): ویرایش پروفایل محلی

sudo nano /etc/apparmor.d/local/usr.sbin.mysqld

محتوای زیر را به فایل اضافه کنید:

# Allow data dir access
/mnt/data/mysql/ r,
/mnt/data/mysql/** rwk,

سپس AppArmor را reload کنید:

sudo systemctl reload apparmor

روش 2: استفاده از Alias (جایگزین): ویرایش فایل alias

sudo nano /etc/apparmor.d/tunables/alias

خط زیر را به انتهای فایل اضافه کنید:

alias /var/lib/mysql/ -> /mnt/data/mysql/,

سپس:

sudo systemctl restart apparmor

🔍 بررسی وضعیت AppArmor:

sudo aa-status | grep mysql

تنظیم SELinux (مخصوص CentOS و AlmaLinux)

اگر از خانواده RedHat استفاده می‌کنید، باید Context‌های امنیتی را بروزرسانی کنید.

بررسی وضعیت SELinux:

sestatus

نصب ابزار مورد نیاز:

CentOS/RHEL 8 و بالاتر

sudo yum install policycoreutils-python-utils -y

CentOS/RHEL 7

sudo yum install policycoreutils-python -y

تنظیم Context:

تعریف context جدید

sudo semanage fcontext -a -t mysqld_db_t "/mnt/data/mysql(/.*)?"

اعمال تغییرات

sudo restorecon -R -v /mnt/data/mysql

اعمال تغییرات

ls -lZ /mnt/data/mysql
⚠️ هشدار: نادیده گرفتن این مرحله باعث بروز خطای “Access Denied” در هنگام استارت MySQL می‌شود.

تست و تایید نهایی

حالا وقت آن است که ثمره کارمان را ببینیم. سرویس را استارت می‌کنیم:

sudo systemctl start mysql

بررسی وضعیت

sudo systemctl status mysql

🔍 در صورت بروز خطا:

بررسی لاگ MySQL
sudo tail -50 /var/log/mysql/error.log
یا:
sudo journalctl -xeu mysql.service

خطاهای رایج:

  • Permission denied → مشکل در chown یا chmod
  • Can't find ./mysql/plugin.frm → مسیر datadir اشتباه است
  • Access denied by AppArmor → پروفایل درست تنظیم نشده

تست کامل عملکرد

برای اطمینان از اینکه MySQL واقعاً از مسیر جدید استفاده می‌کند، وارد کنسول MySQL شوید:

mysql -u root -p

سپس این کوئری‌ها را اجرا کنید:

-- بررسی مسیر datadir
SELECT @@datadir;

-- باید نمایش دهد: /mnt/data/mysql/

-- تست ساخت دیتابیس جدید
CREATE DATABASE test_migration;
USE test_migration;
CREATE TABLE test (id INT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
INSERT INTO test (id) VALUES (1);
SELECT * FROM test;

-- بررسی دیتابیس‌های قبلی
SHOW DATABASES;

-- حذف دیتابیس تست
DROP DATABASE test_migration;

تست فیزیکی:

# بررسی فایل‌های جدید
ls -lh /mnt/data/mysql/

# مشاهده فایل دیتابیس تست
ls -lh /mnt/data/mysql/test_migration/

اگر خروجی /mnt/data/mysql/ را نشان داد، تبریک می‌گوییم! شما با موفقیت عملیات تغییر مسیر دیتابیس MySQL در لینوکس را به پایان رساندید. 🚀

پاکسازی نهایی (بعد از 48-72 ساعت اطمینان)

# ساخت Backup فشرده از پوشه قدیمی (اختیاری)
sudo tar -czf /root/mysql_old_backup_$(date +%F).tar.gz /var/lib/mysql_backup

# حذف پوشه قدیمی
sudo rm -rf /var/lib/mysql_backup

مزایا و معایب تغییر مسیر دیتابیس MySQL در لینوکس

ما به عنوان متخصص سرور موظف هستیم حقایق را به شما بگوییم:

مزایامعایب و ریسک‌ها
رفع قطعی مشکل فضای دیسکریسک از دست رفتن داده در صورت نداشتن بک‌آپ
افزایش عملکرد در صورت استفاده از SSDپیچیدگی در عیب‌یابی خطاهای امنیتی (AppArmor/SELinux)
سازماندهی بهتر فایل‌های سرورنیاز به Down-time کوتاه در زمان انتقال

نتیجه‌گیری: مدیریت هوشمندانه دیتابیس با وب‌داده

تغییر دادن مسیر دایرکتوری MySQL در لینوکس یک انتخاب نیست، بلکه برای سرورهایی که با رشد مداوم داده مواجه هستند، یک ضرورت است. در این مقاله آموختیم که چگونه با استفاده از ابزار قدرتمند rsync و پیکربندی صحیح لایه‌های امنیتی مانند AppArmor، دیتابیس خود را به مکانی امن‌تر و وسیع‌تر منتقل کنیم.

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

چرا وب‌داده؟

  • بهره‌گیری از هاردهای فوق‌سریع NVMe نسل جدید
  • پشتیبانی فنی 24 ساعته برای حل مشکلات دیتابیس
  • آپ‌تایم 99.9٪ برای کسب‌وکارهای حساس

در صورتی که در هر یک از مراحل انتقال با چالشی روبرو شدید، حتماً در بخش نظرات با ما در ارتباط باشید؛ کارشناسان ما در سریع‌ترین زمان ممکن به شما پاسخ خواهند داد. امیدوارم این مقاله از بلاگ وب‌داده برای شما مفید بوده باشد. ☁️🚀

سوالات متداول از آموزش تغییر دادن مسیر دایرکتوری MySQL در لینوکس

1- آیا این روش برای MariaDB هم کار می‌کند؟

بله، فرآیند برای MariaDB دقیقاً مشابه است، فقط ممکن است نام سرویس به جای mysql به صورت mariadb باشد.

نرسی مزداب
نرسی مزداب

من نویسنده و تولیدکننده محتوای تخصصی در حوزه هاستینگ هستم که با تمرکز بر کپی‌رایتینگ و ارائه آموزش‌های کاربردی، به ارتقای دانش و مهارت کاربران کمک می‌کنم. سال‌هاست که در زمینه هاستینگ و شبکه فعالیت می‌کنم و همواره تلاش دارم با به‌روزرسانی اطلاعات خود، بهترین و مفیدترین مطالب را برای مخاطبان ارائه دهم.

مقاله‌ها: 183
پاسخی بگذارید

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