Let's Go پاسخ‌های مبتنی بر پایگاه داده › راه‌اندازی MySQL (Setting Up MySQL)
قبلی · فهرست · بعدی
فصل 4.1.

راه‌اندازی MySQL (Setting Up MySQL)

اگر در حال دنبال کردن هستید، در این مرحله باید MySQL را روی کامپیوتر خود نصب کنید. مستندات رسمی MySQL شامل دستورالعمل‌های نصب جامع برای انواع سیستم‌عامل‌ها است، اما اگر از Mac OS استفاده می‌کنید، باید بتوانید آن را با این دستور نصب کنید:

$ brew install mysql

یا اگر از توزیع لینوکسی که از apt پشتیبانی می‌کند (مانند دبیان و اوبونتو) استفاده می‌کنید، می‌توانید آن را با این دستور نصب کنید:

$ sudo apt install mysql-server

در حین نصب MySQL ممکن است از شما خواسته شود که برای کاربر root رمز عبور تعیین کنید. اگر این کار را انجام دادید، به خاطر داشته باشید که در مرحله بعد به آن نیاز خواهید داشت.

ایجاد ساختار پایگاه داده (Scaffolding the Database)

پس از نصب MySQL باید بتوانید به عنوان کاربر root از طریق ترمینال به آن متصل شوید. دستور اتصال به نسخه MySQL که نصب کرده‌اید بستگی دارد. برای MySQL 5.7 و جدیدتر باید بتوانید با تایپ این دستور متصل شوید:

$ sudo mysql
mysql>

اما اگر این کار نکرد، دستور زیر را امتحان کنید و رمز عبوری که در حین نصب تعیین کرده‌اید را وارد کنید.

$ mysql -u root -p
Enter password:
mysql>

پس از اتصال، اولین کاری که باید انجام دهیم ایجاد یک پایگاه داده (Database) در MySQL برای ذخیره تمام داده‌های پروژه‌مان است. دستورات زیر را در خط فرمان mysql کپی و پیست کنید تا یک پایگاه داده جدید snippetbox با استفاده از کدگذاری (Encoding) UTF8 ایجاد کنید.

-- Create a new UTF-8 `snippetbox` database.
CREATE DATABASE snippetbox CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- Switch to using the `snippetbox` database.
USE snippetbox;

سپس دستور SQL زیر را کپی و پیست کنید تا یک جدول جدید snippets برای نگهداری متن‌های کوتاه برای برنامه‌مان ایجاد کنید:

-- Create a `snippets` table.
CREATE TABLE snippets (
    id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(100) NOT NULL,
    content TEXT NOT NULL,
    created DATETIME NOT NULL,
    expires DATETIME NOT NULL
);

-- Add an index on the created column.
CREATE INDEX idx_snippets_created ON snippets(created);

هر رکورد (Record) در این جدول دارای یک فیلد id عدد صحیح خواهد بود که به عنوان شناسه منحصر به فرد (Unique Identifier) برای متن کوتاه عمل می‌کند. همچنین دارای یک متن کوتاه title خواهد بود و محتوای متن کوتاه در فیلد content ذخیره خواهد شد. همچنین برخی از متادیتاها (Metadata) درباره زمان‌هایی که متن کوتاه ایجاد (Created) شده و زمانی که منقضی (Expires) می‌شود را نگه می‌داریم.

بیایید همچنین برخی از ورودی‌های نمونه را به جدول snippets اضافه کنیم (که در چند فصل بعدی از آن‌ها استفاده خواهیم کرد). من از برخی هایکوهای کوتاه به عنوان محتوای متن‌های کوتاه استفاده می‌کنم، اما واقعاً مهم نیست که چه محتوایی دارند.

-- Add some dummy records (which we'll use in the next couple of chapters).
INSERT INTO snippets (title, content, created, expires) VALUES (
    'An old silent pond',
    'An old silent pond...\nA frog jumps into the pond,\nsplash! Silence again.\n\n– Matsuo Bashō',
    UTC_TIMESTAMP(),
    DATE_ADD(UTC_TIMESTAMP(), INTERVAL 365 DAY)
);

INSERT INTO snippets (title, content, created, expires) VALUES (
    'Over the wintry forest',
    'Over the wintry\nforest, winds howl in rage\nwith no leaves to blow.\n\n– Natsume Soseki',
    UTC_TIMESTAMP(),
    DATE_ADD(UTC_TIMESTAMP(), INTERVAL 365 DAY)
);

INSERT INTO snippets (title, content, created, expires) VALUES (
    'First autumn morning',
    'First autumn morning\nthe mirror I stare into\nshows my father''s face.\n\n– Murakami Kijo',
    UTC_TIMESTAMP(),
    DATE_ADD(UTC_TIMESTAMP(), INTERVAL 7 DAY)
);

ایجاد یک کاربر جدید (Creating a New User)

از نظر امنیتی، ایده خوبی نیست که به عنوان کاربر root از یک برنامه وب به MySQL متصل شوید. در عوض بهتر است یک کاربر پایگاه داده با مجوزهای محدود (Limited Permissions) بر روی پایگاه داده ایجاد کنید.

بنابراین، در حالی که هنوز به خط فرمان MySQL متصل هستید، دستورات زیر را اجرا کنید تا یک کاربر جدید web با مجوزهای SELECT، INSERT، UPDATE و DELETE فقط بر روی پایگاه داده ایجاد کنید.

CREATE USER 'web'@'localhost';
GRANT SELECT, INSERT, UPDATE, DELETE ON snippetbox.* TO 'web'@'localhost';
-- Important: Make sure to swap 'pass' with a password of your own choosing.
ALTER USER 'web'@'localhost' IDENTIFIED BY 'pass';

پس از انجام این کار، exit را تایپ کنید تا از خط فرمان MySQL خارج شوید.

آزمایش کاربر جدید (Testing the New User)

اکنون باید بتوانید به عنوان کاربر web به پایگاه داده snippetbox متصل شوید. هنگامی که از شما خواسته شد، رمز عبوری که به تازگی تعیین کرده‌اید را وارد کنید.

$ mysql -D snippetbox -u web -p
Enter password:
mysql>

اگر مجوزها به درستی کار می‌کنند، باید متوجه شوید که می‌توانید عملیات SELECT و INSERT را به درستی بر روی پایگاه داده انجام دهید، اما دستورات دیگر مانند DROP TABLE و GRANT شکست خواهند خورد.

mysql> SELECT id, title, expires FROM snippets;
+----+------------------------+---------------------+
| id | title                  | expires             |
+----+------------------------+---------------------+
|  1 | An old silent pond     | 2025-03-18 10:00:26 |
|  2 | Over the wintry forest | 2025-03-18 10:00:26 |
|  3 | First autumn morning   | 2024-03-25 10:00:26 |
+----+------------------------+---------------------+
3 rows in set (0.00 sec)

mysql> DROP TABLE snippets;
ERROR 1142 (42000): DROP command denied to user 'web'@'localhost' for table 'snippets'

واژه‌نامه اصطلاحات فنی

اصطلاح فارسی معادل انگلیسی توضیح
راه‌اندازی MySQL Setting Up MySQL فرآیند نصب و پیکربندی اولیه پایگاه داده MySQL
ایجاد ساختار پایگاه داده Scaffolding the Database ایجاد ساختار اولیه پایگاه داده شامل جداول و روابط
پایگاه داده Database سیستم ذخیره‌سازی سازمان‌یافته داده‌ها
کدگذاری Encoding روش نمایش کاراکترها در کامپیوتر (مثل UTF8)
رکورد Record یک ردیف از داده در جدول پایگاه داده
شناسه منحصر به فرد Unique Identifier مقداری که هر رکورد را به طور منحصر به فرد مشخص می‌کند
متادیتا Metadata داده‌هایی که اطلاعات درباره داده‌های دیگر را توصیف می‌کنند
ایجاد Created زمان ایجاد یک رکورد در پایگاه داده
منقضی Expires زمان انقضای یک رکورد در پایگاه داده
مجوزهای محدود Limited Permissions دسترسی‌های محدود شده برای عملیات در پایگاه داده
کاربر ریشه Root User کاربر با بالاترین سطح دسترسی در پایگاه داده
دستورات SQL SQL Commands دستورات استاندارد برای تعامل با پایگاه داده