٪80 تخفیف

دانلود کتاب آموزشی پیشرفته نصب و پیکربندی سرویس MySQL / MariaDB جلد اول

دسته‌بندی: برچسب: تاریخ به روز رسانی: 6 دی 1404 تعداد بازدید: 559 بازدید
ویژگی های محصول: پشتیبانی واتساپ

قیمت اصلی: ۲,۰۰۰,۰۰۰ تومان بود.قیمت فعلی: ۴۰۰,۰۰۰ تومان.

torobpay
هر قسط با ترب‌پی: ۱۰۰,۰۰۰ تومان
۴ قسط ماهانه. بدون سود، چک و ضامن.

این دوره برای افرادی طراحی شده است که می‌خواهند دانش خود را در زمینه نصب، پیکربندی و مدیریت MySQL / MariaDB به سطح پیشرفته برسانند.


فصل 1: مقدمه و آشنایی با MySQL / MariaDB

  • معرفی MySQL و MariaDB
  • تفاوت‌های کلیدی بین MySQL و MariaDB
  • موارد استفاده و کاربردهای عملی
  • بررسی معماری داخلی MySQL / MariaDB

فصل 2: نصب MySQL / MariaDB

  • نصب روی توزیع‌های مختلف لینوکس (Debian/Ubuntu، RHEL/CentOS، AlmaLinux)
  • استفاده از مخازن رسمی و پکیج‌های منبع‌باز
  • نصب دستی از سورس کد
  • بررسی و تنظیم اولیه فایل‌های پیکربندی (my.cnf)

فصل 3: پیکربندی اولیه سرویس

  • تنظیم و امن‌سازی اولیه سرویس (MySQL Secure Installation)
  • مدیریت کاربران و تنظیمات دسترسی:
    • ایجاد کاربران جدید
    • مدیریت سطوح دسترسی (GRANT, REVOKE)
    • استفاده از رمزنگاری برای رمزهای عبور
  • تنظیم محل ذخیره‌سازی داده‌ها و لاگ‌ها

فصل 4: پیکربندی پیشرفته

  • تنظیمات پیشرفته در فایل‌های پیکربندی:
    • تنظیمات حافظه (Buffer Pool, Query Cache, Temporary Tables)
    • مدیریت لاگ‌ها (General Log, Slow Query Log, Error Log)
    • تنظیمات اتصال‌ها و عملکرد شبکه (max_connections, timeouts)
  • فعال‌سازی و استفاده از موتورهای ذخیره‌سازی (Storage Engines):
    • InnoDB (ویژگی‌ها و بهینه‌سازی)
    • MyISAM
    • Memory و سایر موتورها

فصل 5: امنیت در MySQL / MariaDB

  • رمزنگاری ارتباطات با SSL/TLS
  • امن‌سازی اتصالات از طریق فایروال و محدود کردن دسترسی‌ها
  • استفاده از ابزارهای امنیتی MySQL / MariaDB
  • شناسایی و جلوگیری از حملات SQL Injection

فصل 6: بهینه‌سازی و عملکرد (Performance Tuning)

  • ابزارهای داخلی برای بررسی عملکرد (Performance Schema, EXPLAIN)
  • بهینه‌سازی کوئری‌ها و استفاده از ایندکس‌ها
  • تنظیمات کش (Query Cache, Table Cache)
  • مانیتورینگ و بهینه‌سازی زمان پاسخ‌دهی
  • پیکربندی Replication برای بهبود عملکرد

فصل 7: مدیریت Replication و Clustering

  • راه‌اندازی Replication:
    • Master-Slave Replication
    • Master-Master Replication
  • بررسی مفاهیم GTID (Global Transaction ID)
  • استفاده از Galera Cluster در MariaDB
  • سناریوهای رفع خطا در Replication

فصل 8: پشتیبان‌گیری و بازیابی (Backup & Restore)

  • روش‌های پشتیبان‌گیری:
    • Logical Backup (mysqldump)
    • Physical Backup (Percona XtraBackup)
  • بازیابی از پشتیبان‌ها
  • پشتیبان‌گیری افزایشی (Incremental Backup)
  • برنامه‌ریزی و زمان‌بندی پشتیبان‌گیری (Cron Jobs)

فصل 9: مانیتورینگ و دیباگینگ

  • استفاده از ابزارهای داخلی برای مانیتورینگ:
    • Performance Schema
    • Information Schema
  • بررسی و رفع مشکلات رایج:
    • خطاهای اتصال (Connection Errors)
    • مشکلات مربوط به قفل‌ها (Locks)
    • رفع مشکلات عملکردی
  • ابزارهای شخص ثالث برای مانیتورینگ (مثل Zabbix, Nagios, Prometheus)

فصل 10: ارتقاء و نگهداری سرویس

  • ارتقاء نسخه MySQL / MariaDB بدون از دست رفتن داده‌ها
  • بررسی و رفع مشکلات سازگاری
  • نگهداری و پاکسازی پایگاه داده
  • برنامه‌ریزی برای نگهداری‌های دوره‌ای

پیش‌نیازهای دوره:

  • آشنایی اولیه با لینوکس
  • آشنایی با مفاهیم اولیه پایگاه داده و SQL
  • تجربه کار با MySQL / MariaDB در سطح پایه

این دوره با تمرین‌های عملی و پروژه‌های واقعی به شما کمک می‌کند تا درک عمیقی از مدیریت و پیکربندی پیشرفته MySQL / MariaDB پیدا کنید.

[cdb_course_lessons title=”فصل 1: مقدمه و آشنایی با MySQL / MariaDB”][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”معرفی MySQL و MariaDB” subtitle=”توضیحات کامل”]

MySQL:

  • MySQL یکی از محبوب‌ترین سیستم‌های مدیریت پایگاه داده (DBMS) است که به‌طور گسترده برای توسعه وب و اپلیکیشن‌های مختلف مورد استفاده قرار می‌گیرد.
  • توسط شرکت Oracle Corporation توسعه داده شده و عرضه می‌شود.
  • از ساختار قالب رابطه‌ای (Relational Model) پشتیبانی می‌کند.
  • از زبان پرس‌وجوی SQL (Structured Query Language) برای مدیریت و دستکاری داده‌ها استفاده می‌کند.
  • امکاناتی مانند جداول، کلیدهای خارجی، ایندکس‌ها، و ارتباطات بین جداول را فراهم می‌کند.

MariaDB:

  • MariaDB یک جایگزین آزاد و متن‌باز برای MySQL است که بر اساس پروژه MySQL توسعه یافته است.
  • توسط MariaDB Foundation توسعه یافته و به‌طور مستقل از Oracle ارائه می‌شود.
  • در ابتدا برای رفع محدودیت‌ها و مشکلات MySQL طراحی شد و از همان معماری و قابلیت‌های آن بهره می‌برد.
  • دارای قابلیت‌های پیشرفته‌تری مانند موتورهای ذخیره‌سازی جدید (مانند InnoDB Cluster) و پشتیبانی از replication بهینه‌تر است.
  • از مزایای اصلی MariaDB می‌توان به استقلال بیشتر، امنیت بالا، و پشتیبانی گسترده از فناوری‌های به‌روزتر اشاره کرد.

تفاوت‌های کلیدی بین MySQL و MariaDB:

  1. مالکیت و توسعه‌دهنده:
    • MySQL تحت مدیریت Oracle است.
    • MariaDB به‌طور مستقل توسط MariaDB Foundation توسعه یافته و جامعه بزرگی از توسعه‌دهندگان را دارد.
  2. قابلیت‌های پیشرفته:
    • MariaDB قابلیت‌های پیشرفته‌ای مانند InnoDB Cluster، Galera Cluster و JSON data types را به‌طور بهینه‌تر ارائه می‌دهد.
    • MySQL همچنان از موتورهای قدیمی‌تر مانند MyISAM نیز پشتیبانی می‌کند.
  3. پشتیبانی و سازگاری:
    • MariaDB به‌طور کامل از MySQL استفاده می‌کند و سازگاری کاملی با آن دارد.
    • به همین دلیل، می‌توان اکثر اپلیکیشن‌های نوشته شده برای MySQL را به‌راحتی روی MariaDB اجرا کرد.
  4. حمایت و پشتیبانی:
    • MariaDB به‌دلیل متن‌باز بودن، پشتیبانی گسترده‌ای از جامعه توسعه‌دهندگان دارد.
    • MySQL تحت پوشش خدمات تجاری Oracle قرار دارد و برخی از ویژگی‌های اضافی را تنها با مجوزهای خاص ارائه می‌دهد.

در جمع‌بندی، هر دو پایگاه داده MySQL و MariaDB ابزارهای قدرتمندی برای مدیریت داده‌ها هستند که کاربردهای مختلفی در زمینه‌های مختلف توسعه نرم‌افزار دارند. انتخاب یکی از آن‌ها بسته به نیاز پروژه و تیم توسعه‌دهنده متفاوت است.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”تفاوت‌های کلیدی بین MySQL و MariaDB:” subtitle=”توضیحات کامل”]

  1. مالکیت و توسعه‌دهنده:
    • MySQL تحت مدیریت و توسعه شرکت Oracle است.
    • MariaDB به‌طور مستقل توسط MariaDB Foundation توسعه یافته و پشتیبانی می‌شود.
  2. قابلیت‌های پیشرفته:
    • MariaDB ویژگی‌های پیشرفته‌تری مانند InnoDB Cluster، Galera Cluster، داده‌های JSON، و پشتیبانی بهتر از replication دارد.
    • MySQL از موتورهای ذخیره‌سازی قدیمی‌تر مانند MyISAM نیز پشتیبانی می‌کند که ممکن است برای برخی از کاربردها قدیمی به نظر برسد.
  3. سازگاری:
    • MariaDB به‌طور کامل از MySQL پشتیبانی می‌کند و می‌تواند به‌صورت سازگار با MySQL عمل کند.
    • بسیاری از اپلیکیشن‌ها و کدهایی که برای MySQL نوشته شده‌اند بدون تغییر روی MariaDB نیز اجرا می‌شوند.
  4. پشتیبانی و مجوزها:
    • MySQL دارای مجوزهای خاص (خصوصی) است و بسیاری از ویژگی‌ها تنها با خرید مجوزهای تجاری ارائه می‌شوند.
    • MariaDB به‌طور کاملاً آزاد و متن‌باز توسعه یافته و تحت پروانه‌های عمومی (GPL) توزیع می‌شود.
  5. جامعه توسعه‌دهندگان:
    • MariaDB به‌دلیل متن‌باز بودن، جامعه توسعه‌دهندگان گسترده‌تری دارد و به‌روزرسانی‌های منظم‌تری دریافت می‌کند.
    • MySQL توسط Oracle پشتیبانی می‌شود و ممکن است به‌روزرسانی‌ها تحت شرایط خاص ارائه شوند.
  6. عملکرد و بهینه‌سازی:
    • MariaDB در مواردی بهینه‌سازی‌های بیشتری برای کار با داده‌های کلان و بارهای سنگین ارائه می‌دهد.
    • MySQL برای اپلیکیشن‌های کوچک و متوسط مناسب‌تر است و در برخی موارد ممکن است بهینه‌سازی‌های خاصی نیاز داشته باشد.
  7. موتورهای ذخیره‌سازی:
    • MariaDB از موتورهای مدرن‌تر و بهینه‌تر مانند InnoDB Cluster و Aria پشتیبانی می‌کند.
    • MySQL همچنان از موتورهایی مانند MyISAM استفاده می‌کند که ممکن است کارایی کمتری داشته باشند.

در جمع‌بندی، انتخاب بین MySQL و MariaDB بسته به نیاز پروژه و ترجیحات توسعه‌دهنده متفاوت خواهد بود. MariaDB به‌عنوان یک جایگزین متن‌باز با قابلیت‌های پیشرفته‌تر، ممکن است برای پروژه‌های بزرگ‌تر و بلندمدت مناسب‌تر باشد.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”موارد استفاده و کاربردهای عملی MySQL و MariaDB:” subtitle=”توضیحات کامل”]

1. وب‌سایت‌ها و اپلیکیشن‌های وب:

  • MySQL و MariaDB در توسعه وب‌سایت‌ها و اپلیکیشن‌های تحت وب کاربرد فراوان دارند.
  • از آن‌ها به‌عنوان سیستم‌های مدیریت پایگاه داده برای ذخیره اطلاعات وب‌سایت‌ها، کاربران، محصولات، مقالات و داده‌های دیگر استفاده می‌شود.
  • برای توسعه سیستم‌های مدیریت محتوا (CMS) مانند WordPress، Joomla، Drupal و Magento مناسب هستند.

2. بانک‌های اطلاعاتی بزرگ و تحلیل داده‌ها:

  • MySQL و MariaDB به‌خاطر توانایی مدیریت مقادیر بسیار زیاد داده‌ها و ارائه سرعت بالا در پرس‌وجوها، برای بانک‌های اطلاعاتی بزرگ و تحلیل داده‌های حجیم استفاده می‌شوند.
  • قابلیت‌های Replication و Clustering در این دیتابیس‌ها به توزیع داده‌ها و افزایش مقیاس‌پذیری کمک می‌کند.

3. سیستم‌های مالی و تجاری:

  • MySQL و MariaDB در سیستم‌های مالی و تجاری برای ذخیره داده‌های تراکنشی، اطلاعات مشتریان، سفارشات، موجودی محصولات و گزارش‌گیری‌های مالی مورد استفاده قرار می‌گیرند.
  • با استفاده از ویژگی‌های پیشرفته‌ای مانند InnoDB، پشتیبانی از تراکنش‌های پایگاه داده‌ای با ACID compliance را فراهم می‌کنند.

4. پلتفرم‌های تحلیلی و گزارش‌گیری:

  • MariaDB به‌ویژه به دلیل پشتیبانی از موتورهای ذخیره‌سازی پیشرفته‌تر مانند ColumnStore برای تحلیل و پردازش داده‌های حجیم مناسب است.
  • ابزارهایی مانند Performance Schema و EXPLAIN به تحلیل عملکرد و بهینه‌سازی کوئری‌ها کمک می‌کنند.

5. سامانه‌های مدیریت محتوا (CMS) و وب‌اپلیکیشن‌ها:

  • از MySQL و MariaDB برای راه‌اندازی و مدیریت سامانه‌های CMS استفاده می‌شود.
  • مانند WordPress، Joomla، و Laravel که نیاز به پایگاه داده‌ای قدرتمند و قابل اعتماد دارند.

6. پروژه‌های مرتبط با اینترنت اشیاء (IoT):

  • MariaDB با پشتیبانی از JSON Data Type و قابلیت‌های پیشرفته‌ای مانند Galera Cluster، به‌عنوان پایگاه داده‌ای مناسب برای پروژه‌های IoT که به مدیریت داده‌های پراکنده و حجیم نیاز دارند، شناخته می‌شود.

7. سیستم‌های مدیریت اطلاعات (MIS):

  • MySQL و MariaDB برای سیستم‌های مدیریت اطلاعات (MIS) که نیاز به ذخیره و مدیریت داده‌های گسترده دارند، مفید هستند.
  • به‌خصوص در سازمان‌هایی که نیاز به پایگاه داده‌ای با مقیاس‌پذیری و امنیت بالا دارند.

8. سیستم‌های توسعه‌داده محور:

  • از این پایگاه داده‌ها برای پروژه‌های توسعه‌ای محور استفاده می‌شود که نیاز به سرعت بالا در خواندن و نوشتن داده‌ها دارند.
  • با استفاده از Replication و Sharding به توزیع بار و مقیاس‌پذیری کمک می‌کنند.

9. سامانه‌های مدیریت مشتریان (CRM):

  • MariaDB و MySQL به‌ویژه در سامانه‌های مدیریت مشتریان (CRM) برای ذخیره و مدیریت داده‌های مشتریان و تراکنش‌ها استفاده می‌شوند.
  • امکانات امنیتی و دسترسی کنترل شده، آن‌ها را به گزینه‌های مناسبی در این کاربردها تبدیل کرده است.

10. پروژه‌های کلان داده (Big Data):

  • MariaDB با موتورهای ذخیره‌سازی پیشرفته‌تر مانند ColumnStore، برای پردازش داده‌های حجیم و پروژه‌های تحلیلی کلان داده مناسب است.
  • MySQL نیز با استفاده از ابزارهایی مانند MySQL Cluster، برای مدیریت داده‌های پراکنده در محیط‌های کلان داده کاربرد دارد.

در جمع‌بندی، MySQL و MariaDB ابزارهایی قدرتمند و همه‌کاره برای کاربردهای مختلف از وب‌سایت‌ها و اپلیکیشن‌های تحت وب گرفته تا سیستم‌های بزرگ و کلان داده هستند. انتخاب هر یک از آن‌ها به نیاز و نوع پروژه بستگی دارد.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”بررسی معماری داخلی MySQL / MariaDB:” subtitle=”توضیحات کامل”]معماری داخلی MySQL و MariaDB بسیار شبیه به یکدیگر هستند و از اصول مشابهی برای مدیریت داده‌ها و پردازش درخواست‌ها استفاده می‌کنند. در زیر، معماری کلی این سیستم‌ها را بررسی می‌کنیم.


1. موتورهای ذخیره‌سازی:

  • InnoDB:
    • اصلی‌ترین موتور ذخیره‌سازی در MySQL و MariaDB است.
    • از تراکنش‌های ACID compliant پشتیبانی می‌کند.
    • از ساختار B-Tree برای ایندکس‌گذاری استفاده می‌کند و برای سیستم‌های کاربردی با داده‌های حجیم مناسب است.
    • مدیریت ایندکس‌ها و قفل‌ها بهینه‌تر و سریع‌تر است.
  • MyISAM:
    • یک موتور قدیمی‌تر در MySQL که بیشتر بهینه‌سازی شده برای خواندن داده‌ها است و در بارهای خواندن زیاد استفاده می‌شود.
    • از Full-Text Search پشتیبانی می‌کند ولی از تراکنش‌ها پشتیبانی نمی‌کند.
    • برای بارهای نوشتن کمتر مناسب است.
  • Aria:
    • یک جایگزین برای MyISAM که از تراکنش‌ها پشتیبانی می‌کند و برای خواندن/نوشتن متعادل بهینه شده است.
  • ColumnStore (در MariaDB):
    • مناسب برای تحلیل داده‌های حجیم و داده‌های کلان.
    • از ذخیره‌سازی داده‌ها به‌صورت Column-oriented برای بهبود خواندن و نوشتن داده‌ها استفاده می‌کند.

2. مدیریت داده‌ها و ایندکس‌ها:

  • MySQL و MariaDB از ایندکس‌ها برای بهینه‌سازی دسترسی به داده‌ها استفاده می‌کنند.
  • B-Tree و Hash برای ایندکس‌ها کاربرد دارند.
  • InnoDB از Clustering Index استفاده می‌کند که ترکیبی از کلید اولیه و ایندکس‌های خارجی است.

3. مدیریت تراکنش‌ها:

  • InnoDB در MySQL و MariaDB پایه‌گذاری شده و از ACID properties (اتمی بودن، سازگاری، عایق بودن، و دوام) پشتیبانی می‌کند.
  • پشتیبانی از Rollback و Commit تراکنش‌ها بسیار بهینه است.
  • MyISAM فاقد این ویژگی است و برای تراکنش‌ها مناسب نیست.

4. موتورهای Replication و Clustering:

  • Master-Slave Replication:
    • یک ویژگی کلیدی در MySQL و MariaDB که داده‌ها را بین سرورها به‌صورت مداوم کپی می‌کند.
    • MariaDB با Galera Cluster برای Replication هم‌زمان پشتیبانی می‌کند که برای مقیاس‌پذیری بالا کاربرد دارد.
  • MySQL Cluster:
    • استفاده از Replication برای بالا بردن قابلیت اطمینان و مقیاس‌پذیری.
    • در MariaDB، Galera Cluster به‌صورت Native ارائه می‌شود.

5. SQL Engine و Query Processing:

  • SQL Parser و Optimizer:
    • MySQL و MariaDB از یک SQL Parser استفاده می‌کنند که درخواست‌های SQL را تجزیه کرده و بهینه‌سازی می‌کند.
    • موتور Query Optimizer بهترین راه‌حل‌ها برای اجرای سریع‌تر کوئری‌ها را انتخاب می‌کند.
    • MariaDB بهینه‌سازی‌های بیشتری در زمینه Query Optimization و Performance Tuning دارد.

6. فایل‌های پیکربندی (my.cnf):

  • فایل my.cnf در MySQL و MariaDB برای تنظیمات اولیه مانند حافظه، اتصال، ایندکس‌گذاری، و سایر تنظیمات کلیدی استفاده می‌شود.
  • این فایل به تنظیماتی مانند InnoDB Buffer Pool Size، Query Cache، و تنظیمات اتصال (max_connections) می‌پردازد.

7. ابزارهای نظارتی و Performance Monitoring:

  • Performance Schema:
    • برای مانیتورینگ عملکرد سرور و تحلیل درخواست‌ها استفاده می‌شود.
  • EXPLAIN:
    • ابزاری که اجرای کوئری‌ها را تحلیل می‌کند و بهترین راه‌حل‌ها برای بهینه‌سازی را ارائه می‌دهد.
  • Information Schema:
    • اطلاعات مربوط به ساختار پایگاه داده، ایندکس‌ها و استراتژی‌های استفاده شده را ارائه می‌دهد.

8. حافظه و کش‌ها:

  • InnoDB Buffer Pool:
    • حافظه‌ای که برای ذخیره‌سازی ایندکس‌ها و داده‌های جدول مورد استفاده قرار می‌گیرد و باعث کاهش زمان دسترسی می‌شود.
  • Query Cache:
    • در MariaDB و MySQL برای ذخیره کوئری‌های قبلاً اجرا شده به منظور کاهش زمان اجرای مجدد استفاده می‌شود.

جمع‌بندی:

معماری داخلی MySQL و MariaDB شباهت‌های زیادی دارند و هر دو از موتورهای ذخیره‌سازی مشابهی استفاده می‌کنند. MariaDB به‌عنوان یک نسخه اصلاح‌شده از MySQL، بهینه‌سازی‌های پیشرفته‌تری برای مقیاس‌پذیری و کارایی ارائه می‌دهد. انتخاب بین آن‌ها بسته به نیازهای پروژه، ویژگی‌های مورد نیاز و الزامات مختلف توسعه‌دهندگان است.[/cdb_course_lesson][/cdb_course_lessons]

[cdb_course_lessons title=”فصل 2: نصب MySQL / MariaDB”][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”نصب روی توزیع‌های مختلف لینوکس” subtitle=”توضیحات کامل”]

1. نسخه‌های مختلف MySQL و MariaDB:

  • MySQL و MariaDB دو سیستم مدیریت پایگاه داده بسیار محبوب هستند که هر دو نسخه‌های مختلفی دارند:
  • MySQL Versions:
    • Community Edition: رایگان و بازمتن (Open Source) برای استفاده عمومی.
    • Enterprise Edition: نسخه تجاری که با پشتیبانی حرفه‌ای ارائه می‌شود.
    • نسخه‌های اصلی MySQL شامل:
      • MySQL 8.x
      • MySQL 5.7
      • MySQL 5.6 (نسخه قدیمی)
  • MariaDB Versions:
    • Community Edition: رایگان و بازمتن (مانند MySQL Community Edition).
    • Enterprise Edition: نسخه تجاری که با پشتیبانی و خدمات اضافی ارائه می‌شود.
    • نسخه‌های اصلی MariaDB شامل:
      • MariaDB 10.x
      • MariaDB 5.x (نسخه قدیمی‌تر)

2. نصب MySQL روی توزیع‌های لینوکس مختلف:

  • Debian/Ubuntu:
    sudo apt update
    sudo apt install mysql-server
    • این دستور برای نصب MySQL Server از مخازن رسمی Ubuntu/Debian استفاده می‌شود.
  • CentOS/RedHat/AlmaLinux:
    sudo yum update
    sudo yum install mysql-server
    • این دستور برای نصب MySQL Server روی CentOS/RedHat/AlmaLinux استفاده می‌شود.

3. نصب MariaDB روی توزیع‌های لینوکس مختلف:

  • Debian/Ubuntu:
    sudo apt update
    sudo apt install mariadb-server
    • این دستور برای نصب MariaDB Server از مخازن رسمی استفاده می‌شود.
  • CentOS/RedHat/AlmaLinux:
    sudo yum update
    sudo yum install mariadb-server

4. نصب دستی از سورس کد:

  • در صورتی که بخواهید نسخه خاصی از MySQL یا MariaDB را از سورس کد نصب کنید، می‌توانید از دستورهای زیر استفاده کنید:
  • MySQL:
    wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
    sudo rpm -ivh mysql80-community-release-el7-3.noarch.rpm
    sudo yum install mysql-server
  • MariaDB:
    wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
    sudo bash mariadb_repo_setup
    sudo yum install mariadb-server

5. فایل‌های پیکربندی (my.cnf):

  • MySQL و MariaDB از فایل پیکربندی my.cnf برای تنظیمات سرویس استفاده می‌کنند.
  • فایل پیکربندی در مسیرهای زیر قرار دارد:
    • Debian/Ubuntu:
      /etc/mysql/my.cnf
    • CentOS/RedHat/AlmaLinux:
      /etc/my.cnf

جمع‌بندی:

MySQL و MariaDB هر دو سیستم‌های مدیریت پایگاه داده محبوب با نسخه‌های مختلف Community و Enterprise هستند. برای نصب و راه‌اندازی هر دو سیستم، می‌توانید از مخازن رسمی توزیع‌های لینوکسی استفاده کنید یا نسخه‌های سفارشی را از سورس کد دانلود و نصب کنید.

 [/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”بررسی و تنظیم اولیه فایل‌های پیکربندی (my.cnf) در MySQL و MariaDB” subtitle=”توضیحات کامل”]

1. فایل‌های پیکربندی MySQL/MariaDB:

فایل پیکربندی اصلی برای MySQL و MariaDB به نام my.cnf (یا my.ini در ویندوز) شناخته می‌شود که تنظیمات پایه و پیشرفته سرور را مشخص می‌کند. این فایل معمولاً در مسیرهای زیر قرار دارد:

  • Debian/Ubuntu:
    /etc/mysql/my.cnf
  • CentOS/RedHat/AlmaLinux:
    /etc/my.cnf

2. ساختار فایل my.cnf:

فایل my.cnf به دو بخش کلی تقسیم می‌شود:

  • بخش Global (عمومی): تنظیمات برای کل سرور.
  • بخش [mysqld]: تنظیمات مربوط به سرور MySQL یا MariaDB.

3. تنظیمات اصلی در فایل my.cnf:

  • بخش [mysqld]:این بخش بیشتر تنظیمات سرور مانند تنظیمات حافظه، اتصال‌ها، ایندکس‌ها و غیره را مدیریت می‌کند.
[mysqld]
# General settings
user        = mysql                # مالک و کاربر سرویس
datadir     = /var/lib/mysql        # مسیر دیتابیس‌ها
socket      = /var/lib/mysql/mysql.sock # سوکت MySQL
log-error   = /var/log/mysqld.log   # فایل لاگ خطاها
pid-file    = /var/run/mysqld/mysqld.pid  # فایل PID سرور

# Performance settings
innodb_buffer_pool_size = 256M    # تنظیمات کش InnoDB
query_cache_size     = 16M      # کش کوئری
max_connections      = 100       # تعداد کانکشن‌های همزمان
max_allowed_packet   = 16M       # بیشترین حجم داده که می‌توان دریافت کرد

# Security settings
skip-name-resolve     = 1        # غیرفعال کردن resolve by name برای امنیت
bind-address          = 0.0.0.0   # اجازه دسترسی از همه آدرس‌ها (همه سرورها)

# Log settings
log-error            = /var/log/mysqld.log
slow-query-log       = 1         # فعال کردن لاگ کندترین کوئری‌ها
slow-query-log-file  = /var/log/mysql/slow-queries.log

[mysqld_safe]
log-error = /var/log/mysqld.log
pid-file  = /var/run/mysqld/mysqld.pid

4. تنظیمات کلیدی در my.cnf:

  • innodb_buffer_pool_size: تنظیم حافظه برای InnoDB که مسئول کش پایگاه داده است.
  • query_cache_size: مقدار کش برای ذخیره کوئری‌ها.
  • max_connections: حداکثر تعداد اتصال‌های همزمان به سرور.
  • bind-address: تنظیم آدرس IP که سرور MySQL می‌تواند به آن گوش دهد. 0.0.0.0 همه آدرس‌های IP را شامل می‌شود.
  • slow-query-log: فعال‌سازی لاگ کوئری‌های کند.

5. بخش دیگر my.cnf:

  • [client]: تنظیمات مربوط به ابزارهای کاربری MySQL.
[client]
user      = root      # کاربر پیش‌فرض برای اتصال
password  = your_password  # رمز عبور کاربر
socket    = /var/lib/mysql/mysql.sock  # مسیر سوکت MySQL

جمع‌بندی:

تنظیم اولیه فایل my.cnf می‌تواند بر عملکرد سرور MySQL/MariaDB تأثیر زیادی بگذارد. با تنظیمات صحیح می‌توانید کارایی، امنیت و ثبات سرور را بهبود دهید. این فایل باید بر اساس نیازهای خاص سیستم و کاربردهایی که دارید سفارشی شود.[/cdb_course_lesson][/cdb_course_lessons]

[cdb_course_lessons title=”فصل 3: پیکربندی اولیه سرویس”][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”تنظیم و امن‌سازی اولیه سرویس (MySQL Secure Installation)” subtitle=”توضیحات کامل”]پس از نصب MySQL یا MariaDB، تنظیمات اولیه و ایمن‌سازی سرویس بسیار مهم است. این فرآیند به شما کمک می‌کند تا امنیت سرور را تقویت کرده و تنظیمات پیش‌فرض را اصلاح کنید.


1. اجرای MySQL Secure Installation:

در بسیاری از توزیع‌های لینوکس، ابزار mysql_secure_installation برای انجام تنظیمات اولیه و امن‌سازی ارائه می‌شود. با اجرای این دستور، می‌توانید موارد زیر را پیکربندی کنید:

sudo mysql_secure_installation

2. مراحل اجرای mysql_secure_installation:

  1. پاسخ به سوال “Would you like to setup VALIDATE PASSWORD component?”:
    • این گزینه برای فعال‌سازی ویژگی رمز عبور قوی است.
    • Enter Y (بله) برای فعال کردن.
  2. تنظیم سطح امنیتی برای رمز عبور:
    • اگر سطح امنیتی را پایین انتخاب کنید، الزامی برای رمزهای عبور قوی نخواهید داشت.
    • انتخاب Low، Medium یا Strong.
  3. تنظیم رمز عبور برای کاربر root MySQL:
    • اگر قبلاً رمز عبور root را تنظیم نکرده‌اید، اینجا از شما خواسته می‌شود تا آن را تعیین کنید.
  4. حذف کاربران ناشناخته (UNIX Root) و تنظیمات مهم دیگر:
    • Remove anonymous users: کاربران ناشناس حذف می‌شوند.
    • Disallow root login remotely: دسترسی از راه دور به کاربر root غیر فعال می‌شود.
    • Remove test database and access to it: دیتابیس تست حذف می‌شود.
    • Reload privilege tables now: جدول‌های مجوز مجدداً بارگذاری می‌شوند.

3. تنظیمات دستی در my.cnf برای امنیت بیشتر:

برای تنظیم دستی و بهبود امنیت، می‌توانید موارد زیر را در فایل my.cnf وارد کنید:

[mysqld]
bind-address            = 127.0.0.1    # محدود کردن دسترسی به localhost
skip-name-resolve        = 1            # غیرفعال کردن resolve by name برای امنیت بیشتر
validate-password        = 1            # فعال کردن الزامات رمز عبور قوی
validate-password-policy = MEDIUM       # سطح سیاست قوی برای رمز عبور (Low, Medium, Strong)
validate-password-length = 8            # طول حداقل رمز عبور

4. Restart MySQL/MariaDB Service:

پس از اعمال تنظیمات، سرویس MySQL یا MariaDB را ری‌استارت کنید:

sudo systemctl restart mysql

جمع‌بندی:

با استفاده از ابزار mysql_secure_installation و تنظیمات دستی در my.cnf، می‌توانید امنیت سرور MySQL یا MariaDB را تقویت کرده و تنظیمات پیش‌فرض را بهینه کنید. این فرآیند به شما کمک می‌کند تا دسترسی‌های ناخواسته و خطرات امنیتی را کاهش دهید.[/cdb_course_lesson][cdb_course_lesson title=”مدیریت کاربران و تنظیمات دسترسی:”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”ایجاد کاربران جدید” subtitle=”توضیحات کامل”]

1. ایجاد کاربران جدید در MySQL/MariaDB:

برای مدیریت کاربران و تنظیمات دسترسی در MySQL یا MariaDB، ابتدا باید کاربر جدیدی ایجاد کرده و سپس مجوزهای لازم را به او اعطا کنید.


2. ایجاد کاربر جدید با استفاده از mysql:

برای ایجاد یک کاربر جدید، می‌توانید از دستور CREATE USER استفاده کنید:

sudo mysql

برای ایجاد یک کاربر جدید با رمز عبور قوی، دستور زیر را اجرا کنید:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
  • newuser: نام کاربری جدید.
  • localhost: آدرس دامنه یا آدرس IP که کاربر می‌تواند از آن اتصال برقرار کند.
  • password: رمز عبور قوی برای کاربر.

3. ایجاد کاربر از طریق دسترسی از راه دور:

اگر می‌خواهید کاربر بتواند از راه دور به سرور متصل شود، باید آدرس IP یا دامنه را مشخص کنید:

CREATE USER 'newuser'@'%' IDENTIFIED BY 'password';

این به کاربر اجازه می‌دهد از هر آدرس IP به سرور متصل شود.

4. اعطای مجوزها (GRANT):

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

GRANT ALL PRIVILEGES ON mydatabase.* TO 'newuser'@'localhost';
  • ALL PRIVILEGES: تمام مجوزها (مانند SELECT, INSERT, UPDATE, DELETE) برای دیتابیس mydatabase اعطا می‌شود.
  • mydatabase: نام دیتابیس که کاربر به آن دسترسی خواهد داشت.

5. اعمال تغییرات:

بعد از تنظیمات، باید تغییرات را با فرمان زیر اعمال کنید:

FLUSH PRIVILEGES;

6. برداشتن مجوزها (REVOKE):

اگر می‌خواهید مجوزها را پس بگیرید، از دستور REVOKE استفاده کنید:

REVOKE ALL PRIVILEGES ON mydatabase.* FROM 'newuser'@'localhost';

7. تست کاربر جدید:

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

mysql -u newuser -p

جمع‌بندی:

ایجاد کاربران جدید و تنظیم مجوزها در MySQL/MariaDB بخش مهمی از مدیریت دسترسی است. با استفاده از دستورات CREATE USER، GRANT و REVOKE می‌توانید امنیت و مدیریت دسترسی‌ها را بهبود بخشید.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”مدیریت سطوح دسترسی (GRANT, REVOKE)” subtitle=”توضیحات کامل”]

1. اعطای مجوزها با دستور GRANT:

برای اعطای مجوزها به کاربر، از دستور GRANT استفاده می‌شود. این دستور مشخص می‌کند که کاربر چه مجوزهایی برای چه دیتابیس‌هایی داشته باشد.

  • Syntax:
    GRANT privileges ON database_name.table_name TO 'username'@'host';
    • privileges: مجوزهایی که می‌خواهید اعطا کنید (مانند ALL PRIVILEGES, SELECT, INSERT, UPDATE, DELETE و غیره).
    • database_name.table_name: دیتابیس و جدول‌هایی که به کاربر دسترسی داده می‌شود.
    • username: نام کاربر.
    • host: آدرس یا دامنه‌ای که کاربر می‌تواند از آن اتصال برقرار کند (localhost یا % برای دسترسی از هر آدرس).

2. مثال‌هایی از GRANT مجوزها:

  • اعطای همه مجوزها برای یک دیتابیس خاص:
    GRANT ALL PRIVILEGES ON mydatabase.* TO 'newuser'@'localhost';
  • اعطای مجوز SELECT و INSERT به یک کاربر خاص:
    GRANT SELECT, INSERT ON mydatabase.mytable TO 'newuser'@'localhost';

3. برداشتن مجوزها با دستور REVOKE:

برای حذف مجوزهای یک کاربر، از دستور REVOKE استفاده می‌شود.

  • Syntax:
    REVOKE privileges ON database_name.table_name FROM 'username'@'host';
    • privileges: مجوزهایی که می‌خواهید لغو کنید.
    • database_name.table_name: دیتابیس و جدول‌هایی که می‌خواهید دسترسی را لغو کنید.
    • username: نام کاربر.
    • host: آدرس یا دامنه‌ای که کاربر از آن اتصال دارد.

4. مثال‌هایی از REVOKE مجوزها:

  • لغو همه مجوزها از یک دیتابیس:
    REVOKE ALL PRIVILEGES ON mydatabase.* FROM 'newuser'@'localhost';
  • لغو مجوز SELECT و INSERT از یک جدول خاص:
    REVOKE SELECT, INSERT ON mydatabase.mytable FROM 'newuser'@'localhost';

5. اعمال تغییرات با دستور FLUSH PRIVILEGES:

بعد از تغییرات مجوزها، باید دستورات FLUSH PRIVILEGES را اجرا کنید تا تغییرات اعمال شوند:

FLUSH PRIVILEGES;

6. بررسی مجوزها با دستور SHOW GRANTS:

برای بررسی مجوزهای یک کاربر، می‌توانید از دستور SHOW GRANTS استفاده کنید:

SHOW GRANTS FOR 'newuser'@'localhost';

جمع‌بندی:

دستورهای GRANT و REVOKE ابزارهای قدرتمندی برای مدیریت سطوح دسترسی در MySQL/MariaDB هستند. با استفاده از این دستورات می‌توانید مجوزهای مختلف را اعطا یا لغو کنید و امنیت پایگاه داده را بهبود بخشید.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”استفاده از رمزنگاری برای رمزهای عبور در MySQL/MariaDB” subtitle=”توضیحات کامل”]برای افزایش امنیت و اطمینان از رمزهای عبور کاربران در MySQL و MariaDB، استفاده از الگوریتم‌های رمزنگاری برای رمزهای عبور ضروری است. در این بخش، نحوه رمزنگاری رمزهای عبور در MySQL/MariaDB را بررسی می‌کنیم.


1. الگوریتم‌های رمزنگاری MySQL/MariaDB:

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

  • MySQL Native Password: این الگوریتم پیش‌فرض MySQL است که در نسخه‌های قدیمی‌تر استفاده می‌شد.
  • Caching_sha2_password: این الگوریتم برای دسترسی به پایگاه داده‌های MySQL از طریق پروتکل جدیدتر caching_sha2_password استفاده می‌شود.
  • Caching_sha2_password (در MariaDB): MariaDB این الگوریتم را برای سازگاری با نسخه‌های جدیدتر MySQL ارائه می‌دهد.
  • Scramble (MySQL 4.1 یا قدیمی‌تر): این الگوریتم برای رمزگذاری رمزهای عبور ساده و قدیمی مورد استفاده قرار می‌گرفت.

2. تنظیم الگوریتم رمزنگاری در MySQL/MariaDB:

برای تنظیم الگوریتم رمزنگاری در MySQL/MariaDB، می‌توانید از دستور ALTER USER استفاده کنید.

  • Syntax:
    ALTER USER 'username'@'host' IDENTIFIED WITH 'algorithm_name' BY 'new_password';
    • username: نام کاربری که می‌خواهید رمز عبور آن را تغییر دهید.
    • host: آدرس یا دامنه‌ای که کاربر می‌تواند از آن اتصال برقرار کند.
    • algorithm_name: نام الگوریتم رمزنگاری (مانند caching_sha2_password, mysql_native_password, sha256_password).
    • new_password: رمز عبور جدیدی که می‌خواهید تنظیم کنید.

3. مثال تغییر الگوریتم و رمز عبور:

  • تغییر الگوریتم به caching_sha2_password و تنظیم رمز عبور جدید:
    ALTER USER 'newuser'@'localhost' IDENTIFIED WITH 'caching_sha2_password' BY 'new_secure_password';
  • تغییر الگوریتم به mysql_native_password و تنظیم رمز عبور:
    ALTER USER 'newuser'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY 'new_password';

4. فعال کردن الگوریتم جدید به‌صورت پیش‌فرض:

برای تنظیم یک الگوریتم رمزنگاری به‌عنوان پیش‌فرض برای کاربران جدید، می‌توانید فایل پیکربندی MySQL (مانند my.cnf) را ویرایش کنید:

[mysqld]
default_authentication_plugin = caching_sha2_password

این دستور، الگوریتم caching_sha2_password را به‌عنوان پیش‌فرض برای کاربران جدید تنظیم می‌کند.


5. بررسی الگوریتم‌های موجود با دستور SHOW VARIABLES:

برای بررسی نوع الگوریتم رمزنگاری که در MySQL/MariaDB استفاده می‌شود، می‌توانید دستور زیر را اجرا کنید:

SHOW VARIABLES LIKE 'default_authentication_plugin';

6. افزودن رمزهای عبور با استفاده از الگوریتم‌های جدیدتر:

برای افزودن کاربران جدید با رمزهای عبور رمزنگاری شده، از گزینه --password یا -p در هنگام ایجاد کاربر استفاده کنید:

CREATE USER 'newuser'@'localhost' IDENTIFIED WITH 'caching_sha2_password' BY 'new_secure_password';

جمع‌بندی:

استفاده از الگوریتم‌های رمزنگاری مدرن مانند caching_sha2_password در MySQL/MariaDB به افزایش امنیت رمزهای عبور کمک می‌کند. با تنظیم درست این الگوریتم‌ها، می‌توانید از دسترسی امن و محافظت‌شده به پایگاه داده اطمینان حاصل کنید.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”تنظیم محل ذخیره‌سازی داده‌ها و لاگ‌ها در MySQL/MariaDB” subtitle=”توضیحات کامل”]تنظیم محل ذخیره‌سازی داده‌ها و لاگ‌ها می‌تواند به مدیریت بهتر فضای دیسک و حفظ کارایی پایگاه داده کمک کند. در MySQL و MariaDB، فایل‌های داده و لاگ‌ها در مسیرهای مشخصی ذخیره می‌شوند و تنظیمات مختلفی برای تغییر این مسیرها وجود دارد.


1. مسیرهای ذخیره‌سازی داده‌ها (Data Directories):

  • فایل‌های داده پایگاه داده در محل‌های مشخصی ذخیره می‌شوند.
  • مسیر پیش‌فرض این فایل‌ها ممکن است در فایل پیکربندی (my.cnf) مشخص شده باشد.
  • متغیرهای پیکربندی:
    • datadir: محل پیش‌فرض ذخیره فایل‌های داده MySQL.
    • innodb_data_home_dir: محل پیش‌فرض ذخیره داده‌های InnoDB.
  • مثال تنظیم مسیرهای ذخیره‌سازی:
    [mysqld]
    datadir = /var/lib/mysql
    innodb_data_home_dir = /var/lib/mysql
  • در این مثال، فایل‌های داده در /var/lib/mysql ذخیره می‌شوند.

2. مسیرهای ذخیره‌سازی لاگ‌ها (Log Files):

  • لاگ‌ها شامل فایل‌های لاگ خطا (error.log)، لاگ کوئری‌های کند (slow_query.log)، و لاگ‌های عمومی (general_log) می‌شوند.
  • تنظیم محل لاگ‌ها به شما امکان می‌دهد فضای دیسک را بهتر مدیریت کنید.
  • متغیرهای پیکربندی:
    • log_error: محل ذخیره لاگ خطا.
    • slow_query_log: فعال‌سازی لاگ‌های کوئری‌های کند و تنظیم محل ذخیره آنها.
    • general_log: فعال‌سازی لاگ‌های عمومی و تنظیم محل ذخیره آنها.
  • مثال تنظیم محل لاگ‌ها:
    [mysqld]
    log_error = /var/log/mysql/error.log
    slow_query_log = /var/log/mysql/slow.log
    general_log_file = /var/log/mysql/general.log
  • در این مثال، لاگ‌های خطا در /var/log/mysql/error.log ذخیره می‌شوند.

3. تغییر مسیر لاگ‌ها هنگام اجرا:

اگر پس از راه‌اندازی MySQL بخواهید مسیر لاگ‌ها را تغییر دهید، می‌توانید از گزینه‌های خط فرمان استفاده کنید.

  • مثال تغییر مسیر لاگ خطا هنگام اجرا:
    mysqld --log-error=/new_path/mysql/error.log
  • مثال تغییر مسیر slow لاگ:
    mysqld --slow-query-log-file=/new_path/mysql/slow.log

4. بررسی مسیرهای موجود:

برای مشاهده مسیرهای پیش‌فرض ذخیره‌سازی فایل‌ها، می‌توانید دستور زیر را اجرا کنید:

SHOW VARIABLES LIKE 'datadir';
SHOW VARIABLES LIKE 'log_error';
SHOW VARIABLES LIKE 'slow_query_log_file';

جمع‌بندی:

تنظیم صحیح محل ذخیره‌سازی داده‌ها و لاگ‌ها باعث بهبود مدیریت منابع سیستم و حفظ کارایی پایگاه داده می‌شود. با تغییر مسیرهای ذخیره‌سازی، می‌توانید فضای دیسک را بهتر مدیریت کنید و از بروز مشکلات فضا جلوگیری کنید.

[/cdb_course_lesson][/cdb_course_lessons]

[cdb_course_lessons title=”فصل 4: پیکربندی پیشرفته”][cdb_course_lesson title=”تنظیمات پیشرفته در فایل‌های پیکربندی:”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”تنظیمات حافظه (Buffer Pool, Query Cache, Temporary Tables)” subtitle=”توضیحات کامل”]تنظیم صحیح حافظه در MySQL و MariaDB یکی از مهم‌ترین عوامل در بهبود عملکرد پایگاه داده است. این تنظیمات شامل Buffer Pool، Query Cache، و Temporary Tables می‌باشد که با توجه به نیازهای سیستم و پایگاه داده تنظیم می‌شوند.


1. Buffer Pool

Buffer Pool در MySQL/MariaDB برای مدیریت حافظه استفاده می‌شود و عمدتاً توسط موتور ذخیره‌سازی InnoDB به کار می‌رود.

  • کاربرد Buffer Pool:
    • نگهداری داده‌های پرکاربرد در حافظه.
    • کاهش نیاز به دسترسی به دیسک.
  • متغیرهای پیکربندی:
    • innodb_buffer_pool_size: حجم حافظه اختصاص‌داده‌شده به Buffer Pool.
    • innodb_buffer_pool_instances: تعداد نمونه‌های Buffer Pool برای تقسیم بار.
  • تنظیم مقدار:
    • مقدار innodb_buffer_pool_size معمولاً باید 50-80٪ از کل حافظه سرور باشد.
    • اگر حجم داده‌های شما زیاد است، این مقدار را افزایش دهید.
  • مثال تنظیم Buffer Pool:
    [mysqld]
    innodb_buffer_pool_size = 4G
    innodb_buffer_pool_instances = 2

2. Query Cache

Query Cache یک ویژگی قدیمی در MySQL است که نتایج کوئری‌های پرکاربرد را در حافظه نگه می‌دارد. این ویژگی در MariaDB همچنان پشتیبانی می‌شود ولی در MySQL از نسخه 8 حذف شده است.

  • کاربرد Query Cache:
    • بهبود سرعت اجرای کوئری‌های تکراری.
    • کاهش بار پردازشی سرور.
  • متغیرهای پیکربندی:
    • query_cache_size: حجم کل حافظه اختصاص‌یافته برای Query Cache.
    • query_cache_type: فعال یا غیرفعال کردن Query Cache.
    • query_cache_limit: حداکثر اندازه کوئری که می‌تواند در Cache ذخیره شود.
  • تنظیم مقدار:
    • مقدار query_cache_size باید با توجه به حجم کوئری‌های تکراری تنظیم شود (مثلاً 64M).
    • برای سیستم‌هایی با حجم کوئری‌های متغیر، این ویژگی را غیرفعال کنید.
  • مثال تنظیم Query Cache:
    [mysqld]
    query_cache_size = 64M
    query_cache_type = 1
    query_cache_limit = 1M

3. Temporary Tables

Temporary Tables برای نگهداری داده‌های موقت کوئری‌ها استفاده می‌شوند. این جداول می‌توانند در حافظه یا روی دیسک ذخیره شوند.

  • متغیرهای پیکربندی:
    • tmp_table_size: حجم حداکثری جداول موقتی که در حافظه نگه داشته می‌شوند.
    • max_heap_table_size: حداکثر اندازه جداول موقت که در حافظه قابل ذخیره هستند.
    • internal_tmp_disk_storage_engine: موتور ذخیره‌سازی برای جداول موقتی دیسکی.
  • تنظیم مقدار:
    • اگر مقدار tmp_table_size و max_heap_table_size کمتر از اندازه داده‌های موقتی باشد، جداول موقتی به دیسک منتقل می‌شوند که باعث کاهش عملکرد می‌شود.
    • مقدار این دو متغیر باید برابر تنظیم شود.
  • مثال تنظیم Temporary Tables:
    [mysqld]
    tmp_table_size = 128M
    max_heap_table_size = 128M
    internal_tmp_disk_storage_engine = InnoDB

نکات مهم برای تنظیم حافظه:

  1. مانیتورینگ حافظه:
    • از ابزارهایی مانند SHOW VARIABLES و SHOW STATUS برای مشاهده و بررسی عملکرد تنظیمات استفاده کنید.
    • مثال:
      SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
      SHOW STATUS LIKE 'Innodb_buffer_pool%';
  2. تنظیمات براساس بار کاری (Workload):
    • برای بارهای کاری خواندنی، مقدار بیشتری به Buffer Pool اختصاص دهید.
    • برای کوئری‌های تکراری، از Query Cache استفاده کنید.
  3. حافظه کافی برای سیستم عامل:
    • همواره مقداری حافظه برای نیازهای سیستم‌عامل و سایر سرویس‌ها آزاد بگذارید.

جمع‌بندی:

تنظیمات حافظه مانند Buffer Pool، Query Cache، و Temporary Tables نقش مهمی در بهینه‌سازی عملکرد MySQL/MariaDB دارند. این تنظیمات باید بر اساس نیاز سیستم و میزان بار کاری پایگاه داده تنظیم شوند. بهینه‌سازی این مقادیر باعث کاهش تأخیر و افزایش سرعت پاسخ‌گویی به کوئری‌ها خواهد شد.

 [/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”مدیریت لاگ‌ها (General Log, Slow Query Log, Error Log)” subtitle=”توضیحات کامل”]لاگ‌ها یکی از ابزارهای مهم برای عیب‌یابی، بررسی عملکرد و نظارت بر امنیت سرویس‌های MySQL و MariaDB هستند. مدیریت صحیح لاگ‌ها می‌تواند به شما در شناسایی مشکلات و بهینه‌سازی پایگاه داده کمک کند. در این بخش، سه نوع اصلی لاگ شامل General Log، Slow Query Log و Error Log بررسی می‌شوند.


1. General Log

General Log شامل تمام کوئری‌ها و دستوراتی است که به سرور ارسال می‌شود. این لاگ برای اشکال‌زدایی و مانیتورینگ دقیق مفید است اما به دلیل حجم زیاد داده، معمولاً در محیط‌های تولیدی غیرفعال است.

  • ویژگی‌ها:
    • نمایش تمام کوئری‌ها و دستورات.
    • مناسب برای اشکال‌زدایی اولیه.
  • متغیرهای پیکربندی:
    • general_log: فعال یا غیرفعال کردن General Log.
    • general_log_file: مسیر ذخیره فایل لاگ General.
  • تنظیمات:
    [mysqld]
    general_log = 1
    general_log_file = /var/log/mysql/general.log
  • فعال‌سازی در زمان اجرا:
    SET GLOBAL general_log = 'ON';
    SET GLOBAL general_log_file = '/path/to/general.log';
  • نکته: فعال‌سازی General Log در محیط‌های تولیدی ممکن است باعث کاهش عملکرد شود.

2. Slow Query Log

Slow Query Log برای ثبت کوئری‌هایی استفاده می‌شود که اجرای آن‌ها بیشتر از زمان مشخصی طول می‌کشد. این لاگ ابزاری مؤثر برای شناسایی کوئری‌های ناکارآمد و بهینه‌سازی عملکرد است.

  • ویژگی‌ها:
    • ثبت کوئری‌هایی که بیش از یک حد مشخص طول می‌کشند.
    • شناسایی کوئری‌هایی که نیاز به ایندکس یا بهینه‌سازی دارند.
  • متغیرهای پیکربندی:
    • slow_query_log: فعال یا غیرفعال کردن Slow Query Log.
    • slow_query_log_file: مسیر ذخیره فایل لاگ Slow Query.
    • long_query_time: حد زمانی (بر حسب ثانیه) برای ثبت کوئری‌ها.
    • log_queries_not_using_indexes: ثبت کوئری‌هایی که از ایندکس استفاده نمی‌کنند.
  • تنظیمات:
    [mysqld]
    slow_query_log = 1
    slow_query_log_file = /var/log/mysql/slow.log
    long_query_time = 2
    log_queries_not_using_indexes = 1
  • فعال‌سازی در زمان اجرا:
    SET GLOBAL slow_query_log = 'ON';
    SET GLOBAL slow_query_log_file = '/path/to/slow.log';
    SET GLOBAL long_query_time = 2;

3. Error Log

Error Log شامل اطلاعات مربوط به خطاهای مهم، مشکلات سرور و تغییرات در سرویس است. این لاگ اولین نقطه برای بررسی مشکلات سرویس است.

  • ویژگی‌ها:
    • ثبت خطاهای بحرانی مانند مشکلات اتصال، خطاهای دسترسی یا خرابی پایگاه داده.
    • ثبت رویدادهای مهم مانند راه‌اندازی مجدد سرور.
  • متغیرهای پیکربندی:
    • log_error: مسیر ذخیره فایل Error Log.
  • تنظیمات:
    [mysqld]
    log_error = /var/log/mysql/error.log
  • مشاهده Error Log: فایل Error Log معمولاً در مسیر زیر قرار دارد:
    tail -f /var/log/mysql/error.log

نکات کلی برای مدیریت لاگ‌ها

  1. مانیتورینگ و چرخش لاگ‌ها:
    • از ابزارهایی مانند logrotate برای مدیریت اندازه و چرخش لاگ‌ها استفاده کنید.
    • تنظیم نمونه logrotate برای MySQL:
      /var/log/mysql/*.log {
          daily
          rotate 7
          compress
          delaycompress
          missingok
          notifempty
          create 640 mysql mysql
      }
  2. محدود کردن دسترسی به لاگ‌ها:
    • اطمینان حاصل کنید که فایل‌های لاگ تنها برای کاربران مجاز (مانند mysql) قابل‌دسترس هستند.
      chmod 640 /var/log/mysql/*.log
      chown mysql:mysql /var/log/mysql/*.log
  3. تحلیل لاگ‌ها:
    • از ابزارهایی مانند pt-query-digest برای تحلیل لاگ Slow Query استفاده کنید.
    • مثال:
      pt-query-digest /var/log/mysql/slow.log

جمع‌بندی:

مدیریت لاگ‌ها در MySQL/MariaDB بخش مهمی از نگهداری و عیب‌یابی پایگاه داده است. General Log برای اشکال‌زدایی دقیق، Slow Query Log برای شناسایی کوئری‌های ناکارآمد، و Error Log برای بررسی مشکلات بحرانی به کار می‌روند. با تنظیمات مناسب و مانیتورینگ منظم این لاگ‌ها، می‌توانید از عملکرد بهتر و پایداری پایگاه داده اطمینان حاصل کنید.

[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”تنظیمات اتصال‌ها و عملکرد شبکه در MySQL / MariaDB” subtitle=”توضیحات کامل”]مدیریت اتصال‌ها و عملکرد شبکه در MySQL/MariaDB یکی از بخش‌های مهم برای تضمین کارایی و پایداری سرویس است. تنظیمات بهینه برای پارامترهای شبکه‌ای مانند max_connections و timeouts می‌تواند از بروز مشکلاتی مانند اشباع شدن منابع یا قطع اتصال کاربران جلوگیری کند.


1. تعداد اتصالات همزمان (max_connections)

پارامتر max_connections مشخص می‌کند که چند اتصال همزمان می‌تواند به سرور پایگاه داده برقرار شود. مقدار پیش‌فرض معمولاً 151 است، اما بسته به منابع سرور و نیازهای برنامه ممکن است نیاز به افزایش یا کاهش این مقدار باشد.

  • تنظیمات در فایل پیکربندی:
    [mysqld]
    max_connections = 500
  • تنظیم در زمان اجرا:
    SET GLOBAL max_connections = 500;
  • نکات مهم:
    • افزایش بیش از حد max_connections می‌تواند باعث مصرف زیاد منابع (مانند RAM) شود.
    • در صورت رسیدن به حداکثر اتصالات، سرور پیغام زیر را برمی‌گرداند:
      ERROR 1040 (HY000): Too many connections

      برای رفع موقت این مشکل، می‌توانید مقدار max_connections را افزایش دهید.


2. مدیریت زمان‌های انتظار (Timeouts)

پارامترهای مختلفی برای مدیریت زمان‌های انتظار اتصالات وجود دارند. تنظیم صحیح این مقادیر می‌تواند به کاهش استفاده غیرضروری از منابع کمک کند.

wait_timeout و interactive_timeout

این دو پارامتر زمان حداکثر بیکاری یک اتصال را مشخص می‌کنند.

  • wait_timeout: برای اتصالات غیرتعاملی.
  • interactive_timeout: برای اتصالات تعاملی (مانند کلاینت‌های خط فرمان).
  • تنظیمات در فایل پیکربندی:
    [mysqld]
    wait_timeout = 300
    interactive_timeout = 600
  • تنظیم در زمان اجرا:
    SET GLOBAL wait_timeout = 300;
    SET GLOBAL interactive_timeout = 600;

connect_timeout

این پارامتر زمان حداکثر برای برقراری اتصال اولیه به سرور را مشخص می‌کند.

  • تنظیمات در فایل پیکربندی:
    [mysqld]
    connect_timeout = 10
  • تنظیم در زمان اجرا:
    SET GLOBAL connect_timeout = 10;

3. مدیریت منابع اتصال‌ها

max_user_connections

این پارامتر تعداد اتصالات همزمان را برای هر کاربر محدود می‌کند.

  • تنظیمات در فایل پیکربندی:
    [mysqld]
    max_user_connections = 50
  • تنظیم در زمان اجرا:
    SET GLOBAL max_user_connections = 50;

thread_cache_size

این پارامتر تعداد نخ‌های (Threads) اتصال‌های غیرفعال را مشخص می‌کند که می‌توانند برای اتصالات جدید مجدداً استفاده شوند. مقدار مناسب می‌تواند عملکرد را بهبود بخشد.

  • تنظیمات در فایل پیکربندی:
    [mysqld]
    thread_cache_size = 16

4. عملکرد شبکه

max_allowed_packet

این پارامتر اندازه حداکثر بسته داده‌ای را که سرور می‌تواند دریافت یا ارسال کند، تعیین می‌کند. مقدار پیش‌فرض معمولاً 16MB است.

  • تنظیمات در فایل پیکربندی:
    [mysqld]
    max_allowed_packet = 64M
  • تنظیم در زمان اجرا:
    SET GLOBAL max_allowed_packet = 67108864; -- برابر با 64MB

net_buffer_length

این پارامتر اندازه بافر اولیه برای بسته‌های شبکه را مشخص می‌کند.

  • تنظیمات در فایل پیکربندی:
    [mysqld]
    net_buffer_length = 16K

5. مانیتورینگ اتصالات

برای بررسی وضعیت اتصالات فعلی، می‌توانید از دستور زیر استفاده کنید:

SHOW PROCESSLIST;

یا برای مشاهده تعداد کل اتصالات:

SHOW STATUS LIKE 'Threads_connected';

جمع‌بندی

مدیریت صحیح پارامترهای اتصال‌ها و شبکه می‌تواند از بروز مشکلات عملکردی و امنیتی جلوگیری کند. تنظیم max_connections بر اساس نیازهای برنامه، محدود کردن زمان‌های انتظار با استفاده از wait_timeout و connect_timeout، و بهینه‌سازی پارامترهایی مانند max_allowed_packet و thread_cache_size برای بهبود عملکرد ضروری هستند. با پایش و تنظیم مداوم این پارامترها می‌توانید عملکرد بهینه پایگاه داده خود را تضمین کنید.

[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”فعال‌سازی و استفاده از موتورهای ذخیره‌سازی (Storage Engines)” subtitle=”توضیحات کامل”]موتورهای ذخیره‌سازی (Storage Engines) بخشی از MySQL/MariaDB هستند که نحوه مدیریت، ذخیره‌سازی و بازیابی داده‌ها را تعیین می‌کنند. هر موتور ذخیره‌سازی ویژگی‌ها و کاربردهای خاص خود را دارد و می‌توان آن را بسته به نیاز برنامه یا سیستم انتخاب کرد. در این بخش به بررسی موتورهای ذخیره‌سازی اصلی مانند InnoDB، MyISAM، Memory و سایر موتورها می‌پردازیم.


1. موتور ذخیره‌سازی InnoDB

ویژگی‌ها:

  • پشتیبانی از تراکنش‌ها (ACID): InnoDB از تراکنش‌های ACID پشتیبانی می‌کند که امنیت و یکپارچگی داده‌ها را تضمین می‌کند.
  • قفل‌گذاری در سطح ردیف (Row-level Locking): مناسب برای برنامه‌هایی با تراکنش‌های همزمان زیاد.
  • ایندکس‌های خوشه‌ای (Clustered Index): عملکرد بهتری برای جستجوهای سریع.
  • پشتیبانی از کلیدهای خارجی (Foreign Keys): قابلیت مدیریت روابط بین جداول.
  • بازیابی داده‌ها (Crash Recovery): با استفاده از لاگ تراکنش‌ها، داده‌ها در صورت خرابی بازیابی می‌شوند.

بهینه‌سازی:

  1. افزایش Buffer Pool:
    • Buffer Pool فضایی در حافظه است که InnoDB برای ذخیره داده‌ها و ایندکس‌ها استفاده می‌کند.
    • تنظیم در فایل my.cnf:
      innodb_buffer_pool_size = 1G
    • مقدار این تنظیم را با توجه به حافظه موجود افزایش دهید.
  2. فعال‌سازی File-Per-Table:
    • ذخیره داده‌ها و ایندکس‌های هر جدول در یک فایل جداگانه.
    • تنظیم در فایل my.cnf:
      innodb_file_per_table = 1
  3. تنظیم Log File Size:
    • اندازه لاگ‌های تراکنشی برای عملکرد بهتر:
      innodb_log_file_size = 256M

2. موتور ذخیره‌سازی MyISAM

ویژگی‌ها:

  • بدون پشتیبانی از تراکنش‌ها: مناسب برای کاربردهایی که نیاز به تراکنش‌های پیچیده ندارند.
  • ایندکس‌گذاری سریع: برای جداولی که عملیات خواندن بیشتر از نوشتن است.
  • پشتیبانی از فشرده‌سازی جداول: برای صرفه‌جویی در فضا.
  • قفل‌گذاری در سطح جدول (Table-level Locking): مناسب برای حجم کم همزمانی.

موارد استفاده:

  • کاربردهای گزارش‌گیری و تجزیه‌وتحلیل داده‌ها: به دلیل سرعت بالا در خواندن داده‌ها.
  • سیستم‌های مدیریت محتوا: که تراکنش‌های پیچیده موردنیاز نیست.

تنظیم و بهینه‌سازی:

  1. تنظیم Cache Size:
    • MyISAM برای ذخیره ایندکس‌ها از Key Buffer استفاده می‌کند:
      key_buffer_size = 256M
  2. فعال‌سازی فشرده‌سازی جداول:
    • استفاده از ابزار myisampack برای کاهش حجم جداول.

3. موتور ذخیره‌سازی Memory

ویژگی‌ها:

  • ذخیره داده‌ها در حافظه: سرعت فوق‌العاده بالا برای دسترسی به داده‌ها.
  • موقت بودن داده‌ها: داده‌ها با راه‌اندازی مجدد سرویس حذف می‌شوند.
  • پشتیبانی از قفل‌گذاری در سطح جدول.

موارد استفاده:

  • ایجاد جداول موقت: برای پردازش‌های سریع.
  • ذخیره داده‌های Session: در سیستم‌های وب.

محدودیت‌ها:

  • حداکثر اندازه جداول محدود به مقدار حافظه موجود است.
  • از BLOB و TEXT پشتیبانی نمی‌کند.

تنظیم و بهینه‌سازی:

  1. افزایش فضای Memory Table:
    tmp_table_size = 64M
    max_heap_table_size = 64M
  2. مدیریت مصرف حافظه: به دقت نظارت کنید تا سرور دچار کمبود حافظه نشود.

4. سایر موتورهای ذخیره‌سازی

CSV:

  • ویژگی‌ها:
    • ذخیره داده‌ها در قالب فایل CSV.
    • برای تبادل داده بین سیستم‌های مختلف استفاده می‌شود.

ARCHIVE:

  • ویژگی‌ها:
    • مناسب برای ذخیره‌سازی داده‌های قدیمی و آرشیوی.
    • فشرده‌سازی داده‌ها برای کاهش حجم.

BLACKHOLE:

  • ویژگی‌ها:
    • داده‌های ورودی را حذف می‌کند.
    • برای سناریوهای Replication خاص استفاده می‌شود.

Federated:

  • ویژگی‌ها:
    • امکان دسترسی به داده‌های روی سرورهای دیگر.
    • برای ارتباط بین سرورهای MySQL/MariaDB.

5. انتخاب موتور ذخیره‌سازی مناسب

  • InnoDB: برای برنامه‌های تراکنشی و حیاتی.
  • MyISAM: برای داده‌هایی که عملیات خواندن بیشتر از نوشتن است.
  • Memory: برای داده‌های موقت و پردازش‌های سریع.
  • ARCHIVE: برای آرشیو داده‌های قدیمی.
  • Federated: برای دسترسی به داده‌های راه دور.

جمع‌بندی

موتورهای ذخیره‌سازی MySQL/MariaDB ابزارهای قدرتمندی برای مدیریت داده‌ها ارائه می‌دهند. انتخاب موتور ذخیره‌سازی مناسب بستگی به نیازهای خاص سیستم شما دارد. برای عملکرد بهینه، استفاده از InnoDB به دلیل ویژگی‌های تراکنشی و قابلیت بازیابی داده توصیه می‌شود، در حالی که MyISAM و Memory برای موارد خاصی مانند گزارش‌گیری و پردازش‌های سریع کاربرد دارند.[/cdb_course_lesson][/cdb_course_lessons]

[cdb_course_lessons title=”فصل 5: امنیت در MySQL / MariaDB”][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”رمزنگاری ارتباطات با SSL/TLS در MySQL/MariaDB” subtitle=”توضیحات کامل”]استفاده از SSL/TLS در MySQL/MariaDB تضمین می‌کند که ارتباطات بین کلاینت و سرور رمزنگاری شده و ایمن هستند. این ویژگی به ویژه برای محیط‌هایی که امنیت داده‌ها اهمیت دارد (مانند ارتباطات بین سرورهای راه دور یا کاربران و سرور) ضروری است.


مراحل پیاده‌سازی SSL/TLS در MySQL/MariaDB

1. پیش‌نیازها

  • نسخه MySQL 5.7 یا MariaDB 10.1 به بعد (برای پشتیبانی بهتر از SSL/TLS).
  • OpenSSL برای ایجاد گواهی‌ها.
  • دسترسی به فایل‌های تنظیمات MySQL/MariaDB (مانند my.cnf).

2. ایجاد گواهی‌های SSL/TLS

می‌توانید از یک گواهی صادر شده توسط یک CA معتبر یا گواهی‌های Self-signed استفاده کنید.

ایجاد گواهی‌های Self-signed:
  1. ایجاد CA (Certificate Authority):
    openssl genrsa 2048 > ca-key.pem
    openssl req -new -x509 -nodes -days 3650 -key ca-key.pem -out ca-cert.pem
    • ca-key.pem: کلید خصوصی CA.
    • ca-cert.pem: گواهی عمومی CA.
  2. ایجاد گواهی سرور:
    openssl genrsa 2048 > server-key.pem
    openssl req -new -key server-key.pem -out server-req.pem
    openssl x509 -req -in server-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
    • server-key.pem: کلید خصوصی سرور.
    • server-cert.pem: گواهی سرور.
  3. ایجاد گواهی کلاینت:
    openssl genrsa 2048 > client-key.pem
    openssl req -new -key client-key.pem -out client-req.pem
    openssl x509 -req -in client-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
    • client-key.pem: کلید خصوصی کلاینت.
    • client-cert.pem: گواهی کلاینت.
  4. تنظیم مجوزها برای فایل‌ها:
    chmod 600 *.pem

3. پیکربندی MySQL/MariaDB برای SSL/TLS

برای فعال‌سازی SSL/TLS در MySQL/MariaDB، فایل تنظیمات my.cnf را ویرایش کنید:

  1. اضافه کردن تنظیمات SSL به فایل my.cnf:
    [mysqld]
    ssl-ca=/path/to/ca-cert.pem
    ssl-cert=/path/to/server-cert.pem
    ssl-key=/path/to/server-key.pem
  2. راه‌اندازی مجدد سرویس MySQL/MariaDB:
    systemctl restart mysql
  3. تایید فعال‌سازی SSL: وارد محیط MySQL شوید:
    SHOW VARIABLES LIKE '%ssl%';

    خروجی باید مقادیری مانند زیر را نشان دهد:

    have_ssl = YES
    have_openssl = YES
    ssl_ca = /path/to/ca-cert.pem
    ssl_cert = /path/to/server-cert.pem
    ssl_key = /path/to/server-key.pem

4. ایمن‌سازی کلاینت‌ها

برای اطمینان از ارتباط ایمن کلاینت‌ها، گواهی‌های CA و کلاینت باید در سیستم کلاینت موجود باشند.

  1. اتصال به MySQL با SSL:
    mysql --ssl-ca=/path/to/ca-cert.pem \
          --ssl-cert=/path/to/client-cert.pem \
          --ssl-key=/path/to/client-key.pem \
          -u username -p
  2. تایید استفاده از SSL در کلاینت: پس از ورود به MySQL:
    \s

    باید مقدار زیر را مشاهده کنید:

    SSL: Cipher in use is ...

5. اجباری کردن استفاده از SSL برای کاربران

برای اطمینان از اینکه کاربران فقط از طریق SSL متصل می‌شوند، می‌توانید تنظیمات زیر را اعمال کنید:

  1. ایجاد یا تغییر کاربر با شرط SSL:
    CREATE USER 'secure_user'@'%' IDENTIFIED BY 'password' REQUIRE SSL;
    GRANT ALL PRIVILEGES ON database.* TO 'secure_user'@'%';
  2. مشاهده وضعیت کاربران:
    SELECT host, user, ssl_type FROM mysql.user;

6. عیب‌یابی

  • اگر SSL فعال نیست، مطمئن شوید که فایل‌های گواهی معتبر هستند و مسیرها در my.cnf درست تنظیم شده‌اند.
  • از لاگ‌های MySQL برای بررسی خطاهای مربوط به SSL استفاده کنید:
    tail -f /var/log/mysql/error.log

جمع‌بندی

رمزنگاری ارتباطات با SSL/TLS در MySQL/MariaDB یکی از اقدامات ضروری برای افزایش امنیت داده‌ها در حین انتقال است. این فرایند شامل ایجاد گواهی‌ها، پیکربندی سرور و کلاینت‌ها، و اعمال محدودیت‌های امنیتی برای کاربران است. با پیاده‌سازی صحیح SSL/TLS، می‌توانید از امنیت ارتباطات در محیط‌های حساس اطمینان حاصل کنید.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”امن‌سازی اتصالات MySQL/MariaDB از طریق فایروال و محدود کردن دسترسی‌ها” subtitle=”توضیحات کامل”]امن‌سازی اتصالات به MySQL/MariaDB یکی از جنبه‌های کلیدی مدیریت امنیت سرورهای پایگاه داده است. در این بخش به روش‌هایی برای محدود کردن دسترسی‌ها و پیکربندی فایروال برای حفاظت از سرویس می‌پردازیم.


1. محدود کردن دسترسی‌ها در MySQL/MariaDB

الف) محدود کردن دسترسی کاربران به آدرس‌های مشخص

هنگام ایجاد کاربران، می‌توانید دسترسی آن‌ها را به آدرس‌های IP یا هاست‌های مشخص محدود کنید:

  1. ایجاد کاربر با دسترسی محدود به IP مشخص:
    CREATE USER 'username'@'192.168.1.100' IDENTIFIED BY 'password';
    GRANT ALL PRIVILEGES ON database.* TO 'username'@'192.168.1.100';
  2. محدود کردن دسترسی به شبکه خاص: اگر کاربر فقط باید از یک شبکه خاص دسترسی داشته باشد:
    CREATE USER 'username'@'192.168.1.%' IDENTIFIED BY 'password';
  3. تغییر هاست کاربر موجود:
    UPDATE mysql.user SET host = '192.168.1.100' WHERE user = 'username' AND host = '%';
    FLUSH PRIVILEGES;

ب) اجباری کردن استفاده از SSL برای کاربران

اطمینان حاصل کنید که کاربران فقط از طریق اتصالات رمزنگاری‌شده به سرور متصل شوند:

CREATE USER 'secure_user'@'%' IDENTIFIED BY 'password' REQUIRE SSL;
GRANT ALL PRIVILEGES ON database.* TO 'secure_user'@'%';

ج) استفاده از جدول‌های امنیتی داخلی MySQL

جدول mysql.user حاوی اطلاعات دسترسی کاربران است. با بررسی این جدول، می‌توانید تنظیمات دسترسی کاربران را کنترل کنید:

SELECT host, user, ssl_type FROM mysql.user;

2. پیکربندی فایروال برای محدود کردن اتصالات

الف) پیکربندی فایروال UFW (برای سیستم‌های مبتنی بر Debian/Ubuntu)

  1. اجازه اتصال فقط از IP‌های مجاز: فرض کنید سرور MySQL روی پورت 3306 اجرا می‌شود و فقط IP خاصی باید دسترسی داشته باشد:
    sudo ufw allow from 192.168.1.100 to any port 3306
  2. مسدود کردن دسترسی برای سایر آدرس‌ها: اطمینان حاصل کنید که سایر اتصالات به پورت 3306 مسدود شده‌اند:
    sudo ufw deny 3306
  3. بررسی وضعیت فایروال:
    sudo ufw status

ب) پیکربندی فایروال Firewalld (برای سیستم‌های مبتنی بر RHEL/CentOS)

  1. اضافه کردن قانون برای IP‌های مجاز:
    sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="3306" accept'
  2. مسدود کردن دسترسی برای سایر آدرس‌ها:
    sudo firewall-cmd --zone=public --remove-port=3306/tcp
  3. ذخیره تنظیمات فایروال:
    sudo firewall-cmd --runtime-to-permanent

3. بستن دسترسی‌های غیرضروری در فایل تنظیمات

الف) تنظیم Bind Address

MySQL/MariaDB به طور پیش‌فرض روی تمام آدرس‌های IP موجود (0.0.0.0) گوش می‌دهد. می‌توانید این رفتار را تغییر دهید تا فقط روی یک IP مشخص یا لوکال‌هاست گوش دهد.

  1. فایل تنظیمات (my.cnf) را ویرایش کنید:
    [mysqld]
    bind-address = 127.0.0.1

    با این تنظیم، MySQL فقط به اتصالات داخلی پاسخ می‌دهد.

  2. در صورتی که اتصال از IP مشخصی در شبکه نیاز باشد:
    bind-address = 192.168.1.100
  3. سرویس MySQL را مجدداً راه‌اندازی کنید:
    systemctl restart mysql

4. مانیتورینگ اتصالات و جلوگیری از حملات Brute Force

الف) مشاهده اتصالات فعال:

می‌توانید با استفاده از دستور زیر اتصالات فعال به سرور را مشاهده کنید:

SHOW PROCESSLIST;

ب) استفاده از ابزار Fail2Ban برای جلوگیری از حملات:

Fail2Ban می‌تواند حملات Brute Force به سرور MySQL را شناسایی و مسدود کند.

  1. نصب Fail2Ban:
    sudo apt install fail2ban
  2. ایجاد تنظیمات برای MySQL: فایل /etc/fail2ban/jail.local را ویرایش کنید و بخش زیر را اضافه کنید:
    [mysqld-auth]
    enabled = true
    port = 3306
    filter = mysqld-auth
    logpath = /var/log/mysql/error.log
    maxretry = 5
    bantime = 3600
  3. راه‌اندازی مجدد Fail2Ban:
    sudo systemctl restart fail2ban

جمع‌بندی

محدود کردن دسترسی‌ها و استفاده از فایروال برای محافظت از سرویس MySQL/MariaDB یک لایه امنیتی اساسی برای سرور پایگاه داده فراهم می‌کند. با تنظیم دسترسی کاربران، محدود کردن اتصالات از طریق فایروال، و نظارت بر لاگ‌ها می‌توانید به طور قابل توجهی خطر حملات را کاهش دهید و امنیت داده‌های خود را تضمین کنید.

[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”استفاده از ابزارهای امنیتی MySQL / MariaDB” subtitle=”توضیحات کامل”]پایگاه‌های داده MySQL و MariaDB ابزارها و ویژگی‌های امنیتی مختلفی ارائه می‌دهند که به مدیران سیستم کمک می‌کند تا امنیت داده‌ها و اتصالات را بهبود بخشند. در این بخش، به بررسی ابزارها و ویژگی‌های امنیتی این دو سیستم می‌پردازیم.


1. MySQL Secure Installation

ابزار mysql_secure_installation یک اسکریپت داخلی است که به شما در پیکربندی امنیتی اولیه پایگاه داده کمک می‌کند. این ابزار شامل اقدامات زیر است:

  1. حذف کاربران ناشناس: کاربران ناشناس ممکن است به سرور متصل شوند و به طور بالقوه یک خطر امنیتی ایجاد کنند.
  2. غیرفعال کردن ورود ریموت برای کاربر root: محدود کردن دسترسی root به لوکال‌هاست از حملات راه دور جلوگیری می‌کند.
  3. حذف پایگاه‌های داده آزمایشی: پایگاه‌های داده پیش‌فرض مانند test معمولاً غیرضروری هستند و می‌توانند به عنوان نقطه ضعف استفاده شوند.
  4. ایجاد رمز قوی برای root: ابزار شما را مجبور به انتخاب رمز عبور قوی می‌کند.

اجرای ابزار:

sudo mysql_secure_installation

2. رمزنگاری داده‌ها در حین انتقال و ذخیره‌سازی

الف) رمزنگاری در حین انتقال (TLS/SSL)

MySQL/MariaDB امکان پیکربندی اتصالات رمزنگاری‌شده را فراهم می‌کند.

  1. ایجاد گواهینامه‌های SSL/TLS: با استفاده از ابزارهایی مانند OpenSSL، گواهینامه‌ها را تولید کنید.
    openssl genrsa 2048 > server-key.pem
    openssl req -new -x509 -nodes -days 365 -key server-key.pem -out server-cert.pem
    openssl req -newkey rsa:2048 -days 365 -nodes -keyout client-key.pem -out client-cert.pem
  2. پیکربندی فایل my.cnf: تنظیمات زیر را به فایل پیکربندی اضافه کنید:
    openssl genrsa 2048 > server-key.pem
    openssl req -new -x509 -nodes -days 365 -key server-key.pem -out server-cert.pem
    openssl req -newkey rsa:2048 -days 365 -nodes -keyout client-key.pem -out client-cert.pem
  3. فعال‌سازی اتصال رمزنگاری‌شده: کاربران را ملزم به استفاده از SSL کنید:
    CREATE USER 'secure_user'@'%' IDENTIFIED BY 'password' REQUIRE SSL;

ب) رمزنگاری در ذخیره‌سازی (TDE – Transparent Data Encryption)

MariaDB از رمزنگاری شفاف داده‌ها (TDE) پشتیبانی می‌کند. این ویژگی جداول و فایل‌های ذخیره‌سازی را رمزنگاری می‌کند.

  1. فعال‌سازی TDE در MariaDB:
    • اطمینان حاصل کنید که افزونه File Key Management Plugin فعال است.
    • تنظیمات زیر را در فایل my.cnf اضافه کنید:
      [mysqld]
      plugin-load-add = file_key_management
      file_key_management_filename = /path/to/keys.txt
      file_key_management_encryption_algorithm = aes_cbc
  2. ایجاد جدول رمزنگاری‌شده:
    CREATE TABLE encrypted_table (
        id INT PRIMARY KEY,
        data VARCHAR(255)
    ) ENCRYPTED=YES;

3. استفاده از پلاگین‌های امنیتی

الف) پلاگین Password Validation

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

  1. فعال‌سازی پلاگین:
    INSTALL PLUGIN validate_password SONAME 'validate_password.so';
  2. پیکربندی تنظیمات پلاگین:
    • حداقل طول رمز عبور:
      SET GLOBAL validate_password.length = 12;
    • پیچیدگی رمز عبور:
      SET GLOBAL validate_password.policy = MEDIUM;

ب) پلاگین Audit Logging

این پلاگین به شما امکان می‌دهد که تمامی فعالیت‌های پایگاه داده را لاگ کنید.

  1. فعال‌سازی پلاگین در MariaDB:
    INSTALL PLUGIN server_audit SONAME 'server_audit.so';
  2. پیکربندی لاگ‌ها:
    SET GLOBAL server_audit_events = 'CONNECT,QUERY';
    SET GLOBAL server_audit_output_type = 'FILE';
    SET GLOBAL server_audit_file_path = '/var/log/mariadb_audit.log';

4. ایجاد قوانین فایروال داخلی با MySQL Enterprise Edition

MySQL Enterprise Edition دارای قابلیت Firewall Plugin است که امکان تعریف قوانین برای محافظت از سرور در برابر حملات SQL Injection را فراهم می‌کند.

  1. فعال‌سازی فایروال:
    INSTALL PLUGIN mysql_firewall SONAME 'mysql_firewall.so';
  2. اضافه کردن کاربران به فایروال:
    SET mysql_firewall_mode = 'RECORDING';
  3. تنظیم حالت محافظت:
    SET mysql_firewall_mode = 'PROTECTING';

5. نظارت و مدیریت دسترسی‌ها

الف) مشاهده و بررسی کاربران فعال:

با دستور زیر می‌توانید کاربران متصل به سرور را مشاهده کنید:

SHOW PROCESSLIST;

ب) نظارت بر لاگ‌ها:

لاگ‌های general_log، slow_query_log، و error_log را برای شناسایی رفتارهای مشکوک به طور منظم بررسی کنید.


6. ابزارهای خارجی امنیتی

الف) استفاده از ابزار Fail2Ban

Fail2Ban می‌تواند حملات brute force به MySQL/MariaDB را شناسایی و IP‌های مشکوک را مسدود کند.

  1. پیکربندی Fail2Ban:
    [mysqld-auth]
    enabled = true
    port = 3306
    filter = mysqld-auth
    logpath = /var/log/mysql/error.log
    maxretry = 5
    bantime = 3600

ب) استفاده از ابزار MySQLTuner

این ابزار یک اسکریپت Perl است که تنظیمات امنیتی و عملکردی MySQL/MariaDB را تحلیل می‌کند و پیشنهاداتی ارائه می‌دهد:

perl mysqltuner.pl

جمع‌بندی

استفاده از ابزارهای امنیتی داخلی و خارجی MySQL/MariaDB، نظارت مداوم، و تنظیم سیاست‌های امنیتی قوی می‌تواند امنیت پایگاه داده شما را تضمین کند. این اقدامات، به همراه بررسی منظم لاگ‌ها و استفاده از رمزنگاری، باعث کاهش خطر حملات و محافظت بهتر از داده‌های حساس شما خواهد شد.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”شناسایی و جلوگیری از حملات SQL Injection در MySQL / MariaDB” subtitle=”توضیحات کامل”]حملات SQL Injection یکی از متداول‌ترین تهدیدات امنیتی برای پایگاه‌های داده است. در این نوع حمله، مهاجم دستورات SQL مخربی را به یک برنامه وارد می‌کند که منجر به دسترسی غیرمجاز به داده‌ها، تغییر اطلاعات، یا حتی تخریب پایگاه داده می‌شود. در این بخش، ابتدا به بررسی این حمله پرداخته و سپس روش‌های شناسایی و جلوگیری از آن ارائه می‌شود.


1. SQL Injection چیست؟

در حملات SQL Injection، مهاجم ورودی‌هایی به برنامه ارسال می‌کند که به‌جای داده‌های معمولی، شامل دستورات SQL مخرب است. این ورودی‌ها می‌توانند منجر به رفتارهای غیرمنتظره مانند:

  • مشاهده اطلاعات محرمانه (مانند نام‌های کاربری و رمزهای عبور).
  • دستکاری داده‌ها (مانند حذف یا تغییر رکوردها).
  • اجرای دستورات مخرب.
  • دسترسی به فایل‌های سیستم از طریق پایگاه داده.

مثال ساده:

فرض کنید یک برنامه از کوئری زیر برای تأیید کاربر استفاده می‌کند:

SELECT * FROM users WHERE username = '$username' AND password = '$password';

مهاجم می‌تواند ورودی زیر را ارائه دهد:

username = 'admin' -- '
password = 'anything'

این منجر به اجرای کوئری زیر می‌شود:

SELECT * FROM users WHERE username = 'admin' -- ' AND password = 'anything';

علامت -- باعث می‌شود مابقی کوئری نادیده گرفته شود، و مهاجم بدون نیاز به رمز عبور وارد شود.


2. روش‌های شناسایی حملات SQL Injection

الف) بررسی لاگ‌ها

  • لاگ‌های خطا: ورودهای مشکوک در لاگ‌های خطا که شامل ساختارهای نادرست SQL هستند، می‌توانند نشانه حملات باشند.
  • لاگ عمومی (General Log): تمامی کوئری‌ها ثبت می‌شوند و کوئری‌های غیرعادی می‌توانند شناسایی شوند.

ب) تحلیل رفتار کاربران

  • مشاهده تعداد بالای درخواست‌های مشابه با پارامترهای غیرطبیعی.
  • تلاش‌های متعدد برای ورود یا ارسال داده‌های غیرمعمول.

ج) استفاده از ابزارهای امنیتی

  • ابزارهای تحلیل و نظارت مانند WAF (Web Application Firewall) یا Intrusion Detection Systems (IDS) برای شناسایی و متوقف کردن حملات.

3. روش‌های جلوگیری از حملات SQL Injection

الف) استفاده از Prepared Statements (Statements پارامتری)

Prepared Statements بهترین روش برای جلوگیری از حملات SQL Injection است، زیرا به پایگاه داده اجازه می‌دهد تا ورودی‌های کاربر را به‌صورت داده تفسیر کند و نه کد SQL.

مثال:

در PHP:

$stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();

ب) استفاده از ORM‌ها (Object Relational Mappers)

استفاده از ORMهایی مانند SQLAlchemy، Hibernate یا Doctrine، به صورت پیش‌فرض کوئری‌ها را ایمن می‌سازند.

ج) محدود کردن مجوزهای پایگاه داده

  • به کاربران پایگاه داده فقط مجوزهای ضروری را بدهید.
  • از ایجاد کاربرانی با مجوزهای گسترده (مانند root) خودداری کنید.

د) اعتبارسنجی و پاک‌سازی ورودی‌ها

  • ورودی‌های کاربر را اعتبارسنجی کنید تا مطمئن شوید تنها داده‌های مورد انتظار وارد می‌شوند.
  • از توابعی مانند mysqli_real_escape_string در PHP استفاده کنید.
مثال:
$username = mysqli_real_escape_string($conn, $_POST['username']);

ه) محدود کردن خروجی‌های خطا

نمایش پیام‌های خطای دقیق به کاربر می‌تواند به مهاجم در طراحی حمله کمک کند. از پیام‌های خطای کلی استفاده کنید:

"خطا در ورود. لطفاً دوباره تلاش کنید."

و) استفاده از فایروال‌های برنامه وب (WAF)

ابزارهایی مانند ModSecurity می‌توانند حملات SQL Injection را شناسایی و متوقف کنند.

ز) تنظیم سیاست‌های امنیتی

  • تنظیم محدودیت‌هایی مانند حداکثر طول ورودی در فرم‌ها.
  • استفاده از ابزارهایی مانند Fail2Ban برای مسدود کردن IPهایی که فعالیت مشکوک دارند.

4. پیکربندی MySQL / MariaDB برای بهبود امنیت

الف) فعال‌سازی لاگ Slow Query

این لاگ می‌تواند به شناسایی کوئری‌های پیچیده یا مشکوک کمک کند:

[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

ب) استفاده از پلاگین‌های امنیتی

MariaDB و MySQL پلاگین‌های امنیتی مانند Audit Plugin ارائه می‌دهند که می‌توانند فعالیت‌های مشکوک را ثبت کنند:

INSTALL PLUGIN server_audit SONAME 'server_audit.so';
SET GLOBAL server_audit_events = 'CONNECT,QUERY';

ج) محدود کردن تعداد اتصالات همزمان

با تنظیم مقدار max_connections، می‌توانید تعداد اتصالات به پایگاه داده را کنترل کنید.

د) استفاده از MySQL Firewall (در نسخه Enterprise)

این قابلیت به شما امکان می‌دهد که کوئری‌های مجاز را تعریف کنید و دسترسی به کوئری‌های غیرمجاز را مسدود کنید:

SET mysql_firewall_mode = 'RECORDING';

5. نمونه عملی برای جلوگیری از SQL Injection

سناریو:

فرض کنید یک سیستم ورود کاربر دارید. هدف شما جلوگیری از تزریق SQL در هنگام اعتبارسنجی ورودی‌ها است.

کد امن در PHP:
<?php
// اتصال به پایگاه داده
$conn = new mysqli("localhost", "username", "password", "database");

// بررسی خطا
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// آماده‌سازی کوئری
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->bind_param("ss", $username, $password);

// مقداردهی پارامترها
$username = $_POST['username'];
$password = hash('sha256', $_POST['password']); // رمزنگاری رمز عبور

// اجرای کوئری
$stmt->execute();
$result = $stmt->get_result();

if ($result->num_rows > 0) {
    echo "ورود موفقیت‌آمیز";
} else {
    echo "نام کاربری یا رمز عبور اشتباه است";
}

$stmt->close();
$conn->close();
?>

جمع‌بندی

برای محافظت از پایگاه داده در برابر حملات SQL Injection، استفاده از Prepared Statements، پاک‌سازی و اعتبارسنجی ورودی‌ها، محدود کردن مجوزها، و استفاده از ابزارهای نظارتی و امنیتی ضروری است. حملات SQL Injection تنها زمانی می‌توانند موفق باشند که برنامه‌نویسی نادرست و تنظیمات امنیتی ضعیفی وجود داشته باشد. با پیاده‌سازی این اصول، می‌توانید امنیت پایگاه داده خود را تا حد زیادی افزایش دهید.[/cdb_course_lesson][/cdb_course_lessons]

[cdb_course_lessons title=”فصل 6: بهینه‌سازی و عملکرد (Performance Tuning)”][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”ابزارهای داخلی برای بررسی عملکرد در MySQL / MariaDB” subtitle=”توضیحات کامل”]MySQL و MariaDB ابزارهای داخلی متعددی برای بررسی عملکرد پایگاه داده ارائه می‌دهند که به تحلیل و بهینه‌سازی عملکرد کمک می‌کنند. دو ابزار کلیدی در این زمینه عبارتند از Performance Schema و دستور EXPLAIN. در این بخش به معرفی و نحوه استفاده از این ابزارها پرداخته می‌شود.


1. Performance Schema

Performance Schema ابزاری پیشرفته برای پایش و تحلیل عملکرد پایگاه داده است. این ابزار اطلاعات دقیقی درباره رویدادها، زمان‌بندی‌ها، و منابع استفاده شده در MySQL یا MariaDB فراهم می‌کند.

الف) فعال‌سازی Performance Schema

Performance Schema به‌طور پیش‌فرض در اکثر توزیع‌های MySQL / MariaDB فعال است. اگر فعال نیست، می‌توانید آن را در فایل پیکربندی (my.cnf) فعال کنید:

[mysqld]
performance_schema = ON

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

systemctl restart mysql

ب) بررسی وضعیت Performance Schema

می‌توانید بررسی کنید که آیا Performance Schema فعال است یا نه:

SHOW VARIABLES LIKE 'performance_schema';

ج) جداول Performance Schema

اطلاعات عملکرد در جداول داخل پایگاه داده performance_schema ذخیره می‌شود. برخی از جداول مهم:

  • events_statements_summary_by_digest: اطلاعاتی درباره کوئری‌های اجرا شده و عملکرد آن‌ها.
  • events_waits_summary_by_instance: داده‌های مربوط به زمان انتظار.
  • file_summary_by_instance: اطلاعات دسترسی به فایل‌ها.
مثال:

مشاهده کندترین کوئری‌ها:

SELECT 
    DIGEST_TEXT AS query,
    COUNT_STAR AS executions,
    SUM_TIMER_WAIT / 1000000 AS total_time_ms,
    AVG_TIMER_WAIT / 1000000 AS avg_time_ms
FROM 
    performance_schema.events_statements_summary_by_digest
ORDER BY 
    total_time_ms DESC
LIMIT 5;

د) مزایای Performance Schema

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

2. دستور EXPLAIN

دستور EXPLAIN یا EXPLAIN ANALYZE اطلاعاتی درباره نحوه اجرای کوئری SQL ارائه می‌دهد. این اطلاعات شامل جداول مورد استفاده، نوع جستجو، تعداد رکوردها، و شاخص‌های استفاده شده است.

الف) استفاده از دستور EXPLAIN

برای استفاده از EXPLAIN، کافی است کوئری مورد نظر را با این دستور شروع کنید:

EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';

ب) خروجی EXPLAIN

خروجی دستور EXPLAIN شامل ستون‌های زیر است:

  • id: شماره شناسایی عملیات.
  • select_type: نوع کوئری (SIMPLE، SUBQUERY، DERIVED).
  • table: نام جدول.
  • type: نوع اتصال (ALL، INDEX، RANGE، REF، EQ_REF، SYSTEM، CONST).
  • possible_keys: کلیدهای احتمالی که می‌توانند استفاده شوند.
  • key: کلید مورد استفاده.
  • rows: تعداد رکوردهایی که انتظار می‌رود بررسی شوند.
  • Extra: اطلاعات اضافی درباره عملیات (مانند “Using index” یا “Using filesort”).
مثال:
EXPLAIN SELECT * FROM orders WHERE customer_id = 123 AND order_date > '2024-01-01';
خروجی نمونه:
id select_type table type possible_keys key rows Extra
1 SIMPLE orders range customer_id customer_id 100 Using where

ج) بهینه‌سازی بر اساس EXPLAIN

  • استفاده از شاخص‌ها (Indexes): اگر ستون key خالی است، بررسی کنید آیا شاخصی برای ستون فیلتر استفاده شده وجود دارد.
  • کاهش تعداد رکوردها: کوئری را تغییر دهید تا رکوردهای کمتری پردازش شوند.
  • اجتناب از عملیات سنگین: مانند Using temporary یا Using filesort.

د) EXPLAIN ANALYZE

دستور EXPLAIN ANALYZE، علاوه بر برنامه اجرایی کوئری، زمان واقعی اجرای آن را نیز ارائه می‌دهد (در MariaDB 10.1 و بالاتر موجود است):

EXPLAIN ANALYZE SELECT * FROM users WHERE username LIKE 'test%';

3. مقایسه ابزارها

ابزار ویژگی‌ها موارد استفاده
Performance Schema ارائه اطلاعات جامع درباره عملکرد سیستم و منابع استفاده شده شناسایی گلوگاه‌ها و تحلیل عملکرد کلی
EXPLAIN نمایش جزئیات نحوه اجرای کوئری بهینه‌سازی کوئری‌ها و شناسایی مشکلات جستجو
EXPLAIN ANALYZE ارائه جزئیات همراه با زمان‌بندی اجرای واقعی بررسی زمان اجرای واقعی و بهینه‌سازی عمیق‌تر

جمع‌بندی

استفاده از Performance Schema و EXPLAIN ابزارهای کلیدی برای نظارت و بهینه‌سازی عملکرد MySQL / MariaDB هستند. با تحلیل داده‌های ارائه شده توسط این ابزارها، می‌توانید کوئری‌ها را بهینه کنید، گلوگاه‌های عملکرد را شناسایی کرده و منابع سرور را بهتر مدیریت کنید. برای کسب بهترین نتیجه، از این ابزارها به‌صورت ترکیبی استفاده کنید تا به دید کاملی از عملکرد پایگاه داده خود دست یابید.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”بهینه‌سازی کوئری‌ها و استفاده از ایندکس‌ها در MySQL / MariaDB” subtitle=”توضیحات کامل”]بهینه‌سازی کوئری‌ها یکی از اصول کلیدی برای افزایش عملکرد پایگاه داده است. استفاده مناسب از ایندکس‌ها نقش مهمی در سرعت اجرای کوئری‌ها و کاهش بار سرور دارد. در این بخش، به اصول و تکنیک‌های بهینه‌سازی کوئری‌ها و مدیریت ایندکس‌ها در MySQL و MariaDB پرداخته می‌شود.


1. مفاهیم پایه ایندکس‌ها

ایندکس‌ها ساختارهای داده‌ای هستند که جستجوی سریع‌تر در جداول را امکان‌پذیر می‌کنند. آن‌ها معمولاً بر اساس ستون‌های خاصی ایجاد می‌شوند و مانند نمایه‌ای عمل می‌کنند که به پایگاه داده کمک می‌کند داده‌ها را سریع‌تر پیدا کند.

الف) انواع ایندکس‌ها

  • PRIMARY KEY: ایندکس منحصربه‌فرد که به‌طور خودکار برای کلید اصلی جدول ایجاد می‌شود.
  • UNIQUE INDEX: ایندکسی که مقادیر تکراری در آن مجاز نیست.
  • INDEX (NON-UNIQUE): ایندکس معمولی که برای جستجوهای سریع‌تر استفاده می‌شود.
  • FULLTEXT INDEX: برای جستجوی متون در ستون‌های متنی (مانند TEXT یا VARCHAR).
  • SPATIAL INDEX: برای داده‌های جغرافیایی استفاده می‌شود.

ب) تأثیر ایندکس‌ها بر عملکرد

  • مزایا:
    • افزایش سرعت جستجو.
    • بهبود عملکرد در کوئری‌های دارای شروط (WHERE، JOIN، ORDER BY).
  • معایب:
    • افزایش زمان درج و به‌روزرسانی رکوردها (به‌دلیل نیاز به به‌روزرسانی ایندکس‌ها).
    • اشغال فضای اضافی در دیسک.

2. ایجاد و مدیریت ایندکس‌ها

الف) ایجاد ایندکس

برای ایجاد ایندکس می‌توانید از دستورات زیر استفاده کنید:

  • ایجاد ایندکس معمولی:
CREATE INDEX index_name ON table_name(column_name);
  • ایجاد ایندکس منحصربه‌فرد:
CREATE UNIQUE INDEX index_name ON table_name(column_name);
  • افزودن ایندکس هنگام ایجاد جدول:
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255),
    email VARCHAR(255),
    INDEX (username)
);

ب) حذف ایندکس

برای حذف یک ایندکس:

DROP INDEX index_name ON table_name;

ج) مشاهده ایندکس‌های موجود

برای بررسی ایندکس‌های یک جدول:

SHOW INDEX FROM table_name;

3. بهینه‌سازی کوئری‌ها با استفاده از ایندکس‌ها

الف) استفاده از ایندکس در شروط WHERE

ایندکس‌ها به پایگاه داده کمک می‌کنند تا رکوردها را بر اساس شروط موجود در کوئری سریع‌تر پیدا کند.

مثال:
SELECT * FROM orders WHERE customer_id = 123;

اگر برای ستون customer_id ایندکس تعریف شده باشد، این کوئری بسیار سریع‌تر اجرا می‌شود.

ب) بهینه‌سازی JOIN

در کوئری‌های دارای JOIN، مطمئن شوید ستون‌هایی که برای اتصال استفاده می‌شوند، ایندکس دارند.

مثال:
SELECT * 
FROM orders o
JOIN customers c ON o.customer_id = c.id;

برای این کوئری، ستون‌های o.customer_id و c.id باید ایندکس داشته باشند.

ج) استفاده از ایندکس برای مرتب‌سازی (ORDER BY)

اگر ستون مرتب‌سازی دارای ایندکس باشد، اجرای کوئری سریع‌تر خواهد بود.

مثال:
SELECT * FROM products ORDER BY price ASC;

اگر برای ستون price ایندکس تعریف شده باشد، مرتب‌سازی سریع‌تر انجام می‌شود.

د) استفاده از ایندکس در شروط ترکیبی

می‌توانید ایندکس ترکیبی (Composite Index) برای ستون‌های چندگانه تعریف کنید.

مثال:
CREATE INDEX idx_customer_order ON orders(customer_id, order_date);

این ایندکس برای کوئری‌هایی که از هر دو ستون customer_id و order_date در شرط استفاده می‌کنند، کارآمد خواهد بود:

SELECT * FROM orders WHERE customer_id = 123 AND order_date > '2024-01-01';

4. تکنیک‌های بهینه‌سازی کوئری‌ها

الف) استفاده از SELECT‌های محدود

به جای انتخاب تمام ستون‌ها، فقط ستون‌های مورد نیاز را انتخاب کنید:

SELECT id, name FROM users;

ب) استفاده از LIMIT برای کاهش بار سرور

برای کوئری‌هایی که تعداد محدودی رکورد نیاز دارند، از LIMIT استفاده کنید:

SELECT * FROM logs LIMIT 100;

ج) اجتناب از عملیات گران‌قیمت

  • از استفاده از توابع در شرط‌های WHERE اجتناب کنید، زیرا مانع استفاده از ایندکس می‌شود:
    SELECT * FROM users WHERE YEAR(created_at) = 2024; -- کند

    به جای آن:

    SELECT * FROM users WHERE created_at >= '2024-01-01'; -- سریع‌تر

د) جلوگیری از استفاده غیرضروری از DISTINCT

استفاده از DISTINCT تنها در صورت نیاز به حذف داده‌های تکراری مناسب است.


5. ابزارهای تحلیل و بررسی کوئری‌ها

الف) استفاده از EXPLAIN

برای بررسی نحوه اجرای کوئری‌ها و میزان استفاده از ایندکس‌ها، از دستور EXPLAIN استفاده کنید:

EXPLAIN SELECT * FROM orders WHERE customer_id = 123;

ب) استفاده از Performance Schema

برای شناسایی کندترین کوئری‌ها و منابع استفاده شده، از Performance Schema کمک بگیرید:

SELECT * 
FROM performance_schema.events_statements_summary_by_digest 
ORDER BY SUM_TIMER_WAIT DESC 
LIMIT 10;

جمع‌بندی

بهینه‌سازی کوئری‌ها و مدیریت مناسب ایندکس‌ها تأثیر مستقیم بر عملکرد پایگاه داده دارد. ایندکس‌ها جستجو، مرتب‌سازی و عملیات پیچیده را تسریع می‌کنند، اما باید با دقت ایجاد و مدیریت شوند تا هزینه اضافی برای درج و به‌روزرسانی داده‌ها ایجاد نکنند. استفاده از ابزارهایی مانند EXPLAIN و Performance Schema در تحلیل عملکرد کوئری‌ها و ایندکس‌ها بسیار مفید است.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”تنظیمات کش (Query Cache, Table Cache)” subtitle=”توضیحات کامل”]کشینگ (Caching) یکی از روش‌های بهبود عملکرد پایگاه داده است که با ذخیره نتایج پرس‌وجوها و داده‌های متداول، زمان اجرای کوئری‌ها را کاهش می‌دهد. MySQL و MariaDB دو نوع کش مهم ارائه می‌دهند: Query Cache و Table Cache. در این بخش به معرفی، تنظیمات و بهینه‌سازی این دو نوع کش پرداخته می‌شود.


1. Query Cache

الف) مفهوم Query Cache

Query Cache نتایج کوئری‌های SELECT را ذخیره می‌کند تا در صورت ارسال همان کوئری، به جای اجرای مجدد، نتیجه کش‌شده بازگردانده شود. این قابلیت برای کوئری‌های بدون تغییر روی داده‌های ایستا بسیار مفید است.

ب) فعال‌سازی و تنظیم Query Cache

برای استفاده از Query Cache، باید آن را در فایل تنظیمات MySQL/MariaDB فعال کنید. مراحل تنظیم به شرح زیر است:

  1. فایل تنظیمات my.cnf یا my.ini را باز کنید.
  2. مقادیر زیر را اضافه یا تنظیم کنید:
    query_cache_type = ON
    query_cache_size = 64M
    query_cache_limit = 1M
توضیحات:
  • query_cache_type: حالت کش را مشخص می‌کند. مقادیر ممکن:
    • OFF: غیرفعال
    • ON: فعال
    • DEMAND: کش تنها در صورت درخواست صریح استفاده می‌شود.
  • query_cache_size: اندازه کل حافظه اختصاص داده شده به Query Cache.
  • query_cache_limit: حداکثر اندازه نتیجه‌ای که می‌تواند در کش ذخیره شود.

ج) بررسی وضعیت Query Cache

برای بررسی وضعیت فعلی Query Cache از دستور زیر استفاده کنید:

SHOW VARIABLES LIKE 'query_cache%';
SHOW STATUS LIKE 'Qcache%';
خروجی مهم:
  • Qcache_hits: تعداد دفعات استفاده از کش.
  • Qcache_inserts: تعداد نتایج اضافه‌شده به کش.
  • Qcache_lowmem_prunes: تعداد حذف نتایج به دلیل کمبود حافظه.

د) محدودیت‌های Query Cache

  • Query Cache برای جداولی که به‌طور مکرر تغییر می‌کنند، کارآمد نیست.
  • در MySQL 8.0 و نسخه‌های جدیدتر حذف شده است. MariaDB همچنان این قابلیت را ارائه می‌دهد.

2. Table Cache

الف) مفهوم Table Cache

Table Cache تعداد فایل‌های بازشده برای جداول را مدیریت می‌کند. با افزایش این مقدار، از باز و بسته شدن مکرر فایل‌ها جلوگیری می‌شود و عملکرد بهبود می‌یابد.

ب) تنظیم Table Cache

تنظیمات مربوط به Table Cache شامل پارامترهای زیر است:

  1. table_open_cache:
    • حداکثر تعداد جداول بازشده همزمان.
    • مقدار پیش‌فرض معمولاً 200 است.
    • تنظیم این مقدار در فایل my.cnf:
      table_open_cache = 400
  2. table_definition_cache:
    • تعداد تعریف‌های جدول (Table Definitions) که می‌توانند در حافظه نگهداری شوند.
    • مقدار پیش‌فرض به تعداد جداول بستگی دارد.
    • تنظیم:
      table_definition_cache = 200

ج) بررسی وضعیت Table Cache

برای مشاهده وضعیت فعلی Table Cache از دستورات زیر استفاده کنید:

SHOW VARIABLES LIKE 'table%cache';
SHOW STATUS LIKE 'Open%';
خروجی مهم:
  • Open_tables: تعداد جداول بازشده فعلی.
  • Opened_tables: تعداد دفعات باز کردن جدول.
  • table_open_cache: تعداد جداولی که می‌توانند همزمان باز باشند.

د) بهینه‌سازی Table Cache

  • مقدار table_open_cache را بر اساس تعداد جداول و حجم تراکنش‌های سرور تنظیم کنید.
  • اگر مقدار Opened_tables نسبت به درخواست‌ها زیاد است، احتمالاً مقدار table_open_cache کم است.

3. نکات بهینه‌سازی کش

الف) بررسی نیاز به Query Cache

  • اگر پایگاه داده به‌طور مکرر تغییر می‌کند، Query Cache ممکن است منجر به سربار شود.
  • برای داده‌های ایستا و گزارش‌گیری، Query Cache بسیار مفید است.

ب) استفاده از Table Cache

  • در سیستم‌هایی با تعداد زیاد جداول، مقدار بالاتر برای table_open_cache و table_definition_cache توصیه می‌شود.
  • بررسی کنید که مقدار Open_tables کمتر از مقدار table_open_cache باشد.

ج) نظارت بر عملکرد

  • از ابزارهای نظارتی مانند Performance Schema یا SHOW STATUS برای بررسی و تنظیم کش استفاده کنید.
  • گزارش‌های Qcache_lowmem_prunes یا Opened_tables را تحلیل کنید و تنظیمات را بر اساس آن تغییر دهید.

جمع‌بندی

تنظیمات کش (Query Cache و Table Cache) نقش مهمی در بهبود عملکرد پایگاه داده دارند. با تنظیم مناسب Query Cache، می‌توان زمان اجرای کوئری‌های تکراری را کاهش داد. همچنین با مدیریت Table Cache، سربار باز و بسته کردن فایل‌ها کاهش می‌یابد. توجه به نیازمندی‌های خاص سرور و پایش عملکرد سیستم، کلید بهینه‌سازی این تنظیمات است.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”مانیتورینگ و بهینه‌سازی زمان پاسخ‌دهی در MySQL/MariaDB” subtitle=”توضیحات کامل”]زمان پاسخ‌دهی به کوئری‌ها یکی از مهم‌ترین عوامل در عملکرد پایگاه داده‌ها است. برای اطمینان از بهینه بودن عملکرد پایگاه داده، نیاز است که ابزارها و تکنیک‌هایی برای مانیتورینگ، تجزیه‌وتحلیل، و بهینه‌سازی زمان پاسخ‌دهی استفاده شود. در ادامه، مراحل و ابزارهای کلیدی در این فرآیند شرح داده می‌شود.


1. مانیتورینگ زمان پاسخ‌دهی

الف) استفاده از ابزارهای داخلی

MySQL و MariaDB ابزارهایی برای مانیتورینگ زمان پاسخ‌دهی ارائه می‌دهند:

  • Performance Schema: مانیتورینگ دقیق عملکرد و شناسایی کوئری‌های کند.
  • Slow Query Log: ثبت کوئری‌هایی که بیش از زمان مشخصی اجرا می‌شوند.
فعال‌سازی Slow Query Log
  1. فایل تنظیمات my.cnf یا my.ini را باز کنید.
  2. تنظیمات زیر را اضافه کنید:
    slow_query_log = ON
    slow_query_log_file = /var/log/mysql/slow.log
    long_query_time = 1
    log_queries_not_using_indexes = ON
    • long_query_time: حداقل زمان اجرای کوئری (به ثانیه) برای ثبت در لاگ.
    • log_queries_not_using_indexes: ثبت کوئری‌هایی که از ایندکس استفاده نمی‌کنند.
  3. سرویس MySQL/MariaDB را ری‌استارت کنید:
    systemctl restart mysql
مشاهده کوئری‌های کند

پس از فعال‌سازی، می‌توانید لاگ کوئری‌های کند را با دستور زیر مشاهده کنید:

cat /var/log/mysql/slow.log

ب) استفاده از EXPLAIN

دستور EXPLAIN نحوه اجرای کوئری را نمایش می‌دهد و کمک می‌کند مشکلات عملکردی را شناسایی کنید:

EXPLAIN SELECT * FROM users WHERE email = 'example@example.com';
خروجی EXPLAIN
  • type: نوع اتصال جدول (ALL، index، range، …).
  • possible_keys: ایندکس‌های قابل استفاده.
  • key: ایندکس استفاده‌شده.
  • rows: تعداد ردیف‌هایی که بررسی می‌شوند.

2. بهینه‌سازی زمان پاسخ‌دهی

الف) استفاده از ایندکس‌ها

ایندکس‌ها نقش حیاتی در بهبود زمان پاسخ‌دهی دارند. نکات زیر را رعایت کنید:

  1. ایندکس‌های مناسب ایجاد کنید:
    CREATE INDEX idx_email ON users(email);
  2. ایندکس‌ها را بازبینی کنید:
    • دستور SHOW INDEX برای مشاهده ایندکس‌های جداول:
      SHOW INDEX FROM users;
  3. استفاده از ایندکس را بررسی کنید:
    • از EXPLAIN برای بررسی استفاده از ایندکس بهره ببرید.

ب) بهینه‌سازی کوئری‌ها

  1. کوئری‌ها را ساده کنید:
    • از کوئری‌های پیچیده با تعداد زیادی اتصال (JOIN) و زیرکوئری (Subquery) اجتناب کنید.
    • از Common Table Expressions (CTE) در MariaDB 10.2+ استفاده کنید.
  2. استفاده از LIMIT:
    • برای کاهش تعداد ردیف‌های بازگردانده‌شده:
      SELECT * FROM users LIMIT 10;

ج) تنظیمات حافظه و کش

  1. Query Cache:
    • استفاده از کش برای ذخیره نتایج کوئری‌های تکراری.
    • تنظیمات کش در فایل my.cnf:
      query_cache_size = 64M
      query_cache_type = ON
  2. Buffer Pool (InnoDB):
    • اندازه حافظه اختصاص داده‌شده به داده‌ها و ایندکس‌ها.
    • تنظیمات نمونه:
      innodb_buffer_pool_size = 2G

د) بهینه‌سازی جداول

  1. تحلیل و بهینه‌سازی جداول:
    • استفاده از دستور ANALYZE TABLE برای به‌روزرسانی آمار جداول:
      ANALYZE TABLE users;
    • بهینه‌سازی فضای ذخیره‌سازی:
      OPTIMIZE TABLE users;
  2. انتخاب موتور ذخیره‌سازی مناسب:
    • برای جداول با تراکنش‌های زیاد، از InnoDB استفاده کنید.
    • برای داده‌های ایستا یا جداول فقط خواندنی، MyISAM ممکن است مناسب‌تر باشد.

3. ابزارهای خارجی برای مانیتورینگ

الف) MySQL Workbench

  • ابزار گرافیکی رسمی برای مانیتورینگ و بهینه‌سازی.
  • امکان تجزیه‌وتحلیل کوئری‌ها با Query Profiler.

ب) Percona Toolkit

  • مجموعه‌ای از ابزارهای پیشرفته برای مانیتورینگ و بهینه‌سازی:
    • pt-query-digest: تحلیل لاگ کوئری‌های کند.
    • pt-mysql-summary: ارائه اطلاعات خلاصه از تنظیمات و عملکرد.

ج) ابزارهای مانیتورینگ عمومی

  • Zabbix یا Prometheus برای نظارت بر عملکرد سرور و پایگاه داده.
  • Grafana برای نمایش داده‌ها به‌صورت داشبورد.

جمع‌بندی

مانیتورینگ و بهینه‌سازی زمان پاسخ‌دهی نیازمند ترکیبی از ابزارهای داخلی و خارجی است. فعال‌سازی لاگ‌های کند، استفاده از EXPLAIN، و بهینه‌سازی ایندکس‌ها و کوئری‌ها از مراحل اساسی هستند. با تنظیمات مناسب حافظه و کش، و بهره‌گیری از ابزارهای پیشرفته مانند Percona Toolkit و Zabbix، می‌توان عملکرد پایگاه داده را بهینه و زمان پاسخ‌دهی را کاهش داد.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”پیکربندی Replication برای بهبود عملکرد” subtitle=”توضیحات کامل”]Replication یا بازتاب داده‌ها، روشی است که به کمک آن داده‌ها به طور خودکار از یک سرور به سرور دیگر کپی می‌شوند. این تکنیک برای بهبود عملکرد و قابلیت اطمینان سیستم‌های پایگاه داده بسیار مفید است، زیرا باعث توزیع بار کاری و افزایش دسترسی‌پذیری می‌شود.

در MySQL و MariaDB، دو نوع اصلی Replication وجود دارد:

  1. Master-Slave Replication: در این نوع، داده‌ها از سرور اصلی (Master) به سرورهای فرعی (Slave) کپی می‌شوند.
  2. Master-Master Replication: در این نوع، داده‌ها به صورت دوطرفه بین سرورها کپی می‌شوند.

در ادامه، به بررسی تنظیمات و پیکربندی Replication خواهیم پرداخت.


1. Master-Slave Replication

الف) پیکربندی سرور Master

  1. فعال کردن Replication در سرور Master:
    • تنظیمات my.cnf یا my.ini را برای سرور Master تغییر دهید:
      server-id = 1
      log-bin = mysql-bin
      binlog-format = ROW
    • server-id: عدد یکتایی که نشان‌دهنده این سرور در مجموعه Replication است.
    • log-bin: نام فایل‌های لاگ که برای Replication استفاده می‌شود.
    • binlog-format: فرمت لاگ‌ها (ROW برای بهترین عملکرد).
  2. اعمال تغییرات و ری‌استارت MySQL/MariaDB:
    systemctl restart mysql
  3. تنظیم لاگ‌ها برای Replication:
    • تنظیمات binlog-do-db برای تعیین پایگاه داده‌هایی که باید Replication شوند:
      binlog-do-db = my_database
  4. ایجاد کاربر Replication در سرور Master:
    • با دستور زیر کاربر Replication ایجاد کنید:
      GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replication_user'@'slave_host' IDENTIFIED BY 'password';
      FLUSH PRIVILEGES;

ب) پیکربندی سرور Slave

  1. تنظیمات سرور Slave:
    • در my.cnf یا my.ini سرور Slave، تنظیمات زیر را اعمال کنید:
      server-id = 2
      master-host = master_host
      master-user = replication_user
      master-password = 'password'
      master-port = 3306
      master-connect-retry = 60
    • server-id: عدد یکتایی برای سرور Slave.
    • master-host: آدرس IP یا نام دامنه سرور Master.
    • master-user: نام کاربری که برای اتصال به سرور Master استفاده می‌شود.
    • master-password: رمز عبور کاربر Replication.
    • master-port: پورتی که سرور Master روی آن گوش می‌دهد.
    • master-connect-retry: تعداد دفعات تلاش برای اتصال به سرور Master در صورت قطع ارتباط.
  2. ری‌استارت MySQL/MariaDB در سرور Slave:
    systemctl restart mysql
  3. Start Slave در سرور Slave:
    START SLAVE;
    SHOW SLAVE STATUS\G

2. Master-Master Replication

در این نوع Replication، داده‌ها به‌طور همزمان از هر دو سرور به یکدیگر کپی می‌شوند.

الف) پیکربندی سرور Master 1

  1. فعال کردن Replication:
    • تنظیمات my.cnf یا my.ini:
      server-id = 1
      log-bin = mysql-bin
      binlog-format = ROW
  2. ایجاد کاربر Replication:
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replication_user'@'slave_host' IDENTIFIED BY 'password';
    FLUSH PRIVILEGES;

ب) پیکربندی سرور Master 2

  1. تنظیمات my.cnf یا my.ini:
    server-id = 2
    log-bin = mysql-bin
    binlog-format = ROW
  2. ایجاد کاربر مشابه برای Replication:
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replication_user'@'slave_host' IDENTIFIED BY 'password';
    FLUSH PRIVILEGES;

ج) تنظیم Replication از Master 1 به Master 2

  1. پیکربندی سرور Slave برای Master 1 در Master 2:
    server-id = 2
    master-host = master1_host
    master-user = replication_user
    master-password = 'password'
    master-port = 3306
  2. پیکربندی سرور Slave برای Master 2 در Master 1:
    server-id = 1
    master-host = master2_host
    master-user = replication_user
    master-password = 'password'
    master-port = 3306
  3. استارت Replication از هر دو سمت:
    START SLAVE;
    SHOW SLAVE STATUS\G

جمع‌بندی

پیکربندی Replication به شما امکان می‌دهد بار کاری را توزیع کرده و قابلیت اطمینان سیستم را افزایش دهید. در Master-Slave Replication داده‌ها از سرور Master به Slave منتقل می‌شوند، در حالی که در Master-Master Replication هر دو سرور داده‌ها را به اشتراک می‌گذارند. هر دو نوع بهینه‌سازی‌های مهمی در بار کاری ایجاد می‌کنند، به خصوص برای مقیاس‌پذیری و افزایش در دسترس‌پذیری پایگاه داده.[/cdb_course_lesson][/cdb_course_lessons]

[cdb_course_lessons title=”فصل 7: مدیریت Replication و Clustering”][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”راه‌اندازی Replication” subtitle=”توضیحات کامل”]Replication یکی از راه‌های مهم برای افزایش قابلیت اطمینان، دسترسی‌پذیری و بارکاری در پایگاه داده‌های MySQL و MariaDB است. در این بخش به بررسی Master-Slave Replication و Master-Master Replication خواهیم پرداخت.


1. Master-Slave Replication

الف) تنظیمات Master (پایگاه داده اولیه):

  1. تنظیمات my.cnf یا my.ini در سرور Master:
    server-id = 1
    log-bin = mysql-bin
    binlog-format = ROW
    • server-id: عدد یکتایی که برای شناسایی سرور استفاده می‌شود.
    • log-bin: نام فایل‌های لاگ که برای Replication ذخیره می‌شوند.
    • binlog-format: نوع لاگ‌ها (ROW بهترین عملکرد را دارد).
  2. ایجاد کاربر Replication در سرور Master:
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replication_user'@'slave_host' IDENTIFIED BY 'password';
    FLUSH PRIVILEGES;
  3. Restart MySQL در سرور Master:
    systemctl restart mysql

ب) تنظیمات Slave (پایگاه داده اضافی که داده‌ها را از Master می‌گیرد):

  1. تنظیمات my.cnf یا my.ini در سرور Slave:
    server-id = 2
    master-host = master_host
    master-user = replication_user
    master-password = 'password'
    master-port = 3306
    master-connect-retry = 60
    • server-id: عدد یکتایی که برای شناسایی سرور Slave استفاده می‌شود.
    • master-host: آدرس IP یا نام دامنه سرور Master.
    • master-user: نام کاربری که برای اتصال به سرور Master استفاده می‌شود.
    • master-password: رمز عبور کاربر Replication.
    • master-port: پورتی که سرور Master گوش می‌دهد.
    • master-connect-retry: تعداد دفعات تلاش برای اتصال به سرور Master در صورت قطع ارتباط.
  2. Restart MySQL در سرور Slave:
    systemctl restart mysql
  3. Start Slave:
    START SLAVE;
    SHOW SLAVE STATUS\G

2. Master-Master Replication

الف) تنظیمات Master 1:

  1. تنظیمات my.cnf یا my.ini در سرور Master 1:
    server-id = 1
    log-bin = mysql-bin
    binlog-format = ROW
  2. ایجاد کاربر Replication در سرور Master 1:
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replication_user'@'slave_host' IDENTIFIED BY 'password';
    FLUSH PRIVILEGES;

ب) تنظیمات Master 2:

  1. تنظیمات my.cnf یا my.ini در سرور Master 2:
    server-id = 2
    log-bin = mysql-bin
    binlog-format = ROW
  2. ایجاد کاربر مشابه برای Replication در سرور Master 2:
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replication_user'@'slave_host' IDENTIFIED BY 'password';
    FLUSH PRIVILEGES;

ج) تنظیم Replication از Master 1 به Master 2:

  1. تنظیمات Slave روی Master 2:
    server-id = 2
    master-host = master1_host
    master-user = replication_user
    master-password = 'password'
    master-port = 3306
  2. تنظیمات Slave روی Master 1:
    server-id = 1
    master-host = master2_host
    master-user = replication_user
    master-password = 'password'
    master-port = 3306
  3. Start Replication در هر دو Master:
    START SLAVE;
    SHOW SLAVE STATUS\G

جمع‌بندی

راه‌اندازی Replication به شما امکان توزیع بار کاری و افزایش دسترسی‌پذیری را می‌دهد. در Master-Slave Replication داده‌ها از سرور Master به سرور Slave منتقل می‌شوند، در حالی که در Master-Master Replication هر دو سرور داده‌ها را به اشتراک می‌گذارند.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”بررسی مفاهیم GTID (Global Transaction ID)” subtitle=”توضیحات کامل”]

GTID چیست؟

GTID (Global Transaction ID) یک مکانیسم برای مدیریت و شناسایی تراکنش‌ها در پایگاه داده‌های MySQL و MariaDB است. این مفهوم برای ساده‌سازی و مدیریت Replication و تضمین توالی صحیح تراکنش‌ها بسیار مؤثر است.

مزایای GTID:

  1. حذف نیاز به ترتیب‌دادن دستی: با استفاده از GTID، دیگر نیازی به تنظیم دستی ترتیب تراکنش‌ها (binlog-pos) نیست.
  2. مقاوم در برابر شکست: GTID باعث افزایش انعطاف‌پذیری در مدیریت Replication می‌شود و در صورت بروز خطا، بازیابی ساده‌تر خواهد بود.
  3. احراز هویت جهانی: هر تراکنش یک شناسه منحصربه‌فرد جهانی دارد که می‌تواند برای شناسایی و پیگیری استفاده شود.

نحوه عملکرد GTID:

  1. ایجاد GTID در Master:
    • برای فعال‌سازی GTID در سرور Master، باید تنظیمات gtid-mode و enforce-gtid-consistency در my.cnf فعال شوند.
    • gtid-mode: حالت GTID را فعال می‌کند.
    • enforce-gtid-consistency: هر تراکنش را مجبور می‌کند تا از GTID استفاده کند.

    تنظیمات در my.cnf:

    gtid-mode = ON
    enforce-gtid-consistency = 1
  2. ایجاد کاربر Replication با GTID:
    GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'slave_host' IDENTIFIED BY 'password' WITH  GTID 'auto';
  3. نمایش GTID‌ها در Master:
    SHOW MASTER STATUS\G
  4. Slave Configuration:
    • تنظیمات GTID در سرور Slave:
    gtid-mode = ON
    enforce-gtid-consistency = 1
    master-info-repository = TABLE
    relay-log-info-repository = TABLE
  5. Start Slave:
    START SLAVE;
    SHOW SLAVE STATUS\G

جمع‌بندی

GTID (Global Transaction ID) در Replication به شما کمک می‌کند تا مدیریت تراکنش‌ها را ساده‌تر و مطمئن‌تر کنید. این مکانیزم از تراکنش‌ها با شناسه منحصربه‌فرد جهانی پشتیبانی می‌کند و عملیات Replication را پایدار و قابل اطمینان‌تر می‌سازد.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”استفاده از Galera Cluster در MariaDB” subtitle=”توضیحات کامل”]

Galera Cluster چیست؟

Galera Cluster یک فناوری کلاسترینگ پایگاه داده است که برای پایگاه داده‌های MySQL و MariaDB استفاده می‌شود. این تکنولوژی امکان همگام‌سازی و به‌روزرسانی مداوم داده‌ها بین نودها (Nodes) را فراهم می‌کند، به طوری که پایگاه داده به‌صورت کاملاً یکپارچه عمل کند. با استفاده از Galera Cluster، می‌توان قابلیت اطمینان، مقیاس‌پذیری و در دسترس‌پذیری بالا را برای پایگاه داده فراهم کرد.


مزایای استفاده از Galera Cluster:

  1. مقیاس‌پذیری افقی: امکان اضافه کردن نودهای جدید به کلاستر برای افزایش ظرفیت و کارایی.
  2. مقاومت در برابر خطا: در صورت خرابی نودها، سایر نودها به‌طور خودکار به کار ادامه می‌دهند.
  3. همگام‌سازی داده‌ها: داده‌ها به صورت خودکار و همزمان در بین نودها به‌روز می‌شوند.
  4. حفاظت از داده‌ها: تضمین یکپارچگی داده‌ها با استفاده از الگوریتم‌های اتفاق نظر.

پیش‌نیازها برای راه‌اندازی Galera Cluster:

  1. سیستم‌عامل‌های پشتیبانی شده: Galera Cluster بیشتر روی توزیع‌های لینوکس مانند CentOS، RHEL، و Ubuntu کار می‌کند.
  2. MariaDB نسخه ۱۰.۱ یا بالاتر: Galera Cluster با MariaDB نسخه ۱۰.۱ و بالاتر سازگار است.
  3. نصب و راه‌اندازی MariaDB:
    • نصب MariaDB:
      yum install -y mariadb mariadb-server
      systemctl start mariadb
      systemctl enable mariadb
  4. پیکربندی MariaDB برای Galera Cluster:
    • نصب بسته‌های لازم برای Galera:
      yum install -y mariadb-galera-server
    • تنظیمات my.cnf:
      [galera]
      wsrep_provider = /usr/lib/libgalera_smm.so
      wsrep_cluster_address = "gcomm://"
      wsrep_slave_threads = 4
      wsrep_sst_method = rsync
      wsrep_node_name = "node1"
      wsrep_node_address = "192.168.1.10"
      wsrep_cluster_name = "my_cluster"
    • در این تنظیمات:
      • wsrep_provider مسیر به کتابخانه Galera را مشخص می‌کند.
      • wsrep_cluster_address آدرس کلاستر را تنظیم می‌کند.
      • wsrep_node_name و wsrep_node_address نام و آدرس نود فعلی را مشخص می‌کنند.
      • wsrep_cluster_name نام کلاستر را تعیین می‌کند.

مراحل نصب و راه‌اندازی کلاستر:

  1. نصب MariaDB روی نودهای دیگر:
    • روی هر نود دیگر نصب MariaDB و تنظیمات مشابه انجام دهید.
  2. راه‌اندازی Galera Cluster:
    • روی اولین نود، کلاستر را راه‌اندازی کنید:
      systemctl start mariadb
      mysql_secure_installation
    • راه‌اندازی سایر نودها و اضافه کردن به کلاستر:
      systemctl start mariadb
      systemctl enable mariadb
      mysql -u root -e "SET GLOBAL wsrep_cluster_address='gcomm://';"
      mysql -u root -e "START WSREP;"
  3. کنترل وضعیت کلاستر:
    ysql -u root -e "SHOW STATUS LIKE 'wsrep%';"

جمع‌بندی:

Galera Cluster به MariaDB مقیاس‌پذیری و قابلیت اطمینان بالا می‌دهد و امکان افزایش ظرفیت و مدیریت خطاهای پایگاه داده را فراهم می‌کند. با تنظیم و استفاده صحیح از آن، می‌توانید بهبود عملکرد و در دسترس‌پذیری پایگاه داده‌های خود را تجربه کنید.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”سناریوهای رفع خطا در Replication” subtitle=”توضیحات کامل”]Replication در MariaDB/MySQL ابزاری بسیار مفید برای بهبود در دسترس‌پذیری و مقیاس‌پذیری پایگاه داده‌هاست، اما می‌تواند با مشکلاتی مواجه شود. در این بخش، برخی از رایج‌ترین خطاها و سناریوهای رفع آن‌ها را بررسی خواهیم کرد.


1. خطای Master-Slave Replication Failure

این خطا زمانی رخ می‌دهد که Slave قادر به اتصال به Master نباشد یا داده‌ها به درستی از Master به Slave منتقل نشوند.

راهکار رفع خطا:

  • بررسی تنظیمات اتصال در فایل my.cnf:
    [mysqld]
    server_id = 1
    log_bin = /path/to/log/bin

    روی Master:

    [mysqld]
    server_id = 2
    relay_log = /path/to/relay/log

    روی Slave.

  • مطمئن شوید که Master در دسترس است و پورت ۳۳۰۶ در Master باز باشد.
  • استفاده از فرمان SHOW SLAVE STATUS در Slave برای بررسی خطاها.

2. خطای Out-of-Sync Data in Replication

این مشکل زمانی ایجاد می‌شود که داده‌ها در Master و Slave با هم همگام نباشند.

راهکار رفع خطا:

  • اجرا RESET MASTER روی Master:
    RESET MASTER;
  • اجرای RESET SLAVE روی Slave:
    RESET SLAVE;
  • بررسی تنظیمات و مطمئن شوید که Slave همزمان با Master داده‌ها را دریافت می‌کند.
  • FLUSH TABLES WITH READ LOCK روی Master اجرا کنید تا داده‌ها به‌روز شوند.

3. خطای Network Issues یا بسته شدن اتصال

اتصال ضعیف شبکه یا قطعی در ارتباط می‌تواند باعث بروز مشکلات در Replication شود.

راهکار رفع خطا:

  • بررسی پورت‌ها و اطمینان از باز بودن آن‌ها روی Master و Slave.
  • بررسی تنظیمات wsrep_cluster_address برای اطمینان از اتصال صحیح بین نودها.
  • بررسی تایم‌اوت‌های شبکه و تنظیمات max_connections و net_read_timeout و net_write_timeout در فایل my.cnf:
    [mysqld]
    max_connections = 500
    net_read_timeout = 30
    net_write_timeout = 30

4. خطای Duplicate Entry

اینگونه خطا معمولاً زمانی رخ می‌دهد که یک رکورد قبلاً وارد شده باشد و عملیات درخواستی برای آن تکرار شود.

راهکار رفع خطا:

  • بررسی لاگ‌ها با استفاده از SHOW SLAVE STATUS برای شناسایی تکرار عملیات.
  • استفاده از دستور REPLACE INTO یا INSERT IGNORE برای جلوگیری از تکرار.

5. خطای Lost Connection to Master

این مشکل زمانی رخ می‌دهد که Slave نتواند با Master ارتباط برقرار کند و اتصال به طور موقت قطع شود.

راهکار رفع خطا:

  • بررسی لاگ‌های Master و Slave برای پیدا کردن دلیل قطع اتصال.
  • بررسی و بهینه‌سازی تنظیمات gtid_mode و enforce-gtid-consistency:
    SET GLOBAL gtid_mode = ON;
    SET GLOBAL enforce-gtid-consistency = 1;

6. خطای Slave Lag

زمانی که Slave داده‌های قدیمی‌تری از Master دریافت می‌کند.

راهکار رفع خطا:

  • بررسی تنظیمات Replication و متغیرهای relay_log و slave_parallel_workers.
  • تنظیم تعداد نودهای Slave و بهینه‌سازی تعداد درخواست‌ها برای کاهش تأخیر.

7. خطای Schema Mismatch

این مشکل زمانی به وجود می‌آید که ساختار داده‌ها در Master و Slave متفاوت باشد.

راهکار رفع خطا:

  • بررسی لاگ‌های Replication و استفاده از SHOW TABLE STATUS برای مقایسه ساختار جداول.
  • استفاده از اسکریپت‌های mysqldump --all-databases --routines --triggers --events برای اطمینان از همگام بودن جداول.

جمع‌بندی:

رفع مشکلات Replication نیازمند بررسی دقیق تنظیمات، لاگ‌ها و ارتباطات شبکه‌ای است. درک دقیق از تنظیمات، استفاده از دستور SHOW SLAVE STATUS و ابزارهای نظارتی می‌تواند به شناسایی و رفع خطاهای رایج کمک کند.[/cdb_course_lesson][/cdb_course_lessons]

[cdb_course_lessons title=”فصل 8: پشتیبان‌گیری و بازیابی (Backup & Restore)”][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”روش‌های پشتیبان‌گیری در MySQL/MariaDB” subtitle=”توضیحات کامل”]پشتیبان‌گیری از داده‌ها یکی از اقدامات حیاتی برای حفظ سلامت و دسترسی به داده‌ها در سیستم‌های پایگاه داده است. در MySQL/MariaDB، دو روش اصلی پشتیبان‌گیری وجود دارد:


1. پشتیبان‌گیری به روش Logical (mysqldump)

پشتیبان‌گیری Logical شامل استخراج داده‌ها به صورت دستورات SQL است. این روش بیشتر برای زمانی مناسب است که ساختار داده‌ها و مقادیر جداول نیاز به بازسازی داشته باشند.

مراحل پشتیبان‌گیری با mysqldump:

  • استفاده از دستور mysqldump برای گرفتن بکاپ از کل پایگاه داده یا جداول خاص:
    mysqldump -u username -p --all-databases > backup.sql

    یا برای یک پایگاه داده خاص:

    mysqldump -u username -p database_name > backup.sql
  • بازیابی داده‌ها با استفاده از mysql:
    mysql -u username -p database_name < backup.sql

مزایا:

  • مستقل از موتور ذخیره‌سازی (InnoDB/MyISAM) است.
  • بکاپ گرفتن و بازگرداندن داده‌ها ساده‌تر است.
  • مناسب برای بازیابی در محیط‌های مختلف (همگام‌سازی جداول و داده‌ها).

معایب:

  • زمان‌بر برای پایگاه داده‌های حجیم به دلیل حجم زیاد داده‌ها و جداول.
  • امکان از دست رفتن عملکرد و کوئری‌های پیچیده هنگام بازیابی.

2. پشتیبان‌گیری به روش Physical (Percona XtraBackup)

پشتیبان‌گیری Physical شامل گرفتن یک کپی از ساختار ذخیره‌سازی و فایل‌های پایگاه داده است. این روش برای پشتیبان‌گیری از پایگاه داده‌های بزرگ و نیاز به بازیابی سریع بسیار مؤثر است.

مراحل پشتیبان‌گیری با Percona XtraBackup:

  • نصب Percona XtraBackup:
    sudo yum install percona-xtrabackup
  • گرفتن بکاپ:
    innobackupex --user=username --password=yourpassword /backup/directory/
  • بازیابی داده‌ها:
    innobackupex --apply-log --user=username --password=yourpassword /backup/directory/
    cp -a /backup/directory /data/

مزایا:

  • بسیار کارآمد برای پایگاه داده‌های حجیم.
  • سرعت بالا در تهیه و بازیابی.
  • از وضعیت فعلی داده‌ها محافظت می‌کند و عملکرد بهتری دارد.

معایب:

  • نیاز به ابزار خارجی (Percona XtraBackup).
  • پیچیدگی بیشتر نسبت به mysqldump در پیکربندی.

جمع‌بندی:

  • mysqldump برای بکاپ‌گیری ساده و سریع از جداول و پایگاه داده‌های کوچکتر مناسب است.
  • Percona XtraBackup برای پایگاه داده‌های بزرگ با نیاز به عملکرد بالا و بازیابی سریع کاربرد دارد.
    هر دو روش بسته به نیازهای خاص پروژه باید انتخاب شوند.

[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”بازیابی از پشتیبان‌ها در MySQL/MariaDB” subtitle=”توضیحات کامل”]

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


1. بازیابی از بکاپ با mysqldump:

  • ابتدا فایل پشتیبان تهیه شده با mysqldump را وارد کنید:
    mysql -u username -p database_name < backup.sql
  • در این دستور:
    • username نام کاربری که با آن به دیتابیس متصل می‌شوید.
    • database_name نام پایگاه داده‌ای که می‌خواهید پشتیبان‌گیری شده را بازیابی کنید.
    • backup.sql فایل پشتیبان گرفته شده با mysqldump.

نکته:
اگر پایگاه داده‌ای قبلاً موجود است، ممکن است خطاهای تکراری وجود داشته باشد. در این صورت می‌توانید از گزینه‌های --force یا --ignore-table برای رفع این مشکل استفاده کنید.


2. بازیابی از بکاپ با Percona XtraBackup:

  • ابتدا فایل بکاپ تهیه شده با Percona XtraBackup را با استفاده از دستور زیر وارد کنید:
    innobackupex --copy-back /backup/directory/
  • بعد از اتمام عملیات، سرویس MySQL را ری‌استارت کنید:
    systemctl restart mysql

نکته:
ممکن است نیاز به تنظیمات اضافی مانند تنظیم فایل‌های کانفیگ (my.cnf) برای مسیرهای جدید داشته باشید.


3. بازیابی از بکاپ‌های دیگر:

  • بازیابی از Logical Dump (mysqldump): در این روش، داده‌ها از نسخه‌ای که به عنوان mysqldump ذخیره شده است، به‌طور کامل بازیابی می‌شوند.
    mysql -u username -p database_name < /path/to/backup.sql
  • بازیابی از Physical Dump (Percona XtraBackup): برای بازیابی کامل داده‌ها و تنظیمات مربوط به موتور ذخیره‌سازی:
    innobackupex --apply-log /path/to/backup/directory/
    cp -a /path/to/backup/directory/ /data/
    systemctl restart mysql

جمع‌بندی:

  • برای بازیابی داده‌ها، بستگی به روش بکاپ‌گیری (Logical یا Physical) دارد.
  • در بازیابی از mysqldump، ممکن است نیاز به دستورات اضافی برای رفع خطاهای ممکن داشته باشید.
  • Percona XtraBackup معمولاً برای داده‌های حجیم با زمان بازیابی سریع‌تر توصیه می‌شود.

[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”پشتیبان‌گیری افزایشی (Incremental Backup)” subtitle=”توضیحات کامل”]پشتیبان‌گیری افزایشی به روشی اشاره دارد که فقط تغییرات جدید و داده‌های تغییر یافته را نسبت به آخرین بکاپ کامل (Full Backup) ذخیره می‌کند. این روش مزایای بسیاری از جمله صرفه‌جویی در فضای ذخیره‌سازی و زمان دارد، زیرا نیازی به ذخیره کل پایگاه داده نیست.


1. مزایای پشتیبان‌گیری افزایشی:

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

2. پیکربندی و اجرای پشتیبان‌گیری افزایشی با Percona XtraBackup:

  • برای پشتیبان‌گیری افزایشی با Percona XtraBackup، ابتدا بکاپ کامل (Full Backup) تهیه کنید:
    innobackupex --user=root --password=your_password --host=localhost /backup/full-backup/
  • سپس، بکاپ افزایشی را اجرا کنید:
    innobackupex --user=root --password=your_password --host=localhost --incremental --incremental-basedir=/backup/full-backup/ /backup/incremental-backup/
  • هنگام بازیابی، از بکاپ کامل و افزایشی استفاده کنید:
    innobackupex --apply-log --incremental-dir=/backup/incremental-backup/ /data/
    systemctl restart mysql

3. پشتیبان‌گیری افزایشی با mysqldump:

  • ابتدا بکاپ کامل بگیرید:
    mysqldump -u root -p --all-databases > full-backup.sql
  • برای بکاپ افزایشی:
    mysqldump -u root -p --all-databases --single-transaction --lock-tables=false --flush-logs > incremental-backup.sql
  • بازیابی داده‌ها:
    mysql -u root -p < full-backup.sql
    mysql -u root -p < incremental-backup.sql

4. برنامه‌ریزی و زمان‌بندی بکاپ افزایشی با Cron:

برای اتوماسیون و زمان‌بندی بکاپ افزایشی می‌توانید از Cron استفاده کنید:

  • فایل Cron را ویرایش کنید:
    crontab -e
  • مثالی برای اجرای بکاپ افزایشی هر شب:
    0 2 * * * /usr/bin/innobackupex --user=root --password=your_password --host=localhost --incremental --incremental-basedir=/backup/full-backup/ /backup/incremental-backup/

جمع‌بندی:

  • پشتیبان‌گیری افزایشی با Percona XtraBackup یا mysqldump به مدیریت بهینه فضای ذخیره‌سازی کمک می‌کند.
  • برای بازیابی، باید آخرین بکاپ کامل و بکاپ‌های افزایشی را با هم ترکیب کنید.
  • Cron وظایف بکاپ را به‌طور منظم انجام می‌دهد و فرآیند بکاپ‌گیری را خودکار می‌کند.

[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”برنامه‌ریزی و زمان‌بندی پشتیبان‌گیری (Cron Jobs)” subtitle=”توضیحات کامل”]Cron یک ابزار در لینوکس است که برای اجرای اتوماتیک وظایف (jobs) در زمان‌های مشخص استفاده می‌شود. شما می‌توانید پشتیبان‌گیری خودکار را با استفاده از Cron برنامه‌ریزی کنید.


1. ویرایش فایل Cron:

برای تنظیم Cron Jobs، ابتدا فایل Cron خود را با استفاده از دستور زیر ویرایش کنید:

crontab -e

این دستور فایل Cron مربوط به کاربر جاری را باز می‌کند. می‌توانید Cron Jobs جدیدی اضافه کنید.


2. ساخت Cron Job برای پشتیبان‌گیری افزایشی:

مثال زیر یک بکاپ افزایشی از MySQL/MariaDB را هر شب در ساعت 2:00 صبح اجرا می‌کند:

0 2 * * * /usr/bin/innobackupex --user=root --password=your_password --host=localhost --incremental --incremental-basedir=/backup/full-backup/ /backup/incremental-backup/

توضیحات:

  • 0 2 * * * مشخص می‌کند که این Cron Job هر روز ساعت 2:00 صبح اجرا شود.
  • --incremental و --incremental-basedir به ترتیب بکاپ افزایشی و مرجع بکاپ کامل را مشخص می‌کنند.
  • /backup/full-backup/ مسیر بکاپ کامل قبلی را نشان می‌دهد.
  • /backup/incremental-backup/ مسیر ذخیره‌سازی بکاپ‌های افزایشی است.

3. Cron Job برای پشتیبان‌گیری کامل:

اگر نیاز به بکاپ کامل دارید، می‌توانید یک Cron Job برای آن تنظیم کنید:

0 3 * * * /usr/bin/innobackupex --user=root --password=your_password --host=localhost /backup/full-backup/

توضیحات:

  • 0 3 * * * بکاپ کامل را هر روز ساعت 3:00 صبح اجرا می‌کند.
  • --incremental حذف می‌شود، زیرا بکاپ کامل تمام داده‌ها را شامل می‌شود.

4. Cron Job با mysqldump:

برای استفاده از mysqldump به‌جای Percona XtraBackup، می‌توانید این Cron Job را تنظیم کنید:

0 3 * * * mysqldump -u root -p --all-databases | gzip > /backup/full-backup.sql.gz
0 4 * * * mysqldump -u root -p --all-databases --single-transaction --lock-tables=false --flush-logs | gzip > /backup/incremental-backup.sql.gz

توضیحات:

  • gzip برای فشرده‌سازی فایل‌ها استفاده می‌شود.
  • --single-transaction به بکاپ کمک می‌کند که پایگاه داده در حالت Transction-safe باشد.

5. اجرای Cron Job‌ها:

برای فعال‌سازی تغییرات، Cron را بارگذاری مجدد کنید:

systemctl reload crond

یا

service crond restart

جمع‌بندی:

  • با Cron Jobs، می‌توانید بکاپ‌گیری خودکار را در زمان‌های دلخواه تنظیم کنید.
  • بکاپ کامل و افزایشی را می‌توان به صورت جداگانه یا ترکیبی برنامه‌ریزی کرد.
  • فایل‌های Cron کاربر خاص را مدیریت کنید و تنظیمات را هر زمان که لازم باشد به‌روزرسانی کنید.

[/cdb_course_lesson][/cdb_course_lessons]

[cdb_course_lessons title=”فصل 9: مانیتورینگ و دیباگینگ”][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”استفاده از ابزارهای داخلی برای مانیتورینگ” subtitle=”توضیحات کامل”]

1. Performance Schema:

Performance Schema یکی از ابزارهای قدرتمند MySQL/MariaDB است که اطلاعات دقیقی درباره نحوه عملکرد سرور، درخواست‌های SQL، استفاده از منابع و موارد دیگر ارائه می‌دهد.

  • فعال‌سازی Performance Schema: برای فعال‌سازی و تنظیم آن، ابتدا فایل پیکربندی my.cnf را ویرایش کنید و performance_schema را فعال کنید:
    [mysqld]
    performance_schema = on
  • دستورهای کاربردی برای مشاهده اطلاعات:
    • نمایش جدول‌ها و شاخص‌ها:
      SELECT * FROM performance_schema.threads;
    • مشاهده صفوف منتظر:
      SELECT * FROM performance_schema.events_waits_current;
    • مشاهده اطلاعات پردازش‌ها:
      SELECT * FROM performance_schema.events_statements_current;
  • مزایا:
    • امکان مشاهده جزییات زمان اجرا، مصرف CPU، حافظه و درخواست‌های SQL.
    • شناسایی گلوگاه‌ها و مشکلات عملکردی به راحتی.

2. Information Schema:

Information Schema داده‌های مربوط به ساختار و اطلاعات متا دیتا درباره پایگاه داده را در اختیار شما قرار می‌دهد.

  • دستورهای کاربردی برای مشاهده اطلاعات:
    • اطلاعات درباره جداول و ستون‌ها:
      SELECT table_schema, table_name, column_name, data_type FROM information_schema.columns;
    • اطلاعات درباره کاربران و دسترسی‌ها:
      SELECT * FROM information_schema.user_privileges;
    • مشاهده وضعیت و جزییات تنظیمات سرور:
      SELECT * FROM information_schema.global_status;
  • مزایا:
    • مشاهده وضعیت سرور، جداول، و کاربران.
    • شناسایی و عیب‌یابی سریع مشکلات عملکردی و تنظیمات نادرست.

3. استفاده از ابزارهای نظارت خارجی:

علاوه بر ابزارهای داخلی، می‌توانید از ابزارهای نظارتی خارجی مانند Zabbix، Nagios، Prometheus برای مانیتورینگ و هشداردهی استفاده کنید.


جمع‌بندی:

  • Performance Schema و Information Schema ابزارهای داخلی قدرتمند برای جمع‌آوری اطلاعات متا دیتا و عملکرد هستند.
  • با استفاده از این ابزارها، می‌توانید مشکلات عملکردی را شناسایی و حل کنید.

[/cdb_course_lesson][cdb_course_lesson title=”بررسی و رفع مشکلات رایج:”][/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”خطاهای اتصال (Connection Errors)” subtitle=”توضیحات کامل”]خطاهای اتصال به MySQL/MariaDB می‌توانند به دلایل مختلفی مانند تنظیمات نادرست، مشکلات شبکه، یا مشکلات پیکربندی رخ دهند. در اینجا به بررسی رایج‌ترین خطاهای اتصال و روش‌های رفع آن‌ها می‌پردازیم.


1. خطاهای اتصال به سرور: MySQL Server Not Found یا Access Denied:

  • خطای “MySQL Server Not Found”:
    • این خطا زمانی ظاهر می‌شود که MySQL/MariaDB نتواند سرور را پیدا کند.
    • راهکار:
      • اطمینان حاصل کنید که سرور MySQL/MariaDB در حال اجراست.
      • بررسی تنظیمات فایل my.cnf یا my.ini برای اطمینان از وجود پورت و آدرس صحیح سرور.
      • اطمینان از فعال بودن فایروال و مسیریابی صحیح در شبکه.
  • خطای “Access Denied”:
    • این خطا زمانی رخ می‌دهد که دسترسی به پایگاه داده مجاز نباشد.
    • راهکار:
      • بررسی تنظیمات و دسترسی‌های MySQL/MariaDB با استفاده از GRANT:
        GRANT ALL PRIVILEGES ON your_database.* TO 'username'@'localhost' IDENTIFIED BY 'password';
        FLUSH PRIVILEGES;

2. خطای “Host is not allowed to connect”:

  • علت:
    • آدرس IP یا نام دامنه سرور در تنظیمات my.cnf مسدود شده است.
  • راهکار:
    • بررسی تنظیمات my.cnf در بخش bind-address و تغییر آن به IP مناسب:
      bind-address = 0.0.0.0
    • یا افزودن IP‌های مجاز به لیست user@host:
      GRANT ALL PRIVILEGES ON your_database.* TO 'username'@'%' IDENTIFIED BY 'password';
      FLUSH PRIVILEGES;

3. خطای “Too many connections”:

  • علت:
    • تعداد کانکشن‌های فعال به سرور بیش از حد مجاز است.
  • راهکار:
    • افزایش تعداد max_connections در فایل my.cnf:
      [mysqld]
      max_connections = 1000
    • بررسی و بستن کانکشن‌های بلااستفاده:
      SHOW PROCESSLIST;
      KILL [ID];

4. خطای “Unknown database” یا “Table doesn’t exist”:

  • علت:
    • ممکن است نام دیتابیس یا جدول درست وارد نشده باشد.
  • راهکار:
    • بررسی نام دیتابیس و جداول:
      SHOW DATABASES;
      USE your_database;
      SHOW TABLES;

5. خطای “Lost connection to MySQL server during query”:

  • علت:
    • مشکلات مربوط به زمان‌بندی یا timeout در اتصال.
  • راهکار:
    • افزایش زمان timeout در my.cnf:
      [mysqld]
      connect_timeout = 60
      wait_timeout = 28800
      interactive_timeout = 28800

جمع‌بندی:

  • خطاهای اتصال معمولاً به تنظیمات نادرست و مشکلات پیکربندی مربوط می‌شوند.
  • با بررسی تنظیمات my.cnf و استفاده از دستورهایی مانند GRANT و SHOW PROCESSLIST می‌توان مشکلات را رفع کرد.

[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”بررسی و رفع مشکلات مربوط به قفل‌ها (Locks)” subtitle=”توضیحات کامل”]

قفل‌ها در MySQL/MariaDB به مکانیزم‌هایی اشاره دارند که برای کنترل و هماهنگی دسترسی به منابع (مانند جداول و سطرهای پایگاه داده) استفاده می‌شوند. این قفل‌ها می‌توانند در صورت سوءاستفاده یا تنظیمات نادرست باعث مشکلات عملکردی و قفل‌شدن (Locking) پایگاه داده شوند.


1. قفل‌های جدولی (Table Locks)

  • مشکل:
    • قفل‌های طولانی‌مدت روی جداول ممکن است باعث کاهش عملکرد سیستم شوند.
    • اگر عملیات خواندن و نوشتن به‌طور هم‌زمان روی یک جدول انجام شوند، ممکن است قفل‌های مرده ایجاد شوند.
  • راهکار:
    • استفاده از موتور ذخیره‌سازی InnoDB:
      موتور InnoDB از قفل‌های Row-level استفاده می‌کند که در مقایسه با قفل‌های Table-level عملکرد بهتری دارند.

      ALTER TABLE your_table ENGINE=InnoDB;
    • بهینه‌سازی کوئری‌ها:
      بهینه‌سازی کوئری‌ها با استفاده از ایندکس‌ها و حذف دستورات Lock می‌تواند به کاهش قفل‌ها کمک کند.

2. قفل‌های زودهنگام (Deadlocks)

  • مشکل:
    • زمانی که دو یا چند Transaction سعی دارند هم‌زمان روی جداول قفل شده کار کنند.
    • این می‌تواند به Deadlock منجر شود که در آن یکی از Transactions در وضعیت قفل قرار می‌گیرد.
  • راهکار:
    • فعال‌سازی و بررسی لاگ‌های Deadlock:
      فعال‌سازی لاگ Deadlock می‌تواند به شناسایی موارد Deadlock کمک کند.

      SET GLOBAL log_deadlocks = 1;
      SHOW ENGINE INNODB STATUS \G;
    • استفاده از Transaction Isolation Level:
      تنظیم Repeatable Read یا Read Committed می‌تواند جلوی قفل‌های زودهنگام را بگیرد.

      SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

3. قفل‌های شبیه‌سازی شده (Locking for Read or Write)

  • مشکل:
    • قفل‌های Write در سطرها می‌توانند منجر به تاخیر در عملیات‌های خواندن شوند.
  • راهکار:
    • استفاده از قفل‌های ROW-level:
      تنظیم موتور InnoDB به‌عنوان موتور پیش‌فرض ذخیره‌سازی که از قفل‌های Row-level استفاده می‌کند.
    • کوئری‌های Select بدون Lock:
      استفاده از SELECT ... FOR UPDATE فقط زمانی که نیاز به عملیات بروزرسانی دارید.

4. خطاهای Lock Timeout

  • مشکل:
    • خطاهایی مانند Lock wait timeout exceeded زمانی رخ می‌دهد که یک Transaction قفل گرفته باشد و Transaction دیگری نتواند به آن دسترسی داشته باشد.
  • راهکار:
    • افزایش زمان lock_wait_timeout:
      SET GLOBAL lock_wait_timeout = 120;
    • بهینه‌سازی کوئری‌ها و مدیریت Transaction‌ها: اطمینان از استفاده بهینه از Transaction‌های کوتاه و کارآمد.

5. عدم آزادسازی قفل‌ها

  • مشکل:
    • قفل‌هایی که به‌درستی آزاد نمی‌شوند و باعث مشکلات طولانی‌مدت قفل‌ها می‌شوند.
  • راهکار:
    • بهینه‌سازی Transaction‌ها:
      اطمینان از commit یا rollback در پایان Transaction.
    • استفاده از ایندکس‌های بهینه برای کاهش نیاز به قفل‌ها.

جمع‌بندی:

  • قفل‌ها می‌توانند باعث کاهش عملکرد و مشکلات هماهنگی در پایگاه داده شوند.
  • با استفاده از موتور InnoDB، بهینه‌سازی کوئری‌ها، و بررسی لاگ‌های Deadlock، می‌توان مشکلات قفل‌ها را به حداقل رساند.

[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”رفع مشکلات عملکردی در MySQL / MariaDB” subtitle=”توضیحات کامل”]مشکلات عملکردی می‌توانند ناشی از عواملی مانند قفل‌های پایگاه داده، کوئری‌های ناکارآمد، تنظیمات نادرست سرور، و استفاده نامناسب از منابع سخت‌افزاری باشند. در اینجا به برخی از روش‌های رایج برای رفع مشکلات عملکردی پرداخته می‌شود.


1. بهینه‌سازی کوئری‌ها

  • مشکل:
    کوئری‌های سنگین و ناکارآمد می‌توانند عملکرد پایگاه داده را کاهش دهند.
  • راهکار:
    • ایجاد ایندکس‌ها:
      استفاده از ایندکس‌های مناسب می‌تواند زمان اجرای کوئری‌ها را بهبود بخشد.

      CREATE INDEX index_name ON table_name(column_name);
    • بهینه‌سازی کوئری‌ها:
      تحلیل و اصلاح کوئری‌ها برای حذف دستورات زائد، محدود کردن جستجوها، و استفاده از ایندکس‌ها.

      EXPLAIN SELECT column_name FROM table_name WHERE condition;
    • استفاده از EXPLAIN برای تحلیل کوئری‌ها:
      بررسی اجرای کوئری‌ها با ابزار EXPLAIN و بهینه‌سازی دستوراتی که دارای زمان بالا هستند.

2. تنظیمات حافظه (Buffer Pool و Query Cache)

  • مشکل:
    تنظیمات نادرست حافظه می‌تواند منجر به کاهش عملکرد شود.
  • راهکار:
    • تنظیم Buffer Pool:
      بهینه‌سازی تنظیمات Buffer Pool در فایل my.cnf می‌تواند سرعت خواندن و نوشتن اطلاعات را افزایش دهد.

      innodb_buffer_pool_size = 256M
    • Query Cache تنظیم شده:
      در MySQL، Query Cache دیگر بهینه نیست و توصیه می‌شود این ویژگی غیرفعال شود.

      query_cache_size = 0

3. تنظیمات اتصال و زمان‌بندی‌ها (Connection Pooling, Max Connections)

  • مشکل:
    تنظیمات نادرست اتصال می‌تواند باعث مسائل عملکردی مانند Overhead شبکه شود.
  • راهکار:
    • تنظیم Max Connections:
      حداکثر تعداد اتصالات هم‌زمان را با تنظیم max_connections محدود کنید.

      max_connections = 500
    • تنظیم زمان‌بندی‌ها:
      زمان‌های زمان‌دار نظیر wait_timeout و interactive_timeout را برای کاهش Overhead تنظیم کنید.

      wait_timeout = 28800
      interactive_timeout = 28800

4. استفاده از کش (Cache Optimization)

  • مشکل:
    Cache‌های ناکارآمد می‌توانند منجر به افزایش زمان پاسخ‌دهی شوند.
  • راهکار:
    • Query Cache را غیرفعال کنید:
      Query Cache دیگر بهینه نیست و غیرفعال کردن آن می‌تواند به عملکرد بهتر منجر شود.
    • استفاده از Table Cache:
      استفاده از Table Cache می‌تواند سرعت دسترسی به داده‌ها را افزایش دهد.

      table_open_cache = 4096

5. بررسی و بهینه‌سازی لاگ‌ها (Logs)

  • مشکل:
    فعال بودن لاگ‌ها با حجم بالا می‌تواند منجر به کاهش عملکرد شود.
  • راهکار:
    • غیرفعال کردن لاگ‌های غیر ضروری:
      لاگ‌های General Log، Slow Query Log، Error Log را بهینه‌سازی یا غیرفعال کنید.

      general_log = 0
      slow_query_log = 1

6. استفاده از Replication برای بهبود عملکرد

  • مشکل:
    مشکلات عملکرد می‌توانند به دلیل تنگناهای منابع و قفل‌ها باشند.
  • راهکار:
    • استفاده از Master-Slave Replication:
      تقسیم بار روی سرورهای مختلف و بهبود عملکرد سیستم.
    • استفاده از Master-Master Replication:
      برای مقیاس‌پذیری و خواندن بهتر داده‌ها از چندین سرور.

7. مانیتورینگ و عیب‌یابی منابع سخت‌افزاری

  • مشکل:
    کمبود منابع سخت‌افزاری می‌تواند منجر به کاهش عملکرد شود.
  • راهکار:
    • نظارت بر استفاده از CPU، RAM، و I/O:
      ابزارهایی مانند iostat, vmstat, top را برای بررسی استفاده از منابع سخت‌افزاری استفاده کنید.
    • بهینه‌سازی I/O:
      استفاده از ZFS یا XFS برای بهینه‌سازی I/O می‌تواند بهبود عملکرد را در دسترسی به دیسک فراهم کند.

جمع‌بندی:

رفع مشکلات عملکردی شامل بهینه‌سازی کوئری‌ها، تنظیمات حافظه، مدیریت اتصالات، بهینه‌سازی کش و استفاده صحیح از منابع سخت‌افزاری می‌باشد. اعمال این تنظیمات و ابزارها می‌تواند بهبود چشمگیری در عملکرد سیستم MySQL/MariaDB داشته باشد.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” title=”ابزارهای شخص ثالث برای مانیتورینگ MySQL / MariaDB” subtitle=”توضیحات کامل”]

مانیتورینگ صحیح و پیوسته از اهمیت زیادی برخوردار است تا بتوانید مشکلات عملکردی را شناسایی و رفع کنید. ابزارهای شخص ثالث مختلفی برای مانیتورینگ و تحلیل MySQL / MariaDB وجود دارند که به شما کمک می‌کنند تا وضعیت سرور را نظارت کنید و عملکرد سیستم را بهبود دهید.


1. Zabbix

  • ویژگی‌ها:
    • نظارت جامع: Zabbix ابزاری قدرتمند برای مانیتورینگ سرورهای مختلف از جمله MySQL/MariaDB است.
    • پیشرفته‌ترین داشبوردها: با استفاده از Zabbix می‌توانید به داشبوردهای کارآمد دسترسی داشته باشید که اطلاعات مفیدی مانند مصرف منابع، عملکرد کوئری‌ها، و وضعیت سرور را نمایش می‌دهند.
    • آلارم‌ها و هشدارها: Zabbix می‌تواند آلارم‌ها و هشدارهایی را در صورت بروز مشکلات در سرور MySQL ارسال کند.
  • مثال:
    تنظیمات برای نظارت بر slow queries، connection counts، و دیگر شاخص‌های عملکردی MySQL/MariaDB.

2. Nagios

  • ویژگی‌ها:
    • مانیتورینگ مبتنی بر شاخص‌ها: Nagios برای نظارت بر سرورهای لینوکس و پایگاه داده‌ها طراحی شده است.
    • جمع‌آوری داده‌ها و آمارها: می‌توانید وضعیت سرور MySQL را با شاخص‌های مختلف مانند زمان پاسخ‌دهی، میزان CPU مصرفی، و تعداد اتصالات نظارت کنید.
    • هشدارها و گزارشات ایمیلی: Nagios هشدارهای مختلف را از طریق ایمیل ارسال می‌کند که به شما در رفع مشکلات کمک می‌کند.
  • مثال:
    نظارت بر slow queries و بررسی تعداد اتصالات هم‌زمان و تنظیم هشدارها در صورت افزایش بی‌رویه.

3. Prometheus & Grafana

  • ویژگی‌ها:
    • نظارت مبتنی بر زمان واقعی: Prometheus یک ابزار مانیتورینگ پیشرفته است که داده‌ها را جمع‌آوری و تحلیل می‌کند.
    • مشاهدات زنده و داشبوردهای تعاملی: Grafana به عنوان یک داشبورد پیشرفته برای نمایش داده‌های Prometheus عمل می‌کند.
    • شاخص‌های متنوع: Prometheus به شما این امکان را می‌دهد که از شاخص‌های مختلف MySQL مانند query response times, connections, buffer pool usage, و slow queries اطلاعات بگیرید.
  • مثال:
    نظارت بر query performance, connection count, disk I/O و تنظیم هشدارها برای افزایش بار سرور یا کوئری‌های کند.

4. DataDog

  • ویژگی‌ها:
    • نظارت ابری: DataDog یک ابزار مانیتورینگ ابری برای MySQL/MariaDB است که شاخص‌های مختلف از جمله کوئری‌ها، منابع، و زمان‌های پاسخ‌دهی را ردیابی می‌کند.
    • داشبوردهای آماده و قابل تنظیم: DataDog داشبوردهای بصری و ساده‌ای برای نظارت بر سرورهای MySQL/MariaDB ارائه می‌دهد.
    • هشدارهای پیشرفته: می‌توانید هشدارهایی برای مشکلات مرتبط با عملکرد و استفاده از منابع تنظیم کنید.
  • مثال:
    نظارت بر query response time, buffer pool usage, و slow query logs.

5. InfluxDB & Telegraf

  • ویژگی‌ها:
    • نظارت زمان واقعی: InfluxDB ابزاری برای جمع‌آوری داده‌ها و ذخیره‌سازی داده‌های مانیتورینگ است.
    • ادغام با Telegraf: ابزار Telegraf به‌صورت پیش‌فرض برای جمع‌آوری داده‌های عملکردی MySQL از جمله کوئری‌های کند، زمان پاسخ‌دهی و اتصالات استفاده می‌شود.
    • داشبوردهای Grafana: InfluxDB داده‌ها را برای تحلیل و مشاهده در Grafana ذخیره می‌کند.
  • مثال:
    نظارت بر slow query logs, query response times, و connection metrics با استفاده از Grafana برای نمایش داده‌های زمان واقعی.

جمع‌بندی:

استفاده از ابزارهای شخص ثالث مانند Zabbix، Nagios، Prometheus، و DataDog می‌تواند به شما کمک کند تا به‌صورت مستمر بر عملکرد MySQL / MariaDB نظارت داشته باشید و مشکلات احتمالی را به سرعت شناسایی و رفع کنید. ابزارهایی مانند Prometheus و Grafana برای نظارت‌های پیشرفته و داشبوردهای تعاملی بسیار مناسب هستند.

[/cdb_course_lesson][/cdb_course_lessons]

[cdb_course_lessons title=”فصل 10: ارتقاء و نگهداری سرویس”][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”ارتقاء نسخه MySQL / MariaDB بدون از دست رفتن داده‌ها” subtitle=”توضیحات کامل”]

ارتقاء نسخه MySQL یا MariaDB یکی از فرآیندهای حساس است که در آن باید از دست رفتن داده‌ها جلوگیری و سرویس‌دهی پایدار حفظ شود. این فرآیند شامل چندین مرحله است که با برنامه‌ریزی دقیق و انجام تست‌های پیش از اجرا، می‌توانید به‌راحتی نسخه پایگاه داده خود را ارتقاء دهید.


مراحل ارتقاء نسخه

1. آماده‌سازی اولیه

  • پشتیبان‌گیری کامل از داده‌ها:
    • از تمام دیتابیس‌ها و تنظیمات سرور یک پشتیبان کامل تهیه کنید. این کار می‌تواند با استفاده از ابزارهایی مانند mysqldump یا Percona XtraBackup انجام شود.
    • مثال برای mysqldump:
      mysqldump -u root -p --all-databases > backup.sql
    • برای پشتیبان فیزیکی:
      xtrabackup --backup --target-dir=/path/to/backup
  • بررسی نسخه فعلی:
    • نسخه جاری MySQL/MariaDB را با دستور زیر بررسی کنید:
      mysql --version
  • بررسی ناسازگاری‌های نسخه‌ها:
    • مستندات رسمی MySQL/MariaDB را مطالعه کنید تا مطمئن شوید که ارتقاء مستقیم بین نسخه‌های انتخاب‌شده پشتیبانی می‌شود.
    • ابزار mysql_upgrade نیز می‌تواند برای بررسی مشکلات احتمالی کمک کند.

2. بررسی افزونه‌ها و تنظیمات

  • بررسی افزونه‌ها (Plugins):
    • اطمینان حاصل کنید که افزونه‌های مورد استفاده شما در نسخه جدید پشتیبانی می‌شوند.
    • لیست افزونه‌های فعال:
      SHOW PLUGINS;
  • بررسی فایل پیکربندی (my.cnf):
    • تنظیمات فایل پیکربندی را بررسی کنید و مطمئن شوید که پارامترهای استفاده‌شده با نسخه جدید سازگار هستند.

3. آزمایش در محیط آزمایشی

  • سرور آزمایشی مشابه سرور اصلی راه‌اندازی کنید و فرآیند ارتقاء را روی آن انجام دهید.
  • از پشتیبان گرفته‌شده برای بازیابی داده‌ها روی سرور آزمایشی استفاده کنید.

4. ارتقاء نسخه

روش 1: ارتقاء با استفاده از بسته‌های رسمی
  1. توقف سرویس MySQL/MariaDB:
    sudo systemctl stop mysql
  2. به‌روزرسانی بسته‌ها:
    • برای توزیع‌های مبتنی بر Debian:
      sudo apt update
      sudo apt install mariadb-server
    • برای توزیع‌های مبتنی بر RHEL:
      sudo dnf update mariadb-server
  3. راه‌اندازی مجدد سرویس:
    sudo systemctl start mysql
  4. اجرای ابزار mysql_upgrade:
    mysql_upgrade -u root -p
روش 2: ارتقاء دستی (Binary Upgrade)
  1. دانلود نسخه جدید:
    • فایل‌های باینری نسخه جدید را از سایت رسمی دانلود کنید.
  2. جایگزینی فایل‌ها:
    • فایل‌های نسخه فعلی را با نسخه جدید جایگزین کنید.
  3. راه‌اندازی مجدد:
    • پایگاه داده را با باینری جدید راه‌اندازی کنید و از ابزار mysql_upgrade استفاده کنید.

5. تأیید صحت ارتقاء

  • بررسی لاگ‌ها: لاگ‌های MySQL/MariaDB را برای بررسی خطاها چک کنید:
    sudo tail -f /var/log/mysql/error.log
  • تست عملکرد: تست‌های مربوط به کوئری‌ها و داده‌ها را اجرا کنید تا از صحت عملکرد سرور مطمئن شوید.

6. پاک‌سازی نسخه‌های قدیمی

  • حذف فایل‌ها و بسته‌های قدیمی: نسخه‌های قدیمی یا فایل‌های مرتبط را حذف کنید.
    sudo apt autoremove
  • پاک‌سازی افزونه‌های ناسازگار: افزونه‌هایی که دیگر پشتیبانی نمی‌شوند را حذف کنید.

نکات مهم:

  1. نسخه‌های سازگار: همیشه مستندات رسمی نسخه‌های MySQL/MariaDB را بررسی کنید.
  2. پشتیبان‌گیری مستمر: در حین فرآیند ارتقاء، در هر مرحله از داده‌ها پشتیبان تهیه کنید.
  3. زمان‌بندی: ارتقاء را در زمان‌هایی انجام دهید که بار کاری سرور پایین است.

جمع‌بندی:

با رعایت مراحل ذکرشده، می‌توانید به‌صورت ایمن نسخه MySQL/MariaDB خود را ارتقاء دهید. اطمینان از وجود پشتیبان، آزمایش در محیط تست، و اجرای دقیق ابزارهای ارتقاء کمک می‌کند تا فرآیند بدون مشکل پیش برود و داده‌های شما حفظ شوند.

[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”بررسی و رفع مشکلات سازگاری در MySQL / MariaDB” subtitle=”توضیحات کامل”]ارتقاء یا تغییر تنظیمات MySQL و MariaDB ممکن است به مشکلات سازگاری منجر شود. این مشکلات می‌توانند ناشی از تغییرات در ساختار دیتابیس، توابع، یا افزونه‌ها باشند. برای رفع این مشکلات، نیاز است که تمام ناسازگاری‌ها شناسایی و با استفاده از ابزارها و روش‌های مناسب رفع شوند.


1. شناسایی مشکلات سازگاری

الف. بررسی نسخه‌های جدید و مستندات

  • مستندات نسخه جدید را مطالعه کنید تا تغییرات و موارد حذف‌شده را بشناسید.
  • مستندات مربوط به Compatibility Changes در MySQL یا MariaDB را مرور کنید.

ب. استفاده از ابزار mysql_upgrade

  • این ابزار برای بررسی و ارتقاء پایگاه داده‌ها در نسخه‌های جدید استفاده می‌شود:
    mysql_upgrade -u root -p
  • مشکلات مربوط به جداول، ایندکس‌ها، یا داده‌ها را شناسایی کرده و در صورت لزوم تغییرات لازم را اعمال می‌کند.

ج. بررسی لاگ‌ها

  • فایل‌های لاگ (مانند error.log) می‌توانند اطلاعات مهمی در مورد ناسازگاری ارائه دهند:
    sudo tail -f /var/log/mysql/error.log

د. بررسی ساختار جداول

  • با دستور CHECK TABLE می‌توانید وضعیت جداول را بررسی کنید:
    CHECK TABLE table_name;
  • اگر مشکلی شناسایی شد، از دستور REPAIR TABLE استفاده کنید:
    REPAIR TABLE table_name;

2. رفع مشکلات سازگاری

الف. مشکلات ناشی از تغییر توابع یا دستورات

  • در نسخه‌های جدید، ممکن است برخی توابع یا دستورات حذف یا تغییر یافته باشند. برای مثال:
    • تابع PASSWORD() در نسخه‌های جدید MariaDB تغییر کرده است.
    • بررسی و جایگزینی دستورات ناسازگار:
      SELECT PASSWORD('your_password');

      را با دستور جدید یا روش امن‌تر جایگزین کنید.

ب. مشکلات افزونه‌ها و موتورهای ذخیره‌سازی

  • بررسی کنید که آیا افزونه‌ها یا موتورهای ذخیره‌سازی خاصی در نسخه جدید پشتیبانی می‌شوند یا خیر:
    SHOW ENGINES;
    SHOW PLUGINS;
  • افزونه‌های ناسازگار را غیرفعال یا جایگزین کنید.

ج. ناسازگاری تنظیمات فایل‌های پیکربندی (my.cnf)

  • تنظیماتی که در نسخه جدید پشتیبانی نمی‌شوند را پیدا و حذف کنید.
  • ابزار mysqld --help --verbose برای نمایش تنظیمات معتبر قابل استفاده است.

د. بررسی نوع داده‌ها

  • تغییراتی در انواع داده‌ها ممکن است مشکلاتی ایجاد کند:
    • بررسی و تغییر ستون‌هایی که از نوع‌های داده حذف‌شده یا تغییر‌یافته استفاده می‌کنند:
      ALTER TABLE table_name MODIFY column_name NEW_DATA_TYPE;

3. آزمایش و اعتبارسنجی

الف. محیط آزمایشی

  • ابتدا تغییرات را در یک محیط آزمایشی اجرا کنید.
  • از داده‌ها پشتیبان‌گیری کرده و بازیابی را تست کنید.

ب. تست عملکرد کوئری‌ها

  • کوئری‌های سنگین یا مهم را اجرا کنید و زمان پاسخ‌دهی را بررسی کنید:
    EXPLAIN SELECT * FROM table_name WHERE condition;

ج. ابزارهای تست ناسازگاری

  • از ابزارهای تخصصی مانند pt-upgrade از مجموعه Percona Toolkit برای شناسایی مشکلات ارتقاء و سازگاری استفاده کنید:
    pt-upgrade --host=127.0.0.1 --user=root --password=your_password --port=3306

4. راهکارهای پیشگیرانه

  • مستندات نسخه‌ها را مطالعه کنید: قبل از ارتقاء یا اعمال تغییرات، تغییرات مهم نسخه‌ها را مرور کنید.
  • از ویژگی‌های آزمایشی استفاده نکنید: از ویژگی‌هایی که در نسخه‌های قدیمی ممکن است ناسازگار باشند، اجتناب کنید.
  • پشتیبان‌گیری منظم: پیش از هر تغییر بزرگ، پشتیبان‌گیری کامل انجام دهید.
  • تست منظم جداول و کوئری‌ها: با استفاده از دستورات بررسی، خطاهای احتمالی را پیش از ایجاد مشکلات رفع کنید.

جمع‌بندی

رفع مشکلات سازگاری در MySQL و MariaDB نیازمند شناسایی دقیق مشکلات و استفاده از ابزارها و روش‌های استاندارد است. از ابزارهایی مانند mysql_upgrade، دستورات SQL برای بررسی جداول و کوئری‌ها، و ابزارهای مانیتورینگ برای شناسایی و رفع مشکلات استفاده کنید. با اجرای این مراحل، می‌توانید از عملکرد پایدار و ایمن پایگاه داده خود اطمینان حاصل کنید.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”نگهداری و پاکسازی پایگاه داده در MySQL و MariaDB” subtitle=”توضیحات کامل”]برای اطمینان از عملکرد بهینه، پایگاه داده‌ها باید به‌طور مرتب نگهداری و پاکسازی شوند. نگهداری شامل اقدامات پیشگیرانه و بهبود عملکرد است، در حالی که پاکسازی به حذف داده‌های غیرضروری و جلوگیری از انباشت اطلاعات غیرکاربردی می‌پردازد.


1. اهمیت نگهداری و پاکسازی پایگاه داده

  • بهبود عملکرد: کوئری‌ها سریع‌تر اجرا می‌شوند.
  • جلوگیری از مشکلات ذخیره‌سازی: فضای دیسک بهینه می‌شود.
  • کاهش خطرات امنیتی: اطلاعات حساس و غیرضروری حذف می‌شوند.
  • پایداری سیستم: از بروز خطاهای ناشی از داده‌های فاسد یا قدیمی جلوگیری می‌شود.

2. روش‌های نگهداری پایگاه داده

الف. بهینه‌سازی جداول

  • برای حذف فضای استفاده‌نشده و بهبود عملکرد:
    OPTIMIZE TABLE table_name;
  • این دستور جداول را بازسازی کرده و فضاهای خالی را حذف می‌کند.

ب. بررسی و تعمیر جداول

  • برای اطمینان از صحت ساختار جداول و رفع مشکلات:
    CHECK TABLE table_name;
    REPAIR TABLE table_name;

ج. بروزرسانی آمارها و ایندکس‌ها

  • آمارهای قدیمی می‌توانند کوئری‌ها را کند کنند. از دستور زیر استفاده کنید:
    ANALYZE TABLE table_name;
  • ایندکس‌ها را برای بهبود عملکرد کوئری‌ها بازسازی کنید:
    ALTER TABLE table_name ENGINE=InnoDB;

د. حذف لاگ‌ها و فایل‌های موقت

  • حذف لاگ‌ها و فایل‌های موقت غیرضروری برای آزادسازی فضای دیسک:
    rm -rf /var/lib/mysql/*.log

    اطمینان حاصل کنید که قبل از حذف، این فایل‌ها دیگر نیازی ندارند.

ه. بررسی سلامت دیسک و سیستم فایل

  • پایگاه داده‌هایی که بر روی دیسک‌های آسیب‌دیده هستند می‌توانند به از دست رفتن داده‌ها منجر شوند. از ابزارهایی مانند fsck برای بررسی سلامت دیسک استفاده کنید.

3. روش‌های پاکسازی پایگاه داده

الف. حذف داده‌های قدیمی

  • رکوردهایی که دیگر نیازی به آن‌ها نیست حذف کنید. برای مثال:
    DELETE FROM table_name WHERE created_at < '2024-01-01';

ب. پاکسازی جداول موقت

  • جداول موقت که دیگر استفاده نمی‌شوند حذف کنید:
    DROP TABLE IF EXISTS temp_table_name;

ج. حذف رکوردهای تکراری

  • برای شناسایی و حذف داده‌های تکراری:
    DELETE FROM table_name
    WHERE id NOT IN (
      SELECT MIN(id) FROM table_name GROUP BY unique_column
    );

د. تنظیم محدودیت برای لاگ‌ها

  • لاگ‌ها را بر اساس نیاز محدود کنید:
    SET GLOBAL general_log = 'OFF';

ه. آرشیو کردن داده‌های قدیمی

  • به جای حذف داده‌ها، می‌توانید آن‌ها را آرشیو کنید:
    INSERT INTO archive_table SELECT * FROM main_table WHERE condition;
    DELETE FROM main_table WHERE condition;

4. استفاده از ابزارهای خودکار

الف. اسکریپت‌های زمان‌بندی (Cron Jobs)

  • برای اجرای منظم عملیات نگهداری و پاکسازی، از Cron Jobs استفاده کنید. نمونه:
    0 2 * * * /usr/bin/mysqlcheck -u root -p --optimize --all-databases

ب. استفاده از ابزارهای مدیریت پایگاه داده

  • ابزارهایی مانند phpMyAdmin، MySQL Workbench، یا Percona Toolkit می‌توانند به شما در نگهداری کمک کنند.

ج. مانیتورینگ و هشدارها

  • با استفاده از ابزارهایی مانند Prometheus یا Zabbix، وضعیت پایگاه داده را بررسی کنید و هشدارهایی برای مشکلات احتمالی تنظیم کنید.

5. نکات پیشگیرانه

  • پشتیبان‌گیری منظم: پیش از انجام عملیات پاکسازی یا نگهداری، از پایگاه داده پشتیبان‌گیری کنید.
  • مستندسازی تغییرات: هرگونه تغییری که در پایگاه داده انجام می‌دهید را مستند کنید.
  • آزمایش در محیط آزمایشی: تغییرات را ابتدا در محیط آزمایشی بررسی کنید.

جمع‌بندی

نگهداری و پاکسازی پایگاه داده بخش مهمی از مدیریت MySQL و MariaDB است. با استفاده از روش‌هایی مانند بهینه‌سازی جداول، حذف داده‌های قدیمی، و استفاده از ابزارهای خودکار می‌توانید عملکرد و پایداری پایگاه داده را تضمین کنید. رعایت نکات پیشگیرانه و مانیتورینگ منظم از ایجاد مشکلات جدی جلوگیری می‌کند.[/cdb_course_lesson][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”lecture” private_lesson=”true” title=”برنامه‌ریزی برای نگهداری‌های دوره‌ای در MySQL و MariaDB” subtitle=”توضیحات کامل”]نگهداری‌های دوره‌ای برای حفظ عملکرد و پایداری پایگاه داده ضروری است. این فرآیند شامل برنامه‌ریزی وظایف نگهداری، مانیتورینگ وضعیت، و بهینه‌سازی منابع است. در این بخش، یک برنامه جامع برای نگهداری‌های دوره‌ای ارائه می‌شود.


1. اهمیت نگهداری‌های دوره‌ای

  • افزایش عملکرد: جلوگیری از کاهش سرعت کوئری‌ها و عملکرد سیستم.
  • کاهش خطرات: پیشگیری از مشکلاتی مانند پر شدن فضای دیسک یا بروز خطاهای سیستمی.
  • بهبود امنیت: اطمینان از به‌روزرسانی نرم‌افزار و رفع آسیب‌پذیری‌ها.
  • پایداری: جلوگیری از اختلالات غیرمنتظره.

2. وظایف نگهداری دوره‌ای

الف. نگهداری روزانه

  1. بررسی فضای دیسک:
    • بررسی مصرف فضای دیسک برای داده‌ها و لاگ‌ها:
      df -h
  2. بررسی وضعیت سرویس:
    • اطمینان از اجرای صحیح سرویس MySQL یا MariaDB:
      systemctl status mysql
  3. بررسی خطاهای اخیر:
    • تحلیل خطاهای ثبت‌شده در لاگ‌ها:
      tail -n 100 /var/log/mysql/error.log

ب. نگهداری هفتگی

  1. بهینه‌سازی جداول:
    • حذف فضای استفاده‌نشده:
      OPTIMIZE TABLE table_name;
  2. بررسی سلامت جداول:
    • شناسایی و رفع مشکلات احتمالی:
      CHECK TABLE table_name;
      REPAIR TABLE table_name;
  3. پاکسازی لاگ‌های غیرضروری:
    • حذف لاگ‌های قدیمی:
      find /var/log/mysql/ -type f -mtime +30 -exec rm {} \;

ج. نگهداری ماهانه

  1. پشتیبان‌گیری کامل:
    • ایجاد پشتیبان از تمام پایگاه داده‌ها:
      mysqldump -u root -p --all-databases > backup-$(date +%F).sql
  2. بروزرسانی نرم‌افزار:
    • اطمینان از به‌روزرسانی نسخه MySQL یا MariaDB:
      apt update && apt upgrade
  3. مانیتورینگ عملکرد:
    • استفاده از ابزارهایی مانند Performance Schema:
      SELECT * FROM performance_schema.events_statements_summary_by_digest LIMIT 10;

د. نگهداری سالانه

  1. بررسی و پاکسازی داده‌های قدیمی:
    • حذف یا آرشیو داده‌های غیرضروری:
      DELETE FROM table_name WHERE created_at < '2023-01-01';
  2. بازبینی تنظیمات:
    • بازبینی تنظیمات فایل‌های پیکربندی (مثل my.cnf).
  3. ارزیابی زیرساخت:
    • بررسی نیاز به ارتقای سخت‌افزار یا افزایش منابع.

3. استفاده از ابزارها برای نگهداری دوره‌ای

الف. اسکریپت‌های زمان‌بندی (Cron Jobs)

  • ایجاد وظایف زمان‌بندی‌شده برای نگهداری:
    • مثال برای پشتیبان‌گیری روزانه:
      0 2 * * * mysqldump -u root -p --all-databases > /backup/mysql/backup-$(date +%F).sql
    • مثال برای پاکسازی لاگ‌های قدیمی:
      0 3 * * 0 find /var/log/mysql/ -type f -mtime +30 -exec rm {} \;

ب. ابزارهای مانیتورینگ

  • استفاده از ابزارهایی مانند Prometheus یا Zabbix برای شناسایی مشکلات عملکردی و نگهداری خودکار.

ج. استفاده از Percona Toolkit

  • ابزارهایی مانند Percona Toolkit می‌توانند به نگهداری کمک کنند:
    • بررسی جداول:
      pt-table-checksum
    • بهینه‌سازی شاخص‌ها:
      pt-duplicate-key-checker

4. ایجاد مستندات برای نگهداری

  • گزارش‌های منظم: ایجاد گزارش‌هایی از وضعیت پایگاه داده و مشکلات شناسایی‌شده.
  • ثبت تغییرات: مستندسازی تمام تغییرات اعمال‌شده در پایگاه داده.

5. نکات کلیدی برای نگهداری موفق

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

جمع‌بندی

برنامه‌ریزی برای نگهداری‌های دوره‌ای تضمین می‌کند که پایگاه داده شما همواره در بهترین حالت عمل می‌کند. با ترکیب نگهداری‌های روزانه، هفتگی، ماهانه و سالانه و استفاده از ابزارهای مناسب، می‌توانید عملکرد، امنیت، و پایداری پایگاه داده را بهبود ببخشید.[/cdb_course_lesson][/cdb_course_lessons]

[cdb_course_lessons title=”پاسخ به سوالات فنی کاربران”][cdb_course_lesson icon=”fas fa-arrow-alt-circle-down” badge=”free” title=”پشتیبانی دائمی و در لحظه” subtitle=”توضیحات کامل”]ما در این دوره تمام تلاش خود را کرده‌ایم تا محتوایی جامع و کاربردی ارائه دهیم که شما را برای ورود به دنیای حرفه‌ای آماده کند. اما اگر در طول دوره یا پس از آن با سوالات فنی، چالش‌ها یا حتی مشکلاتی در اجرای مطالب آموزشی مواجه شدید، نگران نباشید!

  1. پرسش‌های شما، بخش مهمی از دوره است:
    هر سوال یا مشکلی که مطرح کنید، با دقت بررسی شده و پاسخ کامل و کاربردی برای آن ارائه می‌شود. علاوه بر این، سوالات و پاسخ‌های شما به دوره اضافه خواهند شد تا برای سایر کاربران نیز مفید باشد.
  2. پشتیبانی دائمی و در لحظه:
    تیم ما همواره آماده پاسخگویی به سوالات شماست. هدف ما این است که شما با خیالی آسوده بتوانید مهارت‌های خود را به کار بگیرید و پروژه‌های واقعی را با اعتماد به نفس کامل انجام دهید.
  3. آپدیت دائمی دوره:
    این دوره به طور مداوم به‌روزرسانی می‌شود تا همگام با نیازهای جدید و سوالات کاربران تکمیل‌تر و بهتر گردد. هر نکته جدید یا مشکل رایج، در نسخه‌های بعدی دوره قرار خواهد گرفت.

حرف آخر

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

📩 اگر سوالی دارید یا به مشکلی برخوردید، همین حالا مطرح کنید!
ما در کوتاه‌ترین زمان ممکن پاسخ شما را ارائه خواهیم داد. 🙌[/cdb_course_lesson][/cdb_course_lessons]

نقد و بررسی ها

نقد و بررسی وجود ندارد.

فقط مشتریانی که وارد سیستم شده اند و این محصول را خریداری کرده اند می توانند نظر بدهند.

سبد خرید

سبد خرید شما خالی است.

ورود به سایت