ابزار کار هر روز
کلاینت خط فرمان 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دارند خطای نحوی میدهند.