يك سيستم مديريت پايگاه داده منبع باز است كه معمولاً به عنوان بخشي از پشته محبوب LAMP (Linux ، Apache ، MySQL ، PHP / Python / Perl) نصب مي شود. اين سيستم يك مدل رابطه اي را پياده سازي مي كند و براي مديريت داده هاي خود از زبان پرس و جوي ساختاريافته (معروف به SQL) استفاده مي كند.
در اين آموزش نحوه نصب MySQL نسخه 8 بر روي سرور مجازي Ubuntu 20.04 بررسي مي شود. با تكميل آن ، شما يك پايگاه داده رابطه اي در حال كار خواهيد داشت كه مي توانيد براي ساختن وب سايت يا برنامه بعدي خود استفاده كنيد.

پيش نيازها
براي دنبال كردن اين آموزش ، به موارد زير نياز داريد:
• يك سرور مجازي Ubuntu 20.04 با يك كاربر ادمين غير ريشه و فايروال تنظيم شده با UFW . براي راه اندازي ، راهنماي ستاپ اوليه سرور مجازي براي اوبونتو 20.04 را دنبال كنيد.

مرحله 1 – نصب MySQL
در Ubuntu 20.04 مي توانيد MySQL را با استفاده از مخزن بسته APT نصب كنيد. در زمان نوشتن اين مقاله، نسخه MySQL موجود در مخزن پيش فرض اوبونتو نسخه 8.0.19 است.
براي نصب آن ، اگر اخيراً اين كار را نكرده ايد ، فهرست بسته را روي سرور مجازي خود به روز كنيد:
$ sudo apt update

سپس بسته mysql-server را نصب كنيد:
$ sudo apt install mysql-server

اين كار MySQL را نصب مي كند ، اما از شما نميخواهد كه رمز عبوري تنظيم كنيد يا تغييرات ديگري در پيكربندي ايجاد كنيد. از آنجا كه اين امر باعث مي شود نصب MySQL ناامن باشد ، در ادامه به اين موضوع خواهيم پرداخت.

مرحله 2 – پيكربندي MySQL
براي نصب هاي جديد MySQL ، بهتر است اسكريپت امنيتي شامل DBMS را اجرا كنيد. اين اسكريپت برخي از گزينه هاي پيش فرض با ايمني كمتر را براي مواردي مانند ورود به سيستم ريشه از راه دور و كاربران نمونه تغيير مي دهد.
اسكريپت امنيتي را با sudo اجرا كنيد:
$ sudo mysql_secure_installation

اين امر مجموعه اي از اعلان ها را به شما نمايش ميدهد كه بتوانيد برخي از گزينه هاي امنيتي نصب MySQL خود را تغيير دهيد. اولين سؤال از شما ميپرسد كه آيا مي خواهيد افزونه Validate Password را تنظيم كنيد ، كه مي تواند براي تست قدرت رمز ورود MySQL استفاده شود.
اگر تصميم به تنظيم افزونه اعتبار سنجي گذرواژه بگيريد ، اسكريپت از شما مي خواهد كه يك سطح اعتبار رمز عبور را انتخاب كنيد. قوي ترين سطح – كه شما با وارد كردن 2 انتخاب مي كنيد – به حداقل 8 كاراكتر نياز دارد و شامل تركيبي از حروف بزرگ ، حروف كوچك ، عدد و علائم خاص است:
Output
Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: Y

There are three levels of password validation policy:

LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:
2

صرف نظر از اين كه آيا مي خواهيد افزونه رمز عبور معتبر را انتخاب كنيد ، اعلان بعدي تعيين رمز عبور براي كاربر ريشه MySQL خواهد بود. Enter را بزنيد و رمز عبور ايمن را تاييد كنيد:
Output
Please set the password for root here.

New password:

Re-enter new password:

اگر از افزونه اعتبار سنجي گذرواژه استفاده كرده ايد ، در مورد قدرت رمزعبور جديد خود بازخورد دريافت خواهيد كرد. سپس اسكريپت از شما سؤال مي كند كه آيا مي خواهيد رمز عبوري را كه وارد كرده ايد ادامه دهيد يا مي خواهيد يك رمز جديد را وارد كنيد. با فرض اينكه از قدرت رمز عبوري كه تازه وارد كرده ايد راضي هستيد ، Y را براي ادامه اسكريپت وارد كنيد:
Output
Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y

از اينجا به بعد ، مي توانيد Y و سپس ENTER را فشار دهيد تا پيش فرض براي همه سؤالات بعدي را بپذيريد. با اين كار برخي از كاربران ناشناس و بانك اطلاعاتي تستي حذف مي شوند ، ورود به سيستم ريشه از راه دور غيرفعال مي شود و اين قوانين جديد را بارگذاري مي كند تا MySQL فوراً با تغييراتي كه ايجاد كرده ايد منطبق شود.
توجه داشته باشيد كه حتي اگر يك رمز عبور براي كاربر ريشه MySQL تنظيم كرده ايد ، اين كاربر براي تأييد اعتبار با گذرواژه هنگام اتصال به پوسته MySQL پيكربندي نشده است. در صورت تمايل مي توانيد با دنبال كردن مرحله 3 اين تنظيمات را اعمال كنيد.

مرحله 3 – تنظيم تأييد اعتبار و امتيازات كاربر (اختياري)
در سيستم هاي اوبونتو كه MySQL 5.7 را اجرا مي كند (و نسخه هاي بعدي) ، كاربر ريشه MySQL براي تأييد اعتبار با استفاده از افزونه auth_socket بصورت پيش فرض و نه با گذرواژه تنظيم شده است. اين امر امنيت و قابليت استفاده بيشتر را در بسياري از موارد امكان پذير مي كند ، اما همچنين مي تواند مواردي را پيچيده تر كند كه شما نياز به دسترسي به كاربر توسط يك برنامه خارجي (مانند phpMyAdmin) داريد.
به منظور استفاده از رمز عبور براي اتصال به MySQL به عنوان root ، بايد روش تأييد اعتبار آن را از auth_socket به افزونه ديگري مانند caching_sha2_password يا mysql_native_password تغيير دهيد. براي اين كار ، اعلان MySQL را از پايانه خود باز كنيد:
$ sudo mysql

سپس ، با دستور زير بررسي كنيد كه هر يك از حسابهاي كاربري MySQL شما از كدام روش تأييد اعتبار استفاده ميكند:
Mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

Output
+——————+————————————————————————+———————–+———–+
| user | authentication_string | plugin | host |
+——————+————————————————————————+———————–+———–+
| debian-sys-maint | $A$005$lS|M#3K #XslZ.xXUq.crEqTjMvhgOIX7B/zki5DeLA3JB9nh0KwENtwQ4 | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| root | | auth_socket | localhost |
+——————+————————————————————————+———————–+———–+
5 rows in set (0.00 sec)

در اين مثال ، مي بينيد كه كاربر ريشه با استفاده از افزونه auth_socket ، در واقع تأييد اعتبار مي كند. براي پيكربندي حساب ريشه براي تأييد اعتبار با رمز عبور ، عبارت ALTER USER را اجرا كنيد تا افزونه احراز هويت مورد استفاده خود را تغيير داده و يك رمز عبور جديد تنظيم كنيد.
مطمئن شويد كه رمز عبور را به رمز عبور قوي به انتخاب خود تغيير مي دهيد و آگاه باشيد كه اين دستور رمز ريشه را كه در مرحله 2 تنظيم كرده ايد تغيير مي دهد:
Mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED WITH caching_sha2_password BY ‘password’;

توجه: جمله قبلي ALTER USER كاربر ريشه MySQL را براي تأييد اعتبار با افزونه caching_sha2_password تنظيم مي كند. طبق مطالب رسمي MySQL ، caching_sha2_password افزونه ارجح تأييد هويت MySQL است ، زيرا رمزگذاري ايمن تر پسورد را نسبت به نسخه قديمي تر به همراه دارد ، اما هنوز هم به طور گسترده استفاده مي شود ، mysql_native_password.
با اين حال ، بسياري از برنامه هاي PHP براي مثال phpMyAdmin – با اطمينان با caching_sha2_password كار نمي كنند. اگر قصد استفاده از اين پايگاه داده را با برنامه PHP داريد ، بهتر است تأييد اعتبار ريشه را با mysql_native_password انجام دهيد:
Mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘password’;

سپس ، PRUSILEGES FLUSH را اجرا كنيد كه به سرور مجازي مي گويد جداول اعطاي امتياز را مجدد لود كرده و
تغييرات جديد را اعمال كند:
Mysql> FLUSH PRIVILEGES;

روش هاي تأييد اعتبار استفاده شده توسط هر يك از كاربران خود را دوباره بررسي كنيد تا تأييد كنيد كه ريشه ديگر با استفاده از افزونه auth_socket احراز هويت نمي كند:
Mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

Output
+——————+————————————————————————+———————–+———–+
| user | authentication_string | plugin | host |
+——————+————————————————————————+———————–+———–+
| debian-sys-maint | $A$005$lS|M#3K #XslZ.xXUq.crEqTjMvhgOIX7B/zki5DeLA3JB9nh0KwENtwQ4 | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| root | *3636DACC8616D997782ADD0839F92C1571D6D78F | caching_sha2_password | localhost |
+——————+————————————————————————+———————–+———–+
5 rows in set (0.00 sec)

در اين مثال مي توانيد مشاهده كنيد كه كاربر ريشه MySQL اكنون با استفاده از caching_sha2_password تأييد اعتبار مي كند. پس از تأييد اين موضوع روي سرور مجازي خود ، مي توانيد از پوسته MySQL خارج شويد:
Mysql> exit

از طرف ديگر ، به نظر برخي ممكن است اتصال به MySQL با يك كاربر اختصاصي براي گردش كارشان مناسب تر باشد. براي ايجاد چنين كاربري ، بار ديگر پوسته MySQL را باز كنيد:
$ sudo mysql

توجه: اگر احراز هويت رمز عبور را براي ريشه فعال كرده ايد ، همانطور كه در پاراگراف هاي قبلي توضيح داده شد ، براي دسترسي به پوسته MySQL بايد از دستور ديگري استفاده كنيد. موارد زير كلاينت MySQL شما را با حق امتياز كاربر به طور منظم اجرا مي كند و شما فقط با تأييد اعتبار ، امتيازات ادمين را در بانك اطلاعات دريافت خواهيد كرد:
$ mysql -u root -p

از آنجا ، يك كاربر جديد ايجاد كرده و يك رمزعبور قوي به آن بدهيد:
Mysql> CREATE USER ‘sammy’@’localhost’ IDENTIFIED BY ‘password’;

سپس امتيازات مناسب را به كاربر جديد خود اعطا كنيد. به عنوان مثال ، شما مي توانيد امتيازات كاربر را به تمام جداول موجود در ديتابيس و همچنين قدرت اضافه كردن ، تغيير و حذف امتيازهاي كاربر با اين دستور اعطا كنيد:
Mysql> GRANT ALL PRIVILEGES ON *.* TO ‘sammy’@’localhost’ WITH GRANT OPTION;

توجه داشته باشيد كه در اين مرحله ، ديگر نيازي به اجراي فرمان FLUSH PRIVILEGES نداريد. اين دستور فقط در صورت تغيير جدول هاي اعطاي امتياز با استفاده از عباراتي مانند INSERT ، UPDATE يا DELETE مورد نياز است. از آنجا كه شما به جاي تغيير يك كاربر موجود، كاربر جديدي ايجاد كرده ايد،FLUSH PRIVILEGES در اينجا غير ضروري است.
سپس ، از پوسته MySQL خارج شويد:
Mysql> exit

در آخر ، بياييد نصب MySQL را آزمايش كنيم.
مرحله 4 – تست MySQL
صرف نظر از نحوه نصب آن ، MySQL بايد به صورت خودكار شروع به كار كند. براي آزمايش اين موضوع ، وضعيت آن را بررسي كنيد.
$ systemctl status mysql.service

خروجي مشابه زير را مشاهده خواهيد كرد:
Output
● mysql.service – MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2020-04-21 12:56:48 UTC; 6min ago
Main PID: 10382 (mysqld)
Status: “Server is operational”
Tasks: 39 (limit: 1137)
Memory: 370.0M
CGroup: /system.slice/mysql.service
└─10382 /usr/sbin/mysqld

اگر MySQL در حال اجرا نيست ، مي توانيد آن را با sudo systemctl start mysql شروع كنيد.
براي بررسي بيشتر، مي توانيد با استفاده از ابزار mysqladmin ، كه يك كلاينت است و به شما امكان اجراي دستورات ادمين را مي دهد ، به پايگاه داده وصل شويد. به عنوان مثال ، اين دستور مي گويد به عنوان ريشه به MySQL متصل شده (-u root) ، اعلان گذرواژه (-p) را پر كرده و نسخه را برگردانيد.
$ sudo mysqladmin -p -u root version

بايد خروجي مشابه اين را ببينيد:
Output
mysqladmin Ver 8.0.19-0ubuntu5 for Linux on x86_64 ((Ubuntu))
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Server version 8.0.19-0ubuntu5
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/run/mysqld/mysqld.sock
Uptime: 10 min 44 sec

Threads: 2 Questions: 25 Slow queries: 0 Opens: 149 Flush tables: 3 Open tables: 69 Queries per second avg: 0.038

اين بدان معني است كه MySQL در حال كار است.
نتيجه
اكنون يك ستاپ اوليه MySQL نصب شده در سرور مجازي خود داريد. در اينجا چند نمونه از مراحل بعدي كه مي توانيد انجام دهيد آورده شده است:
• يك پشته LAMP تنظيم كنيد
• پرس و جوهاي در حال اجرا را با SQL تمرين كنيد