diff --git a/docs/books/web_services/03-application-servers.uk.md b/docs/books/web_services/03-application-servers.uk.md new file mode 100644 index 0000000000..e554f81307 --- /dev/null +++ b/docs/books/web_services/03-application-servers.uk.md @@ -0,0 +1,647 @@ +--- +author: Antoine Le Morvan +contributors: Steven Spencer, Ganna Zhyrnova +title: Частина 3. Сервери додатків +tags: + - web + - php + - php-fpm + - сервери додатків + - динамічна мова +--- + +## PHP та PHP-FPM + +У цьому розділі ви дізнаєтеся про PHP і PHP-FPM. + +**PHP** (**P**HP **H**ypertext **P**reprocessor) — вихідна мова сценаріїв, спеціально розроблена для розробки веб-додатків. У 2024 році PHP становив трохи менше 80% веб-сторінок, створених у світі. PHP є відкритим кодом і є ядром найвідоміших CMS (WordPress, Drupal, Joomla!, Magento тощо). + +**PHP-FPM** (**F**astCGI **P**rocess **M**anager) інтегровано в PHP з версії 5.3.3. Версія PHP FastCGI надає додаткові функції. + +**** + +**Цілі**: Ви дізнаєтеся, як: + +:heavy_check_mark: встановити сервер додатків PHP\ +:heavy_check_mark: налаштувати пул PHP-FPM\ +:heavy_check_mark: оптимізувати сервер додатків PHP-FPM + +:checkered_flag: **PHP**, **PHP-FPM**, **Application server** + +**Знання**: :star: :star: :star:\ +**Складність**: :star: :star: :star: + +**Час читання**: 30 хвилин + +**** + +### Загальні положення + +**CGI** (**C**common **G**ateway **I**interface) і **FastCGI** дозволяють спілкуватися між веб-сервером (Apache або Nginx) і мовою розробки (PHP, Python) , Java): + +- У випадку **CGI** кожен запит створює **новий процес**, який є менш ефективним у продуктивності. +- **FastCGI** покладається на **певну кількість процесів** для обробки запитів клієнтів. + +PHP-FPM, **крім кращої продуктивності**, забезпечує: + +- Можливість кращого **поділу програм**: запуск процесів з різними uid/gid, з персоналізованими файлами `php.ini`, +- Управління статистикою, +- Керування журналами, +- Динамічне керування процесами та перезапуск без переривання обслуговування («витончений»). + +!!! Note "Примітка" + +``` +Оскільки Apache має модуль PHP, php-fpm частіше використовується на сервері Nginx. +``` + +### Вибір версії PHP + +Rocky Linux, як і його вихідна версія, пропонує багато версій мови. Деякі з них досягли кінця свого життя, але зберігаються для розміщення історичних програм, які ще несумісні з новими версіями PHP. Перегляньте сторінку [підтримуваних версій](https://www.php.net/supported-versions.php) веб-сайту php.net, щоб вибрати підтримувану версію. + +Щоб отримати список доступних версій, просто введіть наступну команду: + +\=== "9.3 Список модулів PHP" + +```bash +$ sudo dnf module list php + +Rocky Linux 9 - AppStream +Name Stream Profiles Summary +php 8.1 [d] common [d], devel, minimal + +Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled +``` + +Репозиторій Remi пропонує новіші версії PHP, ніж репозиторій Appstream, включаючи версії 8.2 і 8.3. + +Щоб установити репозиторій Remi, виконайте таку команду: + +```bash +sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm +``` + +Увімкніть репозиторій Remi, виконавши таку команду: + +```bash +sudo dnf config-manager --set-enabled remi +``` + +Тепер ви можете активувати новіший модуль (PHP 8.3), ввівши таку команду: + +```bash +sudo dnf module enable php:remi-8.3 +``` + +\=== "8.9 Список модулів PHP" + +```bash +$ sudo dnf module list php + +Rocky Linux 8 - AppStream +Name Stream Profiles Summary +php 7.2 [d] common [d], devel, minimal PHP scripting language +php 7.3 common [d], devel, minimal PHP scripting language +php 7.4 common [d], devel, minimal PHP scripting language +php 8.0 common [d], devel, minimal PHP scripting language + +Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled +``` + +Rocky надає зі свого репозиторію AppStream різні модулі PHP. + +Ви зауважите, що стандартною версією Rocky 8.9 є 7.2, термін служби якої вже завершився на момент написання цієї статті. + +Ви можете активувати новіший модуль, ввівши таку команду: + +```bash +sudo dnf module enable php:8.0 +============================================================================================== +Package Architecture Version Repository Size +============================================================================================== +Enabling module streams: +httpd 2.4 +nginx 1.14 +php 8.0 + +Transaction Summary +============================================================================================== + +Is this ok [y/N]: + +Transaction Summary +============================================================================================== + +Is this ok [y/N]: y +Complete! +``` + +Тепер можна переходити до встановлення движка PHP. + +### Установка режиму PHP CGI + +Спочатку встановіть і використовуйте PHP у режимі CGI. Ви можете змусити його працювати лише з веб-сервером Apache та його модулем `mod_php`. Частина FastCGI (php-fpm) цього документа пояснює, як інтегрувати PHP у Nginx (а також Apache). + +Інсталяція PHP відносно тривіальна. Він складається з встановлення основного пакета та кількох модулів, які вам знадобляться. + +У наведеному нижче прикладі встановлюється PHP із модулями, які зазвичай встановлюються разом із ним. + +\=== "9.3 встановлення PHP" + +```bash +sudo dnf install php php-cli php-gd php-curl php-zip php-mbstring +``` + +Під час встановлення вам буде запропоновано імпортувати ключі GPG для сховищ epel9 (додаткові пакети для Enterprise Linux 9) і Remi. Введіть y, щоб імпортувати ключі: + +```bash +Extra Packages for Enterprise Linux 9 - x86_64 +Importing GPG key 0x3228467C: +Userid : "Fedora (epel9) " +Fingerprint: FF8A D134 4597 106E CE81 3B91 8A38 72BF 3228 467C +From : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-9 +Is this ok [y/N]: y +Key imported successfully +Remi's RPM repository for Enterprise Linux 9 - x86_64 +Importing GPG key 0x478F8947: +Userid : "Remi's RPM repository (https://rpms.remirepo.net/) " +Fingerprint: B1AB F71E 14C9 D748 97E1 98A8 B195 27F1 478F 8947 +From : /etc/pki/rpm-gpg/RPM-GPG-KEY-remi.el9 +Is this ok [y/N]: y +Key imported successfully +Running transaction check +Transaction check succeeded. +Running transaction test +Transaction test succeeded. + +Complete! +``` + +\=== "8.9 встановлення PHP" + +```bash +sudo dnf install php php-cli php-gd php-curl php-zip php-mbstring +``` + +Ви можете перевірити, чи відповідає встановлена версія очікуваній: + +\=== "9.3 перевірка версії PHP" + +```bash +$ php -v +PHP 8.3.2 (cli) (built: Jan 16 2024 13:46:41) (NTS gcc x86_64) +Copyright (c) The PHP Group +Zend Engine v4.3.2, Copyright (c) Zend Technologies +with Zend OPcache v8.3.2, Copyright (c), by Zend Technologies +``` + +\=== "8.9 перевірка версії PHP" + +```bash +$ php -v +PHP 7.4.19 (cli) (built: May 4 2021 11:06:37) ( NTS ) +Copyright (c) The PHP Group +Zend Engine v3.4.0, Copyright (c) Zend Technologies +with Zend OPcache v7.4.19, Copyright (c), by Zend Technologies +``` + +### Інтеграція Apache + +Щоб обслуговувати сторінки PHP у режимі CGI, ви повинні встановити сервер apache, налаштувати його, активувати та запустити. + +- Встановлення: + +```bash +sudo dnf install httpd +``` + +``` +активація: +``` + +```bash +sudo systemctl enable --now httpd +sudo systemctl status httpd +``` + +- Не забудьте налаштувати брандмауер: + +```bash +sudo firewall-cmd --add-service=http --permanent +sudo firewall-cmd --reload +``` + +Vhost за замовчуванням має працювати з коробки. PHP надає функцію `phpinfo()`, яка створює зведену таблицю його конфігурації. Корисно перевірити ефективність PHP. Однак будьте обережні, щоб не залишати такі тестові файли на своїх серверах. Вони становлять величезний ризик для безпеки вашої інфраструктури. + +Створіть файл `/var/www/html/info.php` (`/var/www/html` є каталогом vhost за замовчуванням конфігурації Apache за замовчуванням): + +```bash + +``` + +Використовуйте веб-браузер, щоб перевірити, чи сервер працює належним чином, перейшовши на сторінку [http://your-server-ip/info.php](http://your-server-ip/info.php). + +!!! Warning "Важливо" + +``` +Не залишайте файл `info.php` на своєму сервері! +``` + +### Встановлення режиму PHP CGI (PHP-FPM) + +Як зазначалося раніше, існує багато переваг перемикання веб-хостингу в режим PHP-FPM. + +Встановлення передбачає лише пакет php-fpm: + +```bash +sudo dnf install php-fpm +``` + +Оскільки php-fpm є системною службою, її необхідно активувати та запустити: + +```bash +sudo systemctl enable --now php-fpm +sudo systemctl status php-fpm +``` + +#### Конфігурація режиму PHP CGI + +Основний файл конфігурації – `/etc/php-fpm.conf`. + +```bash +include=/etc/php-fpm.d/*.conf +[global] +pid = /run/php-fpm/php-fpm.pid +error_log = /var/log/php-fpm/error.log +daemonize = yes +``` + +!!! Note "Примітка" + +``` +Конфігураційні файли php-fpm широко коментуються. Ідіть і подивіться! +``` + +Як бачите, файли в каталозі `/etc/php-fpm.d/` з розширенням `.conf` завжди включені. + +Оголошення пулу процесів PHP із назвою `www` за замовчуванням міститься в `/etc/php-fpm.d/www.conf`. + +```bash +[www] +user = apache +group = apache + +listen = /run/php-fpm/www.sock +listen.acl_users = apache,nginx +listen.allowed_clients = 127.0.0.1 + +pm = dynamic +pm.max_children = 50 +pm.start_servers = 5 +pm.min_spare_servers = 5 +pm.max_spare_servers = 35 + +slowlog = /var/log/php-fpm/www-slow.log + +php_admin_value[error_log] = /var/log/php-fpm/www-error.log +php_admin_flag[log_errors] = on +php_value[session.save_handler] = files +php_value[session.save_path] = /var/lib/php/session +php_value[soap.wsdl_cache_dir] = /var/lib/php/wsdlcache +``` + +| Інструкції | Опис | +| ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `[pool]` | Ім'я пулу процесів. Конфігураційний файл може містити декілька пулів процесів (ім’я пулу в дужках починає новий розділ). | +| `listen` | Визначає інтерфейс прослуховування або використовуваний сокет Unix. | + +#### Налаштування способу доступу до процесів php-fpm + +Існує два способи підключення. + +З «inet-інтерфейсом», наприклад: + +`listen = 127.0.0.1:9000`. + +Або з сокетом UNIX: + +`listen = /run/php-fpm/www.sock`. + +!!! Note "Примітка" + +``` +Використання сокета, коли веб-сервер і сервер PHP знаходяться на одній машині, усуває рівень TCP/IP і оптимізує продуктивність. +``` + +Під час роботи з інтерфейсом вам потрібно налаштувати `listen.owner`, `listen.group`, `listen.mode`, щоб вказати власника, групу власників і права сокета UNIX. **Попередження:** обидва сервери (веб і PHP) повинні мати права доступу до сокета. + +Працюючи з сокетом, ви повинні налаштувати `listen.allowed_clients`, щоб обмежити доступ до сервера PHP певними IP-адресами. + +Приклад: `listen.allowed_clients = 127.0.0.1` + +#### Статична або динамічна конфігурація + +Ви можете керувати процесами PHP-FPM статично або динамічно. + +У статичному режимі `pm.max_children` встановлює обмеження на кількість дочірніх процесів: + +```bash +pm = static +pm.max_children = 10 +``` + +Ця конфігурація починається з 10 процесів. + +У динамічному режимі PHP-FPM запускається з _найбільшої_ кількості процесів, визначеної значенням "pm.max_children". Спочатку він запускає деякі процеси, що відповідають `pm.start_servers`, зберігаючи принаймні значення `pm.min_spare_servers` для неактивних процесів і, щонайбільше, `pm.max_spare_servers` для неактивних процесів. + +Приклад: + +```bash +pm = dynamic +pm.max_children = 5 +pm.start_servers = 2 +pm.min_spare_servers = 1 +pm.max_spare_servers = 3 +``` + +PHP-FPM створить новий процес замість того, який обробив кілька запитів, еквівалентних `pm.max_requests`. + +За замовчуванням значення `pm.max_requests` дорівнює 0, тобто процеси ніколи не повторюються. Параметр "pm.max_requests" може бути привабливим для програм з витоками пам'яті. + +Третій режим роботи - це режим "ondemand". Цей режим запускає процес лише тоді, коли він отримує запит. Цей режим не є оптимальним для сайтів із сильним впливом і зарезервований для конкретних потреб (сайти зі слабкими запитами, сервер керування тощо). + +!!! Note "Примітка" + +``` +Конфігурація режиму роботи PHP-FPM необхідна для забезпечення оптимальної роботи вашого веб-сервера. +``` + +#### Статус процесу + +Подібно до Apache та його модуля `mod_status`, PHP-FPM пропонує сторінку, на якій вказується статус процесу. + +Щоб активувати сторінку, встановіть її шлях доступу за допомогою директиви `pm.status_path`: + +```bash +pm.status_path = /status +``` + +```bash +$ curl http://localhost/status_php +pool: www +process manager: dynamic +start time: 03/Dec/2021:14:00:00 +0100 +start since: 600 +accepted conn: 548 +listen queue: 0 +max listen queue: 15 +listen queue len: 128 +idle processes: 3 +active processes: 3 +total processes: 5 +max active processes: 5 +max children reached: 0 +slow requests: 0 +``` + +#### Реєстрація довгих запитів + +Директива `slowlog` визначає файл, який отримує занадто довгі запити на журналювання (наприклад, час яких перевищує значення директиви `request_slowlog_timeout`). + +Розташування згенерованого файлу за замовчуванням – `/var/log/php-fpm/www-slow.log`. + +```bash +request_slowlog_timeout = 5 +slowlog = /var/log/php-fpm/www-slow.log +``` + +Значення 0 для `request_slowlog_timeout` вимикає журналювання. + +### Інтеграція NGinx + +Налаштування за замовчуванням nginx уже включають необхідну конфігурацію, щоб PHP працював із PHP-FPM. + +Файл конфігурації `fastcgi.conf` (або `fastcgi_params`) знаходиться в `/etc/nginx/`: + +```bash +fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; +fastcgi_param QUERY_STRING $query_string; +fastcgi_param REQUEST_METHOD $request_method; +fastcgi_param CONTENT_TYPE $content_type; +fastcgi_param CONTENT_LENGTH $content_length; + +fastcgi_param SCRIPT_NAME $fastcgi_script_name; +fastcgi_param REQUEST_URI $request_uri; +fastcgi_param DOCUMENT_URI $document_uri; +fastcgi_param DOCUMENT_ROOT $document_root; +fastcgi_param SERVER_PROTOCOL $server_protocol; +fastcgi_param REQUEST_SCHEME $scheme; +fastcgi_param HTTPS $https if_not_empty; + +fastcgi_param GATEWAY_INTERFACE CGI/1.1; +fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; + +fastcgi_param REMOTE_ADDR $remote_addr; +fastcgi_param REMOTE_PORT $remote_port; +fastcgi_param SERVER_ADDR $server_addr; +fastcgi_param SERVER_PORT $server_port; +fastcgi_param SERVER_NAME $server_name; + +# PHP only, required if PHP was built with --enable-force-cgi-redirect +fastcgi_param REDIRECT_STATUS 200; +``` + +Щоб nginx обробляв файли `.php`, додайте такі директиви до файлу конфігурації сайту: + +Якщо PHP-FPM прослуховує порт 9000: + +```bash +location ~ \.php$ { + include /etc/nginx/fastcgi_params; + fastcgi_pass 127.0.0.1:9000; +} +``` + +Якщо php-fpm прослуховує сокет UNIX: + +```bash +location ~ \.php$ { + include /etc/nginx/fastcgi_params; + fastcgi_pass unix:/run/php-fpm/www.sock; +} +``` + +### Інтеграція Apache + +Конфігурація apache для використання пулу PHP досить проста. Ви повинні використовувати проксі-модулі з директивою `ProxyPassMatch`, наприклад: + +```bash + + ServerName web.rockylinux.org + DocumentRoot "/var/www/html/current/public" + + + AllowOverride All + Options -Indexes +FollowSymLinks + Require all granted + + ProxyPassMatch ^/(.*\.php(/.*)?)$ "fcgi://127.0.0.1:9000/var/www/html/current/public" + + + +``` + +### Надійна конфігурація пулів PHP + +Оптимізація кількості запитів, що обслуговуються, і аналіз пам’яті, яка використовується сценаріями PHP, необхідні для збільшення кількості запущених потоків. + +Перш за все, вам потрібно знати середній обсяг пам’яті, який використовує процес PHP за допомогою команди: + +```bash +while true; do ps --no-headers -o "rss,cmd" -C php-fpm | grep "pool www" | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"Mb") }' >> avg_php_proc; sleep 60; done +``` + +Це дасть вам досить точне уявлення про середній обсяг пам’яті процесу PHP на цьому сервері. + +Решта цього документа призводить до використання пам’яті 120 Мб на процес при повному завантаженні. + +На сервері з 8 Гб оперативної пам’яті, зберігаючи 1 Гб для системи та 1 Гб для OPCache (див. решту цього документа), залишається 6 Гб для обробки запитів PHP від клієнтів. + +Ви можете зробити висновок, що цей сервер може приймати не більше **50 потоків** `((6*1024) / 120)`. + +Хороша конфігурація `php-fpm`, специфічна для цього випадку використання: + +```bash +pm = dynamic +pm.max_children = 50 +pm.start_servers = 12 +pm.min_spare_servers = 12 +pm.max_spare_servers = 36 +pm.max_requests = 500 +``` + +з: + +- `pm.start_servers` = 25% of `max_children` +- `pm.min_spare_servers` = 25% of `max_children` +- `pm.max_spare_servers` = 75% of `max_children` + +### Конфігурація Opcache + +`opcache` (Optimizer Plus Cache) — це перший рівень кешу, на який ви можете впливати. + +Він зберігає скомпільовані сценарії PHP у пам’яті, що сильно впливає на виконання веб-сторінок (виключає читання сценарію на диску + час компіляції). + +Щоб його налаштувати, необхідно попрацювати над: + +- Розмір пам’яті, виділеної для opcache, відповідно до коефіцієнта звернення +- кількість скриптів PHP для кешу (кількість ключів + максимальна кількість скриптів) +- кількість рядків для кешу + +Щоб встановити його: + +```bash +sudo dnf install php-opcache +``` + +Щоб налаштувати його, відредагуйте файл конфігурації `/etc/php.d/10-opcache.ini`: + +```bash +opcache.memory_consumption=128 +opcache.interned_strings_buffer=8 +opcache.max_accelerated_files=4000 +``` + +Де: + +- `opcache.memory_consumption` відповідає об’єму пам’яті, необхідному для opcache (збільшуйте це значення, доки не отримаєте правильний коефіцієнт звернення). +- `opcache.interned_strings_buffer` кількість рядків для кешу. +- `opcache.max_accelerated_files` близький до результату команди `find ./ -iname "*.php"|wc -l`. + +Щоб налаштувати opcache, зверніться до сторінки `info.php` (включаючи `phpinfo();`) (див., наприклад, значення `Cached scripts` і `Cached strings`). + +!!! Note "Примітка" + +``` +При кожному новому розгортанні нового коду необхідно буде очищати opcache (наприклад, перезапустивши процес php-fpm). +``` + +!!! Note "Примітка" + +``` +Не варто недооцінювати приріст швидкості, якого можна досягти шляхом правильного встановлення та конфігурації opcache. +``` + + diff --git a/docs/books/web_services/04-database-servers.uk.md b/docs/books/web_services/04-database-servers.uk.md new file mode 100644 index 0000000000..43f2fb7d76 --- /dev/null +++ b/docs/books/web_services/04-database-servers.uk.md @@ -0,0 +1,11 @@ +--- +author: null +contributors: null +title: Частина 4. Сервери баз даних +--- + +!!! info + +``` +Треба написати вступ до серверів реляційних баз даних. +``` diff --git a/docs/books/web_services/041-database-servers-mariadb.uk.md b/docs/books/web_services/041-database-servers-mariadb.uk.md new file mode 100644 index 0000000000..8922eb8bd2 --- /dev/null +++ b/docs/books/web_services/041-database-servers-mariadb.uk.md @@ -0,0 +1,894 @@ +--- +author: Antoine Le Morvan +contributors: Steven Spencer, Ganna Zhyrnova +title: Частина 4.1 Сервери баз даних MariaDB +tags: + - mariadb + - mysql + - бази даних + - rdbms +--- + +MySQL, MariaDB і PostgreSQL є RDBMS (система керування реляційною базою даних) з відкритим кодом. + +## MariaDB та MySQL + +У цьому розділі ви дізнаєтеся про реляційну базу даних MariaDB і MySQL. + +**** + +**Цілі**: Ви дізнаєтеся, як: + +:heavy_check_mark: встановити, налаштувати та захистити сервер MariaDB і сервер MySQL;\ +:heavy_check_mark: виконувати деякі адміністративні дії з базами даних і користувачами. + +:checkered_flag: **RDBMS**, **database**, **MariaDB**, **MySQL** + +**Знання**: :star: :star: :star:\ +**Складність**: :star: :star: :star: + +**Час читання**: 30 хвилин + +**** + +### Загальні положення + +MySQL був розроблений Майклом «Монті» Віденіусом (фінським комп’ютерним вченим), який заснував MySQL AB у 1995 році. MySQL AB була придбана компанією SUN у 2008 році, яка, у свою чергу, була придбана компанією Oracle у 2009 році. Oracle все ще володіє програмним забезпеченням MySQL і розповсюджує його за подвійною ліцензією GPL і пропрієтарною ліцензією. + +У 2009 році Майкл Віденіус покинув SUN, заснував Monty Program AB і розпочав розробку спільнотного форка MySQL: MariaDB під ліцензією GPL. Управління проектом покладено на MariaDB Foundation, яка гарантує, що проект залишається безкоштовним. + +Не так давно більшість дистрибутивів Linux пропонували пакети MariaDB замість MySQL. Значні облікові записи, такі як Wikipedia та Google, також прийняли форк спільноти. + +MySQL і MariaDB є одними з найбільш широко використовуваних RDBMS у світі (професіоналами та широким загалом), особливо для веб-додатків (**LAMP**: Linux + Apache + Mysql-MariaDB + Php). + +Основними конкурентами Mysql-MariaDB є: + +- PostgreSQL, +- OracleDB, +- Microsoft SQL Server. + +Служби баз даних є багатопоточними та багатокористувацькими, працюють у більшості операційних систем (Linux, Unix, BSD, Mac OSx, Windows) і доступні з багатьох мов програмування (PHP, Java, Python, C, C++, Perl тощо). + +Пропонується підтримка кількох механізмів, що дозволяє призначати різні механізми до різних таблиць в одній базі даних залежно від вимог: + +MyISAM +: найпростіший, але не підтримує транзакції чи зовнішні ключі. Це індексована послідовна система. MyISAM тепер застарів. + +InnoDB +: керує цілісністю таблиці (зовнішні ключі та транзакції), але займає більше місця на диску. Це механізм за замовчуванням з MySQL версії 5.6. Це механізм транзакцій. + +Пам'ять +: таблиці зберігаються в пам'яті. + +Архів +: стиснення даних під час вставки економить місце на диску, але сповільнює пошукові запити (холодні дані). + +Йдеться про прийняття механізму відповідно до потреб: Архів для зберігання журналів, Пам’ять для тимчасових даних тощо. + +MariaDB/MySQL використовує порт 3306/tcp для мережевого зв’язку. + +У цій главі буде розглянуто цю версію, оскільки стандартною версією, яку надає Rocky, є версія бази даних спільноти MariaDB. Спеціально розглядаються лише відмінності між MySQL і MariaDB. + +### Встановлення + +Використовуйте команду `dnf`, щоб встановити пакет `mariadb-server`: + +```bash +sudo dnf install -y mariadb-server +``` + +За замовчуванням на Rocky 9 встановлена ​​версія 10.5. + +Активуйте службу під час запуску та запустіть її: + +```bash +sudo systemctl enable mariadb --now +``` + +Ви можете перевірити статус служби `mariadb`: + +```bash +sudo systemctl status mariadb +``` + +Щоб інсталювати новішу версію, вам потрібно буде використати модулі `dnf`: + +```bash +$ sudo dnf module list mariadb +Last metadata expiration check: 0:00:09 ago on Thu Jun 20 11:39:10 2024. +Rocky Linux 9 - AppStream +Name Stream Profiles Summary +mariadb 10.11 client, galera, server [d] MariaDB Module + +Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled +``` + +Якщо ви ще не встановили сервер mariadb, достатньо буде активувати потрібну версію модуля: + +```bash +$ sudo dnf module enable mariadb:10.11 +Last metadata expiration check: 0:02:23 ago on Thu Jun 20 11:39:10 2024. +Dependencies resolved. +============================================================================================================================================= Package Architecture Version Repository Size +============================================================================================================================================= +Enabling module streams: + mariadb 10.11 + +Transaction Summary +============================================================================================================================================= +Is this ok [y/N]: y +Complete! +``` + +Тепер ви можете встановити пакет. Потрібна версія буде встановлена ​​автоматично: + +```bash +sudo dnf install -y mariadb-server +``` + +#### Про користувачів за умовчанням + +Зверніть увагу на журнали, надані mariadb під час першого запуску (`/var/log/messages`): + +```text +mariadb-prepare-db-dir[6560]: Initializing MariaDB database +mariadb-prepare-db-dir[6599]: Two all-privilege accounts were created. +mariadb-prepare-db-dir[6599]: One is root@localhost, it has no password, but you need to +mariadb-prepare-db-dir[6599]: be system 'root' user to connect. Use, for example, sudo mysql +mariadb-prepare-db-dir[6599]: The second is mysql@localhost, it has no password either, but +mariadb-prepare-db-dir[6599]: you need to be the system 'mysql' user to connect. +mariadb-prepare-db-dir[6599]: After connecting you can set the password, if you would need to be +mariadb-prepare-db-dir[6599]: able to connect as any of these users with a password and without sudo +``` + +### Конфігурація + +Конфігураційні файли можна зберігати в `/etc/my.cnf` та `/etc/my.cnf.d/`. + +Деякі важливі параметри за замовчуванням налаштовано в `/etc/my.cnf.d/mariadb-server.cnf`: + +```text +[server] + +[mysqld] +datadir=/var/lib/mysql +socket=/var/lib/mysql/mysql.sock +log-error=/var/log/mariadb/mariadb.log +pid-file=/run/mariadb/mariadb.pid +... +``` + +Як бачите, дані за замовчуванням знаходяться в `/var/lib/mysql`. Для цієї папки може знадобитися багато місця для зберігання та періодичне збільшення обсягу. Тому бажано змонтувати цю папку на спеціальному розділі. + +### Безпека + +MariaDB і Mysql включають сценарій, який допоможе вам захистити свій сервер. Він видаляє, наприклад, віддалені кореневі входи та вибіркових користувачів, які є менш безпечними параметрами за замовчуванням. + +Використовуйте `mariadb-secure-installation` і захистіть свій сервер: + +```bash +sudo mariadb-secure-installation +``` + +Сценарій запропонує вам ввести пароль для вашого користувача root. + +!!! NOTE "Примітка" + +```` +Команда `mysql_secure_installation` тепер є символічним посиланням на команду `mariadb-secure-installation`: + +```bash +$ ll /usr/bin/mysql_secure_installation +lrwxrwxrwx. 1 root root 27 Oct 12 2023 /usr/bin/mysql_secure_installation -> mariadb-secure-installation +``` +```` + +Якщо надання пароля кожного разу, коли вам потрібно використовувати команди MariaDB, є проблемою, ви можете налаштувати файл `~/.my.cnf` з вашими обліковими даними, які за замовчуванням використовуватимуться Mariadb для підключення до вашого сервера. + +```bash +[client] +user="root" +password="#######" +``` + +Переконайтеся, що дозволи достатньо обмежувальні, щоб надати поточному користувачеві доступ до: + +```bash +chmod 600 ~/.my.cnf +``` + +!!! WARNING "Увага" + +``` +Це не найкращий спосіб. Є більш безпечне рішення, ніж зберігати пароль у звичайному тексті. Починаючи з MySQL 5.6.6, завдяки команді 'mysql_config_editor' тепер ви можете зберігати свої облікові дані в зашифрованому логіні `.mylogin.cnf`. +``` + +Якщо на вашому сервері встановлено брандмауер (хороша річ), вам, можливо, доведеться розглянути питання про його відкриття, але лише якщо вам потрібен доступ до служби ззовні. + +```bash +sudo firewall-cmd --zone=public --add-service=mysql +sudo firewall-cmd --reload +``` + +!!! NOTE "Примітка" + +``` +Найкращими заходами безпеки є не відкривати сервер бази даних для зовнішнього світу (якщо сервер додатків розміщено на тому самому сервері) або обмежувати доступ лише авторизованими IP-адресами. +``` + +### Адміністрування + +#### Команда `mariadb` + +Команда `mariadb` — це проста оболонка SQL, яка підтримує інтерактивне та неінтерактивне використання. + +```bash +mysql -u user -p [base] +``` + +| Опція | Опис | +| --------- | ------------------------------------------------------- | +| `-u user` | Надає ім’я користувача для підключення. | +| `-p` | Запитує пароль. | +| `base` | База даних для підключення. | + +!!! NOTE "Примітка" + +```` +Команда `mysql` тепер є символічним посиланням на команду `mariadb`: + +```bash +$ ll /usr/bin/mysql +lrwxrwxrwx. 1 root root 7 Oct 12 2023 /usr/bin/mysql -> mariadb +``` +```` + +Приклад: + +```bash +$ sudo mariadb -u root +Welcome to the MariaDB monitor. Commands end with ; or \g. +Your MariaDB connection id is 15 +Server version: 10.5.22-MariaDB MariaDB Server + +Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +MariaDB [(none)]> show databases; ++--------------------+ +| Database | ++--------------------+ +| information_schema | +| mysql | +| performance_schema | ++--------------------+ +3 rows in set (0.003 sec) +``` + +#### Команда `mariadb-admin` + +Команда `mariadb-admin` — це клієнт, який адмініструє сервер MariaDB. + +```bash +mariadb-admin -u user -p command +``` + +| Опція | Опис | +| --------- | ------------------------------------------------------- | +| `-u user` | Надає ім’я користувача для підключення. | +| `-p` | Запитує пароль. | +| `command` | Команда для виконання. | + +`mariadb-admin` надає кілька команд як `version`, `variables`, `stop-slave` або `start-slaves`, `create databasename` тощо. + +Приклад: + +```bash +mariadb-admin -u root -p version +``` + +!!! NOTE "Примітка" + +```` +Команда `mysqladmin` тепер є символічним посиланням на команду `mariadb-admin`: + +```bash +$ ll /usr/bin/mysqladmin +lrwxrwxrwx. 1 root root 13 Oct 12 2023 /usr/bin/mysqladmin -> mariadb-admin +``` +```` + +### Про журналювання + +MariaDB надає різні журнали: + +- **Error log**: Містить повідомлення, що генеруються під час запуску та завершення служби, а також важливі події (попередження та помилки). +- **Binary log**: Цей журнал (у двійковому форматі) записує всі дії, які змінюють структуру бази даних або дані. Якщо вам потрібно відновити базу даних, вам потрібно буде відновити резервну копію ТА відтворити двійковий журнал, щоб відновити стан бази даних до збою. +- **Query log**: Тут реєструються всі запити клієнтів. +- **Slow requests log**: Повільні запити, тобто запити, які виконуються довше встановленого часу, реєструються окремо в цьому журналі. Аналізуючи цей файл, ви можете вжити заходів для скорочення часу виконання (наприклад, шляхом налаштування індексів або зміни клієнтської програми). + +За винятком двійкового журналу, ці журнали мають текстовий формат і їх можна використовувати безпосередньо! + +Щоб увімкнути журналювання довгих запитів, відредагуйте файл конфігурації `my.cnf`, щоб додати такі рядки: + +```bash +slow_query_log = 1 +slow_query_log_file = /var/log/mysql/mysql-slow.log +long_query_time = 2 +``` + +Мінімальне значення для змінної `long_query_time` — 0, а значення за замовчуванням — 10 секунд. + +Перезапустіть службу, щоб зміни вступили в силу. + +Після заповнення файлу журналу ви можете проаналізувати його за допомогою команди `mariadb-dumpslow`. + +```bash +mariadb-dumpslow [options] [log_file ...] +``` + +| Опція | Опис | +| -------------- | -------------------------------------------------- | +| `-t n` | Відображає лише перші n запитів. | +| `-s sort_type` | Сортує за кількістю запитів. | +| `-r` | Інвертує відображення результатів. | + +Типи сортування можуть бути: + +| Опція | Опис | +| ------------ | ----------------------------------------------------------------------------------------------------------------- | +| `c` | за кількістю звернень. | +| `t` або `at` | відповідно до часу виконання або середнього часу виконання (a для середнього). | +| `l` або `al` | відповідно до часу блокування або його середнього. | +| `r` або `aR` | як функція кількості повернутих рядків або її середнього значення. | + +### Про резервне копіювання + +Як і в будь-якій RDBMS, резервне копіювання бази даних виконується, коли модифікація даних знаходиться в автономному режимі. Ви можете зробити це наступним чином: + +- зупинка служби, відома як автономне резервне копіювання; +- поки служба працює шляхом тимчасового блокування оновлень (призупинення всіх змін). Це резервне копіювання онлайн. +- використання знімка файлової системи LVM, що дозволяє резервне копіювання даних за допомогою холодної файлової системи. + +Формат резервної копії може бути файлом ASCII (текстовий), що представляє стан бази даних і її дані у формі команд SQL, або двійковий файл, що відповідає файлам зберігання MySQL. + +Хоча ви можете створити резервну копію двійкового файлу за допомогою звичайних утиліт, таких як tar або cpio, для файлу ASCII потрібна така утиліта, як `mariadb-dump`. + +Команда `mariadb-dump` може виконати дамп вашої бази даних. + +Під час процесу доступ до даних заблоковано. + +```bash +mariadb-dump -u root -p DATABASE_NAME > backup.sql +``` + +!!! NOTE "Примітка" + +``` +Не забувайте, що після відновлення повної резервної копії відновлення двійкових файлів (binlogs) завершує відновлення даних. +``` + +Отриманий файл можна використовувати для відновлення даних бази даних. База даних має все ще існувати, або ви повинні створити її заново!: + +```bash +mariadb -u root -p DATABASE_NAME < backup.sql +``` + +### Графічні засоби + +Існують графічні засоби для полегшення адміністрування та керування даними бази даних. Ось кілька прикладів: + +- [DBeaver](https://dbeaver.io/) + +### Практичне завдання + +Під час виконання цього завдання ви встановите, налаштуєте та захистите свій сервер mariadb. + +#### Завдання 1: Встановлення + +Встановіть пакет mariadb-server: + +```bash +$ sudo dnf install mariadb-server +Last metadata expiration check: 0:10:05 ago on Thu Jun 20 11:26:03 2024. +Dependencies resolved. +============================================================================================================================================= Package Architecture Version Repository Size +============================================================================================================================================= +Installing: + mariadb-server x86_64 3:10.5.22-1.el9_2 appstream 9.6 M +Installing dependencies: +... +``` + +Встановлення додає користувача `mysql` до системи з `/var/lib/mysql` як домашній каталог: + +```bash +$ cat /etc/passwd +... +mysql:x:27:27:MySQL Server:/var/lib/mysql:/sbin/nologin +... +``` + +Увімкніть і запустіть службу: + +```bash +$ sudo systemctl enable mariadb --now +Created symlink /etc/systemd/system/mysql.service → /usr/lib/systemd/system/mariadb.service. +Created symlink /etc/systemd/system/mysqld.service → /usr/lib/systemd/system/mariadb.service. +Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /usr/lib/systemd/system/mariadb.service. +``` + +Перевірте встановлення: + +```bash +$ sudo systemctl status mariadb +● mariadb.service - MariaDB 10.5 database server + Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; preset: disabled) + Active: active (running) since Thu 2024-06-20 11:48:56 CEST; 1min 27s ago + Docs: man:mariadbd(8) + https://mariadb.com/kb/en/library/systemd/ + Process: 6538 ExecStartPre=/usr/libexec/mariadb-check-socket (code=exited, status=0/SUCCESS) + Process: 6560 ExecStartPre=/usr/libexec/mariadb-prepare-db-dir mariadb.service (code=exited, status=0/SUCCESS) + Process: 6658 ExecStartPost=/usr/libexec/mariadb-check-upgrade (code=exited, status=0/SUCCESS) + Main PID: 6643 (mariadbd) + Status: "Taking your SQL requests now..." + Tasks: 9 (limit: 11110) + Memory: 79.5M + CPU: 1.606s + CGroup: /system.slice/mariadb.service + └─6643 /usr/libexec/mariadbd --basedir=/usr + +Jun 20 11:48:56 localhost.localdomain mariadb-prepare-db-dir[6599]: The second is mysql@localhost, it has no password either, but +Jun 20 11:48:56 localhost.localdomain mariadb-prepare-db-dir[6599]: you need to be the system 'mysql' user to connect. +Jun 20 11:48:56 localhost.localdomain mariadb-prepare-db-dir[6599]: After connecting you can set the password, if you would need to be +Jun 20 11:48:56 localhost.localdomain mariadb-prepare-db-dir[6599]: able to connect as any of these users with a password and without sudo +Jun 20 11:48:56 localhost.localdomain mariadb-prepare-db-dir[6599]: See the MariaDB Knowledgebase at https://mariadb.com/kb +Jun 20 11:48:56 localhost.localdomain mariadb-prepare-db-dir[6599]: Please report any problems at https://mariadb.org/jira +Jun 20 11:48:56 localhost.localdomain mariadb-prepare-db-dir[6599]: The latest information about MariaDB is available at https://mariadb.org>Jun 20 11:48:56 localhost.localdomain mariadb-prepare-db-dir[6599]: Consider joining MariaDB's strong and vibrant community: +Jun 20 11:48:56 localhost.localdomain mariadb-prepare-db-dir[6599]: https://mariadb.org/get-involved/ +Jun 20 11:48:56 localhost.localdomain systemd[1]: Started MariaDB 10.5 database server. +``` + +Спробуйте підключитися до сервера: + +```bash +$ sudo mariadb +Welcome to the MariaDB monitor. Commands end with ; or \g. +Your MariaDB connection id is 9 +Server version: 10.5.22-MariaDB MariaDB Server + +Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +MariaDB [(none)]> show databases; ++--------------------+ +| Database | ++--------------------+ +| information_schema | +| mysql | +| performance_schema | ++--------------------+ +3 rows in set (0.001 sec) + +MariaDB [(none)]> exit +Bye +``` + +```bash +$ sudo mariadb-admin version +mysqladmin Ver 9.1 Distrib 10.5.22-MariaDB, for Linux on x86_64 +Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. + +Server version 10.5.22-MariaDB +Protocol version 10 +Connection Localhost via UNIX socket +UNIX socket /var/lib/mysql/mysql.sock +Uptime: 7 min 24 sec + +Threads: 1 Questions: 9 Slow queries: 0 Opens: 17 Open tables: 10 Queries per second avg: 0.020 +``` + +Як бачите, користувачеві `root` не потрібно вводити пароль. Ви виправите це під час наступного завдання. + +#### Завдання 2: Захистіть свій сервер + +Запустіть `mariadb-secure-installation` і дотримуйтесь інструкцій: + +```bash +$ sudo mariadb-secure-installation + +NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB + SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! + +In order to log into MariaDB to secure it, we'll need the current +password for the root user. If you've just installed MariaDB, and +haven't set the root password yet, you should just press enter here. + +Enter current password for root (enter for none): +OK, successfully used password, moving on... + +Setting the root password or using the unix_socket ensures that nobody +can log into the MariaDB root user without the proper authorisation. + +You already have your root account protected, so you can safely answer 'n'. + +Switch to unix_socket authentication [Y/n] y +Enabled successfully! +Reloading privilege tables.. + ... Success! + + +You already have your root account protected, so you can safely answer 'n'. + +Change the root password? [Y/n] y +New password: +Re-enter new password: +Password updated successfully! +Reloading privilege tables.. + ... Success! + + +By default, a MariaDB installation has an anonymous user, allowing anyone +to log into MariaDB without having to have a user account created for +them. This is intended only for testing, and to make the installation +go a bit smoother. You should remove them before moving into a +production environment. + +Remove anonymous users? [Y/n] y + ... Success! + +Normally, root should only be allowed to connect from 'localhost'. This +ensures that someone cannot guess at the root password from the network. + +Disallow root login remotely? [Y/n] y + ... Success! + +By default, MariaDB comes with a database named 'test' that anyone can +access. This is also intended only for testing, and should be removed +before moving into a production environment. + +Remove test database and access to it? [Y/n] y + - Dropping test database... + ... Success! + - Removing privileges on test database... + ... Success! + +Reloading the privilege tables will ensure that all changes made so far +will take effect immediately. + +Reload privilege tables now? [Y/n] y + ... Success! + +Cleaning up... + +All done! If you've completed all of the above steps, your MariaDB +installation should now be secure. + +Thanks for using MariaDB! +``` + +Спробуйте знову підключитися до свого сервера з паролем і без нього: + +```bash +$ mariadb -u root +ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) + +$ mariadb -u root -p +Enter password: +Welcome to the MariaDB monitor. Commands end with ; or \g. +Your MariaDB connection id is 4 +Server version: 10.5.22-MariaDB MariaDB Server + +Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +MariaDB [(none)]> +``` + +Налаштуйте брандмауер: + +```bash +sudo firewall-cmd --zone=public --add-service=mysql --permanent +sudo firewall-cmd --reload +``` + +#### Завдання 3: Тестування + +Перевірте встановлення: + +```bash +$ mysqladmin -u root -p version +Enter password: +mysqladmin Ver 9.1 Distrib 10.5.22-MariaDB, for Linux on x86_64 +Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. + +Server version 10.5.22-MariaDB +Protocol version 10 +Connection Localhost via UNIX socket +UNIX socket /var/lib/mysql/mysql.sock +Uptime: 29 min 18 sec + +Threads: 1 Questions: 35 Slow queries: 0 Opens: 20 Open tables: 13 Queries per second avg: 0.019 +``` + +`Версія` надає інформацію про сервер. + +#### Завдання 4: Створити нову базу даних і користувача + +Створіть нову базу даних: + +```sql +MariaDB [(none)]> create database NEW_DATABASE_NAME; +``` + +Створіть нового користувача та надайте йому всі права на всі таблиці цієї бази даних: + +```sql +MariaDB [(none)]> grant all privileges on NEW_DATABASE_NAME.* TO 'NEW_USER_NAME'@'localhost' identified by 'PASSWORD'; +``` + +Замініть `localhost` на `%`, якщо ви хочете надати доступ звідусіль, або замініть на IP-адресу, якщо можливо. + +Ви можете обмежити надані привілеї. Існують різні типи дозволів, які можна запропонувати користувачам: + +- **SELECT**: читати дані +- **USAGE**: авторизація для підключення до сервера (надається за замовчуванням при створенні нового користувача) +- **INSERT**: додати нові кортежі до таблиці. +- **UPDATE**: змінити існуючі кортежі +- **DELETE**: видалити кортежі +- **CREATE**: створювати нові таблиці або бази даних +- **DROP**: видалити існуючі таблиці або бази даних +- **ALL PRIVILEGES**: всі права +- **GRANT OPTION**: надавати або знімати права іншим користувачам + +Не забудьте перезавантажити та застосувати нові права: + +```sql +MariaDB [(none)]> flush privileges; +``` + +Перевірте: + +```bash +$ mariadb -u NEW_USER_NAME -p +Enter password: +Welcome to the MariaDB monitor. Commands end with ; or \g. +Your MariaDB connection id is 8 +Server version: 10.5.22-MariaDB MariaDB Server + +Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +MariaDB [(none)]> show databases; ++--------------------+ +| Database | ++--------------------+ +| NEW_DATABASE_NAME | +| information_schema | ++--------------------+ +2 rows in set (0.001 sec) + +``` + +Додайте зразки даних у свою базу даних: + +```bash +$ mariadb -u NEW_USER_NAME -p NEW_DATABASE_NAME +MariaDB [NEW_DATABASE_NAME]> CREATE TABLE users( + id INT NOT NULL AUTO_INCREMENT, + first_name VARCHAR(30) NOT NULL, + last_name VARCHAR(30) NOT NULL, + age INT DEFAULT NULL, + PRIMARY KEY (id)); +Query OK, 0 rows affected (0.017 sec) + +MariaDB [NEW_DATABASE_NAME]> INSERT INTO users (first_name, last_name, age) VALUES ("Antoine", "Le Morvan", 44); +Query OK, 1 row affected (0.004 sec) +``` + +#### Завдання 5: Створити віддаленого користувача + +У цьому завданні ви створите нового користувача, надасте віддалений доступ і перевірите з’єднання з цим користувачем. + +```bash +MariaDB [(none)]> grant all privileges on NEW_DATABASE_NAME.* TO 'NEW_USER_NAME'@'%' identified by 'PASSWORD'; +Query OK, 0 rows affected (0.005 sec) + +MariaDB [(none)]> flush privileges; +Query OK, 0 rows affected (0.004 sec) +``` + +Використовуйте цього користувача та опцію `-h` для віддаленого підключення до вашого сервера: + +```bash +$ mariadb -h YOUR_SERVER_IP -u NEW_USER_NAME -p NEW_DATABASE_NAME +Enter password: +... + +MariaDB [NEW_DATABASE_NAME]> +``` + +#### Завдання 6: Виконайте оновлення + +Увімкніть потрібний модуль: + +```bash +$ sudo dnf module enable mariadb:10.11 +[sudo] password for antoine: +Last metadata expiration check: 2:00:16 ago on Thu Jun 20 11:50:27 2024. +Dependencies resolved. +============================================================================================================================================= Package Architecture Version Repository Size +=============================================================================================================================================Enabling module streams: + mariadb 10.11 + +Transaction Summary +============================================================================================================================================= +Is this ok [y/N]: y +Complete! +``` + +Оновіть пакети: + +```bash +$ sudo dnf update mariadb +Last metadata expiration check: 2:00:28 ago on Thu Jun 20 11:50:27 2024. +Dependencies resolved. +============================================================================================================================================= Package Architecture Version Repository Size +============================================================================================================================================= +Upgrading: + mariadb x86_64 3:10.11.6-1.module+el9.4.0+20012+a68bdff7 appstream 1.7 M + mariadb-backup x86_64 3:10.11.6-1.module+el9.4.0+20012+a68bdff7 appstream 6.7 M + mariadb-common x86_64 3:10.11.6-1.module+el9.4.0+20012+a68bdff7 appstream 28 k + mariadb-errmsg x86_64 3:10.11.6-1.module+el9.4.0+20012+a68bdff7 appstream 254 k + mariadb-gssapi-server x86_64 3:10.11.6-1.module+el9.4.0+20012+a68bdff7 appstream 15 k + mariadb-server x86_64 3:10.11.6-1.module+el9.4.0+20012+a68bdff7 appstream 10 M + mariadb-server-utils x86_64 3:10.11.6-1.module+el9.4.0+20012+a68bdff7 appstream 261 k + +Transaction Summary +============================================================================================================================================= +Upgrade 7 Packages + +Total download size: 19 M +Is this ok [y/N]: y +Downloading Packages: +(1/7): mariadb-gssapi-server-10.11.6-1.module+el9.4.0+20012+a68bdff7.x86_64.rpm 99 kB/s | 15 kB 00:00 +(2/7): mariadb-server-utils-10.11.6-1.module+el9.4.0+20012+a68bdff7.x86_64.rpm 1.1 MB/s | 261 kB 00:00 +(3/7): mariadb-errmsg-10.11.6-1.module+el9.4.0+20012+a68bdff7.x86_64.rpm 2.5 MB/s | 254 kB 00:00 +(4/7): mariadb-common-10.11.6-1.module+el9.4.0+20012+a68bdff7.x86_64.rpm 797 kB/s | 28 kB 00:00 +(5/7): mariadb-10.11.6-1.module+el9.4.0+20012+a68bdff7.x86_64.rpm 5.7 MB/s | 1.7 MB 00:00 +(6/7): mariadb-server-10.11.6-1.module+el9.4.0+20012+a68bdff7.x86_64.rpm 9.5 MB/s | 10 MB 00:01 +(7/7): mariadb-backup-10.11.6-1.module+el9.4.0+20012+a68bdff7.x86_64.rpm 7.7 MB/s | 6.7 MB 00:00 +--------------------------------------------------------------------------------------------------------------------------------------------- +Total 13 MB/s | 19 MB 00:01 +Running transaction check +Transaction check succeeded. +Running transaction test +Transaction test succeeded. +Running transaction + +... + +Complete! +``` + +Тепер ваші бази даних потребують оновлення (перевірте свій `/var/log/messages` як скарги на службу): + +```text +mariadb-check-upgrade[8832]: The datadir located at /var/lib/mysql needs to be upgraded using 'mariadb-upgrade' tool. This can be done using the following steps: +mariadb-check-upgrade[8832]: 1. Back-up your data before with 'mariadb-upgrade' +mariadb-check-upgrade[8832]: 2. Start the database daemon using 'systemctl start mariadb.service' +mariadb-check-upgrade[8832]: 3. Run 'mariadb-upgrade' with a database user that has sufficient privileges +mariadb-check-upgrade[8832]: Read more about 'mariadb-upgrade' usage at: +mariadb-check-upgrade[8832]: https://mariadb.com/kb/en/mysql_upgrade/ +``` + +Не забудьте виконати сценарій оновлення, наданий MariaDB: + +```bash +sudo mariadb-upgrade +Major version upgrade detected from 10.5.22-MariaDB to 10.11.6-MariaDB. Check required! +Phase 1/8: Checking and upgrading mysql database +Processing databases +mysql +mysql.column_stats OK +mysql.columns_priv OK +mysql.db OK +... +Phase 2/8: Installing used storage engines... Skipped +Phase 3/8: Running 'mysql_fix_privilege_tables' +Phase 4/8: Fixing views +mysql.user OK +... +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables +Processing databases +NEW_DATABASE_NAME +information_schema +performance_schema +sys +sys.sys_config OK +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' +OK +``` + +#### Завдання 6: Виконайте дамп + +Команда `mariadb-dump` може виконати дамп вашої бази даних. + +```bash +mariadb-dump -u root -p NEW_DATABASE_NAME > backup.sql +``` + +Підтвердити: + +```bash +cat backup.sql +-- MariaDB dump 10.19 Distrib 10.11.6-MariaDB, for Linux (x86_64) +-- +-- Host: localhost Database: NEW_DATABASE_NAME +-- ------------------------------------------------------ +-- Server version 10.11.6-MariaDB + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +... + +-- +-- Table structure for table `users` +-- + +DROP TABLE IF EXISTS `users`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `users` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `first_name` varchar(30) NOT NULL, + `last_name` varchar(30) NOT NULL, + `age` int(11) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `users` +-- + +LOCK TABLES `users` WRITE; +/*!40000 ALTER TABLE `users` DISABLE KEYS */; +INSERT INTO `users` VALUES +(1,'Antoine','Le Morvan',44); +/*!40000 ALTER TABLE `users` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +... +-- Dump completed on 2024-06-20 14:32:41 +``` + +### Перевірте свої знання + +:heavy_check_mark: Яка версія бази даних встановлена ​​за замовчуванням? + +- [ ] MySQL 5.5 +- [ ] MariaDB 10.5 +- [ ] MariaDB 11.11 +- [ ] Mysql 8 + +:heavy_check_mark: Яку команду ви використовуєте для застосування змін прав? + +- [ ] flush rights +- [ ] flush privileges +- [ ] mariadb reload +- [ ] apply + +### Висновок + +У цій главі ви встановили та захистили сервер бази даних MariaDB, а також створили базу даних і виділеного користувача. + +Ці навички є необхідною умовою для адміністрування ваших баз даних. + +У наступному розділі ви побачите, як встановити базу даних MySQL замість гілки MariaDB. diff --git a/docs/books/web_services/042-database-servers-mysql.uk.md b/docs/books/web_services/042-database-servers-mysql.uk.md new file mode 100644 index 0000000000..65a481d835 --- /dev/null +++ b/docs/books/web_services/042-database-servers-mysql.uk.md @@ -0,0 +1,135 @@ +--- +author: Antoine Le Morvan +contributors: Steven Spencer, Ganna Zhyrnova +title: Частина 4.2 Сервери баз даних MySQL +--- + +## MySQL + +У цьому розділі ви дізнаєтеся, як встановити сервер MySQL. + +!!! NOTE "Примітка" + +``` +Включено лише помітні відмінності між версіями MariaDB і MySQL. +``` + +--- + +**Цілі**: Ви дізнаєтеся, як: + +:heavy_check_mark: встановити, налаштувати та захистити сервер MariaDB і сервер MySQL; + +:checkered_flag: **RDBMS**, **database**, **MariaDB**, **MySQL** + +**Знання**: :star: :star: :star:\ +**Складність**: :star: :star: :star: + +**Час читання**: 10 хвилин + +--- + +### Встановлення MySQL + +За замовчуванням встановлена ​​версія MySQL 8.0. + +Цього разу вам потрібно встановити пакет `mysql-server`: + +```bash +sudo dnf install mysql-server +``` + +і запустіть службу `mysqld`: + +```bash +sudo systemctl enable mysqld.service --now +``` + +Тепер ви можете слідувати попередньому розділу, замінивши такі команди: + +- `mariadb` => `mysql` +- `mariadb-admin` => `mysql_admin` +- `mariadb-dump` => `mysql_dump` +- `mariadb-secure-installation` => `mysql_secure_installation` + +Вам доведеться встановити інший репозиторій, щоб інсталювати останню версію сервера MySQL. + +Відвідайте цю сторінку: https://dev.mysql.com/downloads/repo/yum/ і скопіюйте URL-адресу сховища. + +Наприклад: + +```bash +sudo dnf install -y https://dev.mysql.com/get/mysql84-community-release-el9-1.noarch.rpm +``` + +Після завершення ви можете виконати `dnf update`: + +```bash +$ dnf update +Error: This command has to be run with superuser privileges (under the root user on most systems). +[antoine@localhost ~]$ sudo dnf update +MySQL 8.4 LTS Community Server 377 kB/s | 226 kB 00:00 +MySQL Connectors Community 110 kB/s | 53 kB 00:00 +MySQL Tools 8.4 LTS Community 170 kB/s | 97 kB 00:00 +Dependencies resolved. +============================================================================================================================================= Package Architecture Version Repository + Size +=============================================================================================================================================Installing: + mysql-community-client x86_64 8.4.0-1.el9 mysql-8.4-lts-community 3.1 M + replacing mysql.x86_64 8.0.36-1.el9_3 + mysql-community-server x86_64 8.4.0-1.el9 mysql-8.4-lts-community 50 M + replacing mariadb-connector-c-config.noarch 3.2.6-1.el9_0 + replacing mysql-server.x86_64 8.0.36-1.el9_3 +Installing dependencies: + ... + +Transaction Summary +=============================================================================================================================================Install 7 Packages + +Total download size: 59 M +Is this ok [y/N]: y +Downloading Packages: +(1/7): mysql-community-client-plugins-8.4.0-1.el9.x86_64.rpm 3.4 MB/s | 1.4 MB 00:00 +(2/7): mysql-community-common-8.4.0-1.el9.x86_64.rpm 1.3 MB/s | 576 kB 00:00 +(3/7): mysql-community-icu-data-files-8.4.0-1.el9.x86_64.rpm 30 MB/s | 2.3 MB 00:00 +(4/7): mysql-community-client-8.4.0-1.el9.x86_64.rpm 5.8 MB/s | 3.1 MB 00:00 +(5/7): mysql-community-libs-8.4.0-1.el9.x86_64.rpm 6.8 MB/s | 1.5 MB 00:00 +(6/7): net-tools-2.0-0.62.20160912git.el9.x86_64.rpm 1.1 MB/s | 292 kB 00:00 +(7/7): mysql-community-server-8.4.0-1.el9.x86_64.rpm 48 MB/s | 50 MB 00:01 +---------------------------------------------------------------------------------------------------------------------------------------------Total 30 +MB/s | 59 MB 00:01 +MySQL 8.4 LTS Community Server 3.0 MB/s | 3.1 kB 00:00 +Importing GPG key 0xA8D3785C: + Userid : "MySQL Release Engineering " + Fingerprint: BCA4 3417 C3B4 85DD 128E C6D4 B7B3 B788 A8D3 785C + From : /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2023 +Is this ok [y/N]: y +Key imported successfully +Running transaction check +Transaction check succeeded. +Running transaction test +Transaction test succeeded. +Running transaction + Preparing : + ... +Installed: + mysql-community-server-8.4.0-1.el9.x86_64 + ... + +Complete! +``` + +Не забудьте знову ввімкнути та перезапустити сервер: + +```bash +sudo systemctl enable mysqld.service --now +``` + +### Перевірте свої знання MySQL + +:heavy_check_mark: Яка версія бази даних MySQL встановлена ​​за замовчуванням? + +- [ ] MySQL 5.5 +- [ ] MariaDB 10.5 +- [ ] MariaDB 11.11 +- [ ] Mysql 8 diff --git a/docs/books/web_services/043-database-servers-replication.uk.md b/docs/books/web_services/043-database-servers-replication.uk.md new file mode 100644 index 0000000000..e10a4f2389 --- /dev/null +++ b/docs/books/web_services/043-database-servers-replication.uk.md @@ -0,0 +1,427 @@ +--- +author: Antoine Le Morvan +contributors: Steven Spencer +title: Частина 4.3 Реплікація бази даних MariaDB +--- + +## Вторинний сервер з MariaDB + +Цей розділ навчить вас, як налаштувати первинний/вторинний сервери системи за допомогою MariaDB. + +**** + +**Цілі**: Ви дізнаєтеся, як: + +:heavy_check_mark: активувати binlogs на своїх серверах;\ +:heavy_check_mark: налаштувати вторинний сервер для реплікації даних з основного сервера. + +:checkered_flag: **MariaDB**, **Реплікація**, **Первинний**, **Вторинний** + +**Знання**: :star: :star:\ +**Складність**: :star: :star: :star: + +**Час читання**: 10 хвилин + +**** + +### Загальні відомості про вторинний сервер із MariaDB + +Як тільки ви починаєте більш інтенсивно використовувати свою базу даних, ви повинні відтворити свої дані на кількох серверах. + +Це можна зробити кількома способами: + +- Розповсюдити запити на запис на основний сервер і запити на читання на вторинний сервер. +- Виконати резервне копіювання бази даних на вторинному сервері, що дозволяє уникнути блокування запису на основний сервер протягом тривалості резервного копіювання. + +Якщо ваше використання стане ще більш вимогливим, ви можете розглянути можливість переходу на первинну/первинну систему: реплікації виконуються навхрест, але остерігайтеся ризику блокування унікальності первинних ключів. В іншому випадку вам доведеться перейти на більш просунуту систему кластеризації. + +### Конфігурація вторинного сервера з MariaDB + +#### Як активувати binlogs + +Виконайте цю дію на первинному та додатковому серверах: + +Додайте наступні параметри до свого файлу `/etc/my.cnf.d/mariadb-server.cnf` під ключ `[mariadb]`: + +```file +[mariadb] +log-bin +server_id=1 +log-basename=server1 +binlog-format=mixed +``` + +для основного сервера та для додаткового сервера: + +```file +[mariadb] +log-bin +server_id=2 +log-basename=server2 +binlog-format=mixed +``` + +Параметр `server_id` має бути унікальним на кожному сервері в кластері, тоді як параметр `log-basename` дозволяє вказати префікс для файлів binlog. Якщо ви цього не зробите, ви не зможете перейменувати свій сервер. + +Тепер ви можете перезапустити службу MariaDB на обох серверах: + +```bash +sudo systemctl restart mariadb +``` + +Ви можете перевірити, чи правильно створені файли binlogs: + +```bash +$ ll /var/lib/mysql/ +total 123332 +... +-rw-rw----. 1 mysql mysql 0 Jun 21 11:07 multi-master.info +drwx------. 2 mysql mysql 4096 Jun 21 11:07 mysql +srwxrwxrwx. 1 mysql mysql 0 Jun 21 11:16 mysql.sock +-rw-rw----. 1 mysql mysql 330 Jun 21 11:16 server1-bin.000001 +-rw-rw----. 1 mysql mysql 21 Jun 21 11:16 server1-bin.index +... +``` + +#### Як налаштувати реплікацію + +Перш за все, на основному пристрої вам потрібно буде створити користувачів, авторизованих для реплікації даних (будьте обережні, щоб обмежити авторизовані IP-адреси): + +```bash +$ sudo mariadb + +MariaDB [(none)]> CREATE USER 'replication'@'%' IDENTIFIED BY 'PASSWORD'; +Query OK, 0 rows affected (0.002 sec) + +MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%'; +Query OK, 0 rows affected (0.002 sec) +``` + +або краще для безпеки (змініть '192.168.1.101' на власний вторинний IP): + +```bash +$ sudo mariadb + +MariaDB [(none)]> CREATE USER 'replication'@'192.168.1.101' IDENTIFIED BY 'PASSWORD'; +Query OK, 0 rows affected (0.002 sec) + +MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.1.101'; +Query OK, 0 rows affected (0.002 sec) +``` + +Ви повинні заблокувати нові транзакції, якщо ваш основний сервер уже містить дані. Навпаки, експорт або імпорт даних відбувається на вторинному сервері та повідомляє вторинним серверам, коли починати реплікацію. Якщо ваш сервер ще не містить жодних даних, процедура значно спрощується. + +Запобігайте будь-яким змінам даних під час перегляду позиції двійкового журналу: + +```bash +$ sudo mariadb + +MariaDB [(none)]> FLUSH TABLES WITH READ LOCK; +Query OK, 0 rows affected (0.021 sec) + +MariaDB [(none)]> SHOW MASTER STATUS; ++--------------------+----------+--------------+------------------+ +| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | ++--------------------+----------+--------------+------------------+ +| server1-bin.000001 | 1009 | | | ++--------------------+----------+--------------+------------------+ +1 row in set (0.000 sec) + +``` + +Не припиняйте сеанс, щоб зберегти блокування. + +Запишіть деталі файлу та позиції. + +Якщо ваш сервер містить дані, настав час створити резервну копію та імпортувати її на вторинний сервер(и). Тримайте блокування на час резервного копіювання та зніміть його, щойно резервне копіювання завершиться. Це зменшує час простою (час, необхідний для копіювання та імпорту даних на вторинних серверах). + +Ви можете зняти блокування зараз: + +```bash +$ sudo mariadb + +MariaDB [(none)]> UNLOCK TABLES; +Query OK, 0 rows affected (0.000 sec) +``` + +Тепер на додатковому сервері можна налаштувати основний сервер для реплікації з наступним: + +```bash +MariaDB [(none)]> CHANGE MASTER TO + MASTER_HOST='192.168.1.100', + MASTER_USER='replication', + MASTER_PASSWORD='PASSWORD', + MASTER_PORT=3306, + MASTER_LOG_FILE='server1-bin.000001', + MASTER_LOG_POS=1009, + MASTER_CONNECT_RETRY=10; +Query OK, 0 rows affected, 1 warning (0.021 sec) + +MariaDB [(none)]> START SLAVE; +Query OK, 0 rows affected (0.001 sec) +``` + +Замініть IP основного сервера на свій, а значення `MASTER_LOG_FILE` і `MASTER_LOG_POS` на ті, які ви раніше зареєстрували. + +Перевірте, чи реплікація в порядку: + +```bash +MariaDB [(none)]> SHOW SLAVE STATUS \G +*************************** 1. row *************************** + Slave_IO_State: Waiting for master to send event + Master_Host: 192.168.1.100 + Master_User: replication + Master_Log_File: server1-bin.000001 + Read_Master_Log_Pos: 1009 +... + Seconds_Behind_Master: 0 + Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates +... +1 row in set (0.001 sec) +``` + +`Seconds_Behind_Master` - це захоплююче значення для моніторингу, оскільки воно може допомогти вам побачити, чи є проблема реплікації. + +### Практичне завдання для вторинного серверу з використанням MariaDB + +Вам знадобляться два сервери з установленими, налаштованими та захищеними службами MariaDB, як описано в попередніх розділах. + +Ви налаштуєте реплікацію на вторинному сервері, створите нову базу даних, вставите в неї дані та перевірите, чи вони доступні на вторинному сервері. + +Наші два сервери мають такі IP-адреси: + +- server1: 192.168.1.100 +- server2: 192.168.1.101 + +Не забудьте замінити ці значення своїми. + +#### Завдання 1: Створення виділеного користувача реплікації + +На основному сервері: + +```bash +$ sudo mariadb + +MariaDB [(none)]> CREATE USER 'replication'@'192.168.1.101' IDENTIFIED BY 'PASSWORD'; +Query OK, 0 rows affected (0.002 sec) + +MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.1.101'; +Query OK, 0 rows affected (0.002 sec) +``` + +#### Завдання 2: Запишіть значення основного сервера + +```bash +$ sudo mariadb + +MariaDB [(none)]> FLUSH TABLES WITH READ LOCK; +Query OK, 0 rows affected (0.021 sec) + +MariaDB [(none)]> SHOW MASTER STATUS; ++--------------------+----------+--------------+------------------+ +| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | ++--------------------+----------+--------------+------------------+ +| server1-bin.000001 | 1009 | | | ++--------------------+----------+--------------+------------------+ +1 row in set (0.000 sec) + +MariaDB [(none)]> UNLOCK TABLES; +Query OK, 0 rows affected (0.000 sec) +``` + +#### Завдання 3: Активувати реплікацію + +На вторинному сервері: + +```bash +MariaDB [(none)]> CHANGE MASTER TO + MASTER_HOST='192.168.1.100', + MASTER_USER='replication', + MASTER_PASSWORD='PASSWORD', + MASTER_PORT=3306, + MASTER_LOG_FILE='server1-bin.000001', + MASTER_LOG_POS=1009, + MASTER_CONNECT_RETRY=10; +Query OK, 0 rows affected, 1 warning (0.021 sec) + +MariaDB [(none)]> START SLAVE; +Query OK, 0 rows affected (0.001 sec) +``` + +Перевірте, чи реплікація в порядку: + +```bash +MariaDB [(none)]> SHOW SLAVE STATUS \G +*************************** 1. row *************************** + Slave_IO_State: Waiting for master to send event + Master_Host: 192.168.1.100 + Master_User: replication + Master_Log_File: server1-bin.000001 + Read_Master_Log_Pos: 1009 +... + Seconds_Behind_Master: 0 + Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates +... +1 row in set (0.001 sec) +``` + +#### Завдання 4: Створити нову базу даних і користувача + +На первинному: + +```bash +MariaDB [(none)]> create database NEW_DATABASE_NAME; +Query OK, 1 row affected (0.002 sec) + +MariaDB [(none)]> grant all privileges on NEW_DATABASE_NAME.* TO 'NEW_USER_NAME'@'localhost' identified by 'PASSWORD'; +Query OK, 0 rows affected (0.004 sec) +``` + +На додатковому сервері перевірте створення бази даних: + +```bash +MariaDB [(none)]> show databases; ++--------------------+ +| Database | ++--------------------+ +| NEW_DATABASE_NAME | +| information_schema | +| mysql | +| performance_schema | +| sys | ++--------------------+ +``` + +магія! + +На додатковому сервері спробуйте підключити нового користувача, створеного на основному: + +```bash +$ mariadb -u NEW_USER_NAME -p +Enter password: +Welcome to the MariaDB monitor. Commands end with ; or \g. + +MariaDB [(none)]> show databases; ++--------------------+ +| Database | ++--------------------+ +| NEW_DATABASE_NAME | +| information_schema | ++--------------------+ +2 rows in set (0.000 sec) +``` + +#### Завдання 5: Вставте нові дані + +Вставте нові дані на основний сервер: + +```bash +MariaDB [(none)]> use NEW_DATABASE_NAME +Database changed + +MariaDB [(none)]> CREATE TABLE users( + -> id INT NOT NULL AUTO_INCREMENT, + -> first_name VARCHAR(30) NOT NULL, + -> last_name VARCHAR(30) NOT NULL, + -> age INT DEFAULT NULL, + -> PRIMARY KEY (id)); + +MariaDB [NEW_DATABASE_NAME]> INSERT INTO users (first_name, last_name, age) VALUES ("Antoine", "Le Morvan", 44); +Query OK, 1 row affected (0.004 sec) + +``` + +На вторинному сервері перевірте, чи реплікуються дані: + +```bash +MariaDB [(none)]> use NEW_DATABASE_NAME +Database changed + +MariaDB [NEW_DATABASE_NAME]> show tables; ++-----------------------------+ +| Tables_in_NEW_DATABASE_NAME | ++-----------------------------+ +| users | ++-----------------------------+ +1 row in set (0.000 sec) + +MariaDB [NEW_DATABASE_NAME]> SELECT * FROM users; ++----+------------+-----------+------+ +| id | first_name | last_name | age | ++----+------------+-----------+------+ +| 1 | Antoine | Le Morvan | 44 | ++----+------------+-----------+------+ +1 row in set (0.000 sec) +``` + +### Перевірте свої знання про вторинний сервер за допомогою MariaDB + +:heavy_check_mark: Кожен сервер повинен мати однаковий ідентифікатор у кластері. + +- [ ] Так +- [ ] Ні + +:heavy_check_mark: Перед активацією реплікації потрібно ввімкнути двійкові журнали. + +- [ ] Так +- [ ] Ні +- [ ] Залежить від + +### Висновок про вторинний сервер з MariaDB + +Як ви бачите, створення одного або кількох вторинних серверів є відносно легкою дією, але це вимагає переривання служби на центральному сервері. + +Однак він пропонує багато переваг: високу доступність даних, балансування навантаження та спрощене резервне копіювання. + +У разі збою центрального сервера один із вторинних серверів може бути підвищений до центрального. + + diff --git a/docs/books/web_services/05-load-balancer-proxies.uk.md b/docs/books/web_services/05-load-balancer-proxies.uk.md new file mode 100644 index 0000000000..5bb418ba62 --- /dev/null +++ b/docs/books/web_services/05-load-balancer-proxies.uk.md @@ -0,0 +1,152 @@ +--- +author: null +contributors: null +title: Частина 5. Балансування навантаження, кешування та проксіфікація +--- + + diff --git a/docs/books/web_services/06-mails-servers.uk.md b/docs/books/web_services/06-mails-servers.uk.md new file mode 100644 index 0000000000..865b555002 --- /dev/null +++ b/docs/books/web_services/06-mails-servers.uk.md @@ -0,0 +1,56 @@ +--- +author: null +contributors: null +title: Частина 6. Поштові сервери +--- + + diff --git a/docs/index.de.md b/docs/index.de.md index 9431efd538..d10c7c4aec 100644 --- a/docs/index.de.md +++ b/docs/index.de.md @@ -52,6 +52,6 @@ Wenn Sie zum ersten Mal die Rocky Linux Dokumentation-Seite besuchen, kann es se Wenn Sie nicht weiter kommen oder Fragen haben, ist die Rocky Linux Community da, um Ihnen zu helfen. Besuchen Sie das [Community-Forum](https://forums.rockylinux.org) und Sie werden Lösungen finden oder Fragen an die Community stellen können. -## Mitwirken +## Mitwirkung Haben Sie festgestellt, dass etwas fehlt? Haben Sie einen Fehler gefunden? Sie fragen sich, wie Sie ein eigenes Dokument erstellen oder wie Sie etwas hier reparieren oder anpassen können? Haben wir nicht gesagt, dass *Sie*, wenn Sie möchten, Teil der Rocky Linux Community sind? Nun, das bedeutet, dass *Sie* für uns wichtig sind und wir gern möchten, dass Sie sich uns anschließen und helfen diese Dokumentation zu verbessern. Wenn Sie daran interessiert sind, schauen Sie im [Contribution Guide](https://github.com/rocky-linux/documentation/blob/main/README.md) nach! diff --git a/docs/index.fr.md b/docs/index.fr.md index fe6e3c0b39..9df4d7602c 100644 --- a/docs/index.fr.md +++ b/docs/index.fr.md @@ -34,7 +34,7 @@ Les sections principales du site de documentation sont : Dans l'équipe Rocky Linux, nous voulons rendre le site de documentation accessible à autant de monde que possible — *la traduction dans différentes langues est importante pour cela*. Si vous cliquez sur le sélecteur de langue (symbole 文A, wén-A) dans le menu supérieur, vous verrez les langues dans lesquelles le site est disponible. Il y a deux parties à cela : 1. Traduction de l'interface du site web : si vous choisissez une autre langue, par exemple le Français, vous noterez que l'interface, par exemple les boutons de navigation 'Suivant' et 'Précédent' seront traduits. -1. Contenu : La traduction du contenu est évidemment une tâche (importante) en cours. Tout le contenu n'est pas encore traduit dans toutes les langues. Toutes les pages qui ont été traduites (dans la langue sélectionnée) seront vues dans la langue choisie, celles qui ne le sont pas encore se retrouveront dans la langue anglaise par défaut. Si vous voulez contribuer à la communauté par le biais des traductions, l'équipe de documentation sera ravie de vous connaître, voir ci-dessous pour plus de détails. +1. Contenu : [la traduction du contenu est une tâche](https://crowdin.com/project/rockydocs/activity-stream) (importante) [en cours](https://crowdin.com/project/rockydocs). Tout le contenu n'est pas encore traduit dans toutes les langues. Toutes les pages qui ont été traduites (dans la langue sélectionnée) seront vues dans la langue choisie, celles qui ne le sont pas encore se retrouveront dans la langue anglaise par défaut. Si vous voulez contribuer à la communauté par le biais des traductions, l'équipe de documentation sera ravie de vous connaître, voir ci-dessous pour plus de détails. !!! note "Remarque"