نصب MySQL بر روی Ubuntu 18

آشنایی با رایانش ابری
نصب MySQL بر روی Ubuntu 18

MySQL یک سیستم مدیریت پایگاه داده متن باز است.این سیستم از یک پایگاه داده رابطه‌ای (Structured Query Language) برای مدیریت داده‌های خود استفاده می‌کند.

MySQL چیست؟

MySQL یک سیستم مدیریت پایگاه داده متن باز است که معمولاً در قالب بخشی از بسته محبوب (LAMP (linux، apache، mysql، php/perl/python نصب می‌شود. این سیستم از یک پایگاه داده رابطه‌ای (Structured Query Language) برای مدیریت داده‌های خود استفاده می‌کند.

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

  • ابتدا package index خود را به‌ روز کنید
  • سپس بسته mysql-server را نصب کنید
  • در گام بعد اسکریپت امنیتی زیر را اجرا نمایید.

sudo apt update

sudo apt install mysql-server

sudo mysql_secure_installation

 

در این آموزش نحوه نصب MySQL نسخه 5.7 در سرور Ubuntu 18.04 برای شما توضیح داده می‌شود.

 

پیش نیازها

برای دریافت بهتر این آموزش، شما به یک سرور  Ubuntu 18.04، یک کاربر غیر ریشه با قابلیت‌های sudo و یک فایروال نیاز دارید.

 

گام اول – نصب (Installing)

برای نصب MySQL،مindex package را روی سرور خود با دستور apt بروز سازی کنید.

sudo apt update

 

سپس بسته پیش فرض را نصب کنید:

sudo apt install mysql-server

 

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

 

گام دوم - پیکربندی (Configuring)

 برای نصب‌های جدید، بهتر است اسکریپت امنیتی زیر را اجرا کنید. این اسکریپت برخی از گزینه‌های پیش فرض را که امنیت پایینی دارند، تغییر می‌دهد. ورود به سیستم از راه دور با ریشه (روت) و sample users از جمله این موارد است. در صورتی‌که از نسخه‌های قدیمی MySQL استفاده می‌کنید، بایستی دایرکتوری داده را نیز به صورت دستی تنظیم کنید، اما در نسخه 5.7 این کار به صورت خودکار انجام می‌شود.

sudo mysql_secure_installation

 

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

اولین هشدار در مورد افزونه Validate Password از شما خواهد پرسید؛ این گزینه به قوی‌تر شدن رمز ورود MySQL کمک می‌کند. هشدار بعدی برای تنظیم رمز عبور کاربر ریشه است. بایستی رمز عبور مطمئن مورد نظر خود را وارد کرده و سپس تأیید کنید.

از اینجا به بعد، می‌توانید با وارد کردن Y و سپس فشار دادن دکمه ENTER تنظیمات پیش فرض برای همه سؤالات بعدی را بپذیرید. با این کار برخی از کاربران ناشناس و پایگاه‌های داده‌ آزمایشی پاک می شوند، ورود از راه دور به سیستم با کاربر ریشه غیرفعال شده و قوانین جدید بارگذاری می شوند؛ بگونه‌ای که MySQL فوراً به تغییراتی که شما انجام داده‌اید احترام بگذارد و آنها را اجرا نماید.

برای نصب اولیه دایرکتوری داده MySQL، می‌توانید از دستور mysql_install_db برای نسخه‌های قبل از 5.7.6 و از دستور mysqld – initialize برای 5.7.6 و بعد از آن استفاده کنید. البته همانطور که در مرحله 1 گفته شد، اگر MySQL را از توزیع Debian نصب کرده‌اید، دایرکتوری داده به طور خودکار ساخته می‌شود و نیازی به انجام اقدام از جانب شما نیست. در هر صورت، اگر دستور را اجرا کنید، خطای زیر را مشاهده خواهید کرد:

mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists). . .2018-04-23T13:48:00.572066Z 0 [ERROR] Aborting

 

دقت داشته باشید که حتی اگر برای کاربر ریشه رمز عبور تنظیم کرده باشید، تصدیق اعتبار رمز این کاربر هنگام اتصال به شل MySQL، به دلیل پیکربندی نشدن انجام نمی‌شود. در صورت تمایل می‌توانید با دنبال کردن مرحله 3 این تنظیم را انجام دهید:

 

گام سوم - تنظیم تأیید اعتبار کاربر و امتیازات (optional)

در سیستم‌های اوبونتو که MySQL 5.7 و نسخه‌های بالاتر را اجرا می‌کند، تائید اعتبار کاربر ریشه MySQL بصورت پیش فرض با استفاده از پلاگین auth_socket  تنظیم شده است و رمز عبور تقشی در این فرآیند ندارد. در عمده موارد، این تنظیمات‌ امنیت و قابلیت استفاده بیشتری را به همراه دارد،، اما در برخی مواقع مثلا زمانی ‌که می‌خواهید به یک برنامه خارجی مانند phpmyadmin اجازه دسترسی به کاربر را بدهید، منجر به پیچیده‌تر شدن فرآیند می‌شود.

اگر بخواهید با پسورد به MySQL به عنوان ریشه وصل شوید، باید روش تأیید اعتبار آن را از auth_socket  به mysql_native_password  تغییر دهید.

برای این کار، ‌MySQL prompt  را از طریق ترمینال خود باز کنید:

sudo mysql

 

سپس، با دستور زیر بررسی کنید که کدام روش تأیید اعتبار برای هر یک از حساب‌های کاربری MySQL تعریف شده است:

Mysql > SELECT user,authentication_string,plugin,host FROM mysql.user;

 

Output

host  plugin  authentication_string user 

localhost

localhost

localhost

localhost

auth_socket

mysql_native_password

mysql_native_password

mysql_native_password

 

*THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE

*THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE

*CC744277A401A7D25BE1CA89AFF17BF607F876FF

root

mysql.session

mysql.sys

debian-sys-maint

4 rows in set (0.00 sec)

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

برای پیکربندی ریشه و تأیید اعتبار آن با یک رمز عبور، دستور ALTER USER زیر را اجرا کنید. مطمئن شوید رمز عبور را به یک رمز عبور قوی تغییر داده‌اید و توجه داشته باشید که این دستور، رمز اصلی را که در مرحله 2 تنظیم کرده‌اید، تغییر خواهد داد:

 Mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

 

سپس،  FLUSH PRIVILEGES را اجرا نمایید تا تغییرات اعمال شده و grant table مجدد راه‌اندازی شود.

 

 Mysql> FLUSH PRIVILEGES;

روش‌های تأیید اعتبار استفاده شده توسط هر یک از کاربران خود را دوباره بررسی کنید تا مطمئن شوید که کاربر ریشه نمی‌تواند با استفاده از پلاگین auth_socket احراز هویت نماید:

 Mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

 

Output

host  plugin  authentication_string user 

localhost

localhost

localhost

localhost

mysql_native_password

mysql_native_password

mysql_native_password

mysql_native_password

*3636DACC8616D997782ADD0839F92C1571D6D78F

*THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE

*THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE

*CC744277A401A7D25BE1CA89AFF17BF607F876FF

root

mysql.session

mysql.sys

debian-sys-maint

4 rows in set (0.00 sec)

 

همانطور که در مثال بالا مشاهده می‌کنید تائید اعتبار کاربر ریشه MySQL با استفاده از یک رمز انجام می‌شود. پس از تأیید این موضوع روی سرور خود، می توانید از شل 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 ندارید. زیرا شما یک کاربر جدید ایجاد کرده‌اید و کاربری که از قبل موجود بوده را تغییر نداده‌اید، لذا استفاده از FLUSH PRIVILEGES  در اینجا غیر ضروری است.

این دستور فقط در زمان‌هایی که از عبارات Insert، ِDelete و یا Update برای تغییر grant tables استفاده می‌کنید، مورد نیاز است.

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

Mysql> exit

 

 

گام چهارم - تست دیتابیس (Testing MySQL)

در مرحله آخر دیتابیس را تست می کنیم. صرف نظر از نحوه نصب، MySQL  باید به صورت خودکار شروع به کار کند. برای آزمایش این موضوع، وضعیت سرویس را بررسی می‌کنیم:

  $ systemctl status mysql.service

 

output

mysql.service - MySQL Community Server

Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: en

Active: active (running) since Wed 2018-04-23 21:21:25 UTC; 30min ago

Main PID: 3754 (mysqld) 

Tasks: 28

Memory: 142.3M

CPU: 1.994s   CGroup: /system.slice/mysql.service          

└─3754 /usr/sbin/mysqld

 

اگر MySQL بصورت خودکار اجرا نشد، می‌توانید آن را با sudo systemctl start mysql راه‌اندازی کنید.

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

به عنوان مثال، این دستور می گوید اتصال به MySQL به عنوان ریشه (u root-) با رمز عبور (p-) اجرا شود و نسخه سرویس نمایش یابد:

$ sudo mysqladmin -p -u root version

 خروجی دستور بدین شکل خواهد بود:

 Output

 mysqladmin  Ver 8.42 Distrib 5.7.21, for Linux on x86_64

Copyright (c) 2000, 2018, 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      5.7.21-1ubuntu1

Protocol version    10

Connection      Localhost via UNIX socket

UNIX socket     /var/run/mysqld/mysqld.sock

Uptime:         30 min 54 sec

Threads: 1  Questions: 12  Slow queries: 0  Opens: 115  Flush tables: 1  Open tables: 34  Queries per second avg: 0.006  

این خروجی به معنای بالا و در حال اجرا بودن سرویس است.

 

...
...