Skip to content

Вступ

Зберігання структурованих даних — це невіднятна частина роботи більшості застосунків. Чим більше в застосунку користувачів, тим більше даних йому потрібно зберігати. Для того, щоб їх зберігання було ефективним та надійним, потрібно ознайомитись з тим, як працюють бази даних, як їх будувати, та які існують адміністративні задачі, повʼязані з базами даних. Саме ці теми ми й розглянемо в цьому модулі.

Вивчати бази даних ми будемо на прикладі MySQL — системи керування базами даних з відкритим кодом. MySQL дуже часто застосовується, коли потрібна реляційна база даних, адже вона безкоштовна та відносно проста у використанні.

Системи керування базами даних мають клієнт-серверну архітектуру: самі бази даних зберігаються на сервері, а SQL-запити та інші команди виконують клієнти.

Встановлення сервера

Серверну частину, тобто саму систему керування базами даних, ми запустимо на віртуальній машині під керуванням Ubuntu. Переконайся, що на твоїй віртуальній машині виділено достатньо ресурсів (1 ядро процесора, 1 гігабайт оперативної пам'яті, та 20 гігабайтів диска) та що ти можеш під'єднатися до віртуальної машини за допомогою SSH.

Щоб встановити сервер MySQL, на віртуальній машині потрібно виконати дві команди. Перша оновить локальний список доступних пакетів в репозиторіях, а друга встановить MySQL-сервер:

sudo apt update 
sudo apt install mysql-server  

Сервер MySQL на Linux запускається як сервіс під назвою mysql. Після встановлення, можна перевірити його статус:

systemctl status mysql

Підключення до сервера

З віртуальної машини під'єднатися до системи керування базами даних можна за допомогою клієнта, який встановився автоматично разом із сервером:

sudo mysql 

Запущений клієнт — це інтерактивна програма, у якій можна виконувати SQL-запити та команди MySQL, а для того, щоб з неї вийти, потрібно виконати команду exit:

exit

Створення нового користувача

Тепер розберемось, чому для підключення з віртуальної машини ми виконали саме цю команду. Для цього в запущеному клієнті mysqlвиконаємо наступний запит:

SELECT user,plugin FROM mysql.User;

Де:

  • mysql — це ім'я бази даних, яка зберігає системну інформацію, необхідну для роботи сервера бази даних;
  • User — це ім'я таблиці з користувачами.

MySQL підтримує різні механізми аутентифікації користувачів. За замовчуванням вона має користувача root, для якого встановлений механізм аутентифікації auth_socket. З цим механізмом MySQL використовує користувача, під яким запущений клієнт. Оскільки ми запустили клієнта з sudo, тобто під користувачем root, то від імені цього користувача ми і здійснювали підключення. MySQL перевірив що в таблиці з користувачами є користувач root та дозволив нам підключення клієнта до цього серверу.

Користувача root з таким механізмом аутентифікації ми зможемо використовувати лише якщо підключатимемось з тієї ж віртуальної машини, де встановлений сервер. Для того, щоб мати можливість підключатись зі свого компʼютера, потрібно створити окремого користувача, з іншим методом аутентифікації:

​​CREATE USER 'mysqluser'@'ip' IDENTIFIED BY 'P@ssw0rd';

Де:

  • mysqluser — це ім'я нового користувача;
  • ip — це IP-адреса, з якої може підключатись новий користувач. Там може бути конкретна IP-адреса, localhost (тоді користувач зможе підключатись лише з віртуальної машини, на яку встановлено MySQL-сервер), або %, який позначає що користувач може під'єднатися до сервера з будь-якої IP-адреси.

Налаштування прав доступу

Далі необхідно налаштувати права для нового користувача. Для цього треба виконати наступну команду:

GRANT ALL PRIVILEGES ON *.* TO 'mysqluser'@'%';

💡 Такі права дозволяють користувачу виконувати всі операції над усіма базами даних (як користувачу root).

Підключення до сервера з новим користувачем

Закриємо клієнта та спробуємо під'єднатися з користувачем, якого ми щойно створили:

exit
mysql -u mysqluser -p 
show databases; 

Клієнт запросить у тебе пароль — з таким механізмом аутентифікації ми зможемо підключатись до цього серверу баз даних з інших компʼютерів.

bind-address

Перед тим, як перейти до налаштування клієнтів, є ще одна річ, яку потрібно виправити — bind-address. MySQL, як і вебсервер, має конфігурацію listener, якій потрібно вказати IP-адресу, на яку сервер буде приймати запити. Ця конфігурація розміщена у файлі /etc/mysql/mysql.conf.d/mysqld.cnf.

💡 Перед тим, як вносити зміни в файл, зроби його резервну копію, щоб у випадку якоїсь проблеми можна було легко відновити роботу сервера бази даних, і лише після цього редагуй файл:

sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf.backup 
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

За замовчуванням, bind-address має значення 127.0.0.1. Тобто сервер буде приймати запити тільки від клієнтів на тій же віртуальній машині. Для того, щоб дозволити підключення до сервера за будь-якою IP-адресою, треба встановити bind-address 0.0.0.0. Для того, щоб застосувати ці зміни, потрібно перезавантажити сервіс mysql:

sudo systemctl restart mysql

Якщо конфігурація не містить помилок, то після перезапуску сервіс буде в запущеному стані:

systemctl status mysql

💡 Якщо після внесення змін у файл у тебе не запускається сервіс, перевір чи коректно були внесені зміни. Якщо ти не можеш знайти помилку, то в пригоді стане його резервна копія.

Встановлення клієнта

Клієнтську частину MySQL, якою ми користуватимемось для виконання SQL запитів, ми запускатимемо безпосередньо на твоєму комп'ютері. Для того, щоб під'єднатися до бази даних, ми використовуватимемо MySQL Workbench — інтегроване середовище розробки баз даних, яке дозволяє виконувати SQL-запити, створювати та керувати базами даних, а також виконувати інші адміністративні задачі.

На macOS

Спочатку потрібно завантажити інсталятор. Щоб обрати правильну версію, відкрий вікно інформації про систему (About This Mac). Тут нас цікавить Chip: якщо в тебе Apple M1 або Apple M2, тобі потрібна версія ARM, а якщо Intel — x86.

💡 Реєструватись для завантаження інсталятора не обовʼязково.

Запусти інсталятор, слідуй інструкціям, а після встановлення — запусти програму та створи нове підключення:

  1. Придумай імʼя підключенню, наприклад, mate-database-server.
  2. У полі hostname введи IP-адресу своєї віртуальної машини — ту, яка використовувалась для підключення по SSH до віртуальної машини.
  3. У полі username введи ім’я MySQL-користувача та пароль.
  4. Натисни кнопку Test connection. Якщо усі дані були введені вірно, то в тебе має зʼявитись відповідне повідомлення.

Щоб під'єднатися до сервера, двічі клікни по створеному підключенню. Далі ти зможеш виконувати наступні операції:

  • писати та виконувати SQL-запити до сервера бази даних;
  • зберігати файли з запитами на свій компʼютер, та редагувати існуючі файли з SQL-запитами;
  • виконувати адміністративні задачі, наприклад, керування користувачами.

На Windows

Спочатку завантаж інсталятор.

💡 Реєструватись для завантаження інсталятора не обовʼязково.

Запусти інсталятор, слідуй інструкціям, а після встановлення — запусти програму та створи нове підключення:

  1. Придумай імʼя підключенню, наприклад, mate-database-server.
  2. У полі hostname введи IP-адресу своєї віртуальної машини — ту, яка використовувалась для підключення по SSH до віртуальної машини.
  3. У полі username введи ім’я MySQL-користувача та пароль.
  4. Натисни кнопку Test connection. Якщо усі дані були введені вірно, то в тебе має зʼявитись відповідне повідомлення.

Щоб під'єднатися до сервера, двічі клікни по створеному підключенню. Далі ти зможеш виконувати наступні операції:

  • писати та виконувати SQL-запити до сервера бази даних;
  • зберігати файли з запитами на свій компʼютер, та редагувати існуючі файли з SQL-запитами;
  • виконувати адміністративні задачі, наприклад, керування користувачами.