فصل ۱: شروع درست — نصب، کلاینت‌ها و تنظیمات فارسی

کلاینت mysql، Workbench و DBeaver؛ ساخت دیتابیس و کاربر

ابزار کار هر روز

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

mysql -u admin -p -h 127.0.0.1 -P 3306 carpet_shop
mysql -u admin -p -e "SHOW DATABASES;"          # اجرای یک دستور و خروج
mysql -u admin -p carpet_shop < schema.sql      # اجرای یک فایل (در bash)

دستورهای داخلی کلاینت

دستورکار
\G به‌جای ;نمایش عمودی نتیجه؛ برای جدول‌های پهن عالی است
\s یا statusنسخه، کاربر فعلی، charset اتصال، نوع اتصال (socket یا TCP)
SOURCE file.sqlاجرای فایل از داخل کلاینت
\cلغو دستوری که نیمه‌کاره تایپ شده
SHOW CREATE TABLE t\Gتعریف کامل جدول، شامل ایندکس‌ها و charset

ساخت دیتابیس و کاربر برنامه

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

CREATE DATABASE carpet_shop
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_0900_ai_ci;

CREATE USER 'shop_app'@'localhost' IDENTIFIED BY 'Rug$Kashan2025';
CREATE USER 'shop_app'@'172.18.%'  IDENTIFIED BY 'Rug$Kashan2025';  -- شبکه‌ی داکر

GRANT SELECT, INSERT, UPDATE, DELETE ON carpet_shop.* TO 'shop_app'@'localhost';
GRANT SELECT, INSERT, UPDATE, DELETE ON carpet_shop.* TO 'shop_app'@'172.18.%';

SHOW GRANTS FOR 'shop_app'@'localhost';

در MySQL هویت کاربر ترکیب «نام + میزبان» است؛ 'shop_app'@'localhost' و 'shop_app'@'%' دو کاربر کاملاً جدا با رمز و دسترسی جدا هستند. برای مایگریشن‌های جنگو یا لاراول معمولاً دسترسی‌های CREATE, ALTER, INDEX, DROP, REFERENCES هم لازم است؛ در فصل هفتم یاد می‌گیریم آن را به یک کاربر جدای «مهاجرت» بدهیم.

ابزار گرافیکی

ابزارنقطه‌ی قوتضعف
MySQL Workbenchرسمی، طراحی ER و Performance Reportsسنگین، گاهی ناپایدار با نسخه‌های جدید سرور
DBeaver Communityرایگان، چنددیتابیسی، ویرایشگر داده‌ی عالیتنظیمات زیاد، مصرف حافظه‌ی Java
phpMyAdminروی هاست‌ها آماده استبرای جدول بزرگ و ایمپورت حجیم مناسب نیست

نکته‌هایی که کمتر کسی می‌داند

  • در لینوکس -h localhost یعنی اتصال با Unix socket و -h 127.0.0.1 یعنی TCP؛ این دو به کاربرهای متفاوتی تطبیق می‌خورند و علت بسیاری از خطاهای Access denied همین است.
  • با mysql_config_editor set --login-path=shop -u admin -p رمز به شکل مبهم‌شده در ~/.mylogin.cnf ذخیره می‌شود و بعد فقط mysql --login-path=shop می‌زنید؛ رمز در تاریخچه‌ی shell و فهرست پردازه‌ها دیده نمی‌شود.
  • در PowerShell عملگر < برای ورودی فایل کار نمی‌کند؛ به‌جای آن mysql -u admin -p carpet_shop -e "source schema.sql" بزنید.
  • گزینه‌ی --safe-updates (یا نام بامزه‌اش --i-am-a-dummy) را در بخش [mysql] فایل تنظیمات بگذارید تا UPDATE و DELETE بدون WHERE کلیدی در کلاینت اجرا نشوند.
  • در MySQL 8 دستور GRANT دیگر کاربر نمی‌سازد؛ اول باید CREATE USER بزنید. آموزش‌های قدیمی که GRANT ... IDENTIFIED BY دارند خطای نحوی می‌دهند.

برای ذخیره‌ی پیشرفت و شرکت در آزمون، وارد شوید — رایگان است.