> For the complete documentation index, see [llms.txt](https://utm-1.gitbook.io/utm-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://utm-1.gitbook.io/utm-docs/dokumentaciya/utm-it/resheniya/subd/mysql/instansy/utm-mysql8-na-utm-db4-9.md).

# utm-mysql8 на utm-db4-9

## Общая информация

Инстанс MySQL на utm-db4-9

MySQL работает в контейнере Docker.

<table><thead><tr><th width="306.79998779296875">Имя</th><th>Значение</th></tr></thead><tbody><tr><td>Сервер Имя</td><td> <a href="/pages/0rweffGpEO3t6GtRLqs6">utm-db4-9</a></td></tr><tr><td>Сервер IP  </td><td> 192.168.4.9</td></tr><tr><td>Порт</td><td>3306</td></tr><tr><td>Порт мониторинга</td><td><a href="http://192.168.4.9:9104/metrics">9104</a></td></tr><tr><td>Порт phpmyadmin</td><td><a href="http://192.168.4.9:8080/">8080</a></td></tr><tr><td>Версия MySQL</td><td>8.4.7</td></tr><tr><td>БД</td><td><ul><li>db_test</li><li>db_dev</li><li>phpmyadmin</li></ul></td></tr><tr><td>Пользователи</td><td><ul><li>root</li><li>maxim</li><li>andrew</li></ul></td></tr><tr><td>Репозиторий на GitHub</td><td>db-projects</td></tr><tr><td>Папка с проектом в репозитории</td><td>utm-mysql8</td></tr><tr><td>Имя Docker контейнера</td><td>utm-mysql8</td></tr><tr><td>Каталог на сервере с смонтированной папкой данных</td><td>/var/lib/docker/volumes/docker_utm-mysql8-data</td></tr></tbody></table>

## Предварительная подготовка

### Репозиторий в GitHub

Необходимо создать приватный репозиторий db-projects на GitHub.

В аккаунте GitHub должен быть прописан публичный SSH ключ для доступа к GitHub.

Склонировать репозиторий db-projects **на рабочую станцию где ведется разработка.**

### Linux cервер развертывания

<details>

<summary>Настройка Linux сервера развертывания MySQL</summary>

На Linux сервере развертывания должно быть:

* [Установлен Docker](https://app.gitbook.com/o/ydyc10nkiaS0aa9uq3Ai/s/UHLel8CyIki7deC8qpxM/~/changes/235/instrukcii/dokumentaciya/virtualnye-servera/utm-server4/system-servers/utm-db4-9/ustanovka-docker)

```bash
docker --version
# Docker version 28.4.0, build d8eb465
```

* Установлен Git

```bash
git --version
# git version 2.43.0
```

* Группы доступа

```bash
# Группа доступа к проектам GitHub
sudo addgroup utm-github
# Добавить пользователей в группу
sudo usermod -aG utm-github maxim
sudo usermod -aG utm-github andrew
```

* Папки

```bash
# Создать папку
sudo mkdir -p /srv/github/utenkov-maxim
# Права на доступ к папке
sudo chmod -R 0775 /srv/github/utenkov-maxim
# Владелец папки
sudo chown -R root:utm-github /srv/github/utenkov-maxim
# Добавить линк в домашней папке к папке /srv/github/utenkov-maxim
ln -s /srv/github $HOME/github
```

* Настройка доступа к GitHub по SSH

Скопировать в папку $HOME/.ssh пару SSH ключей доступа к GitHub

```bash
# Права на доступ к папке
sudo chmod 600 ~/.ssh/id_ed25519_github_utenkov-maxim
# Настроить config для SSH
sudo nano ~/.ssh/config
```

Добавить следующее содержимое:

```ssh-config
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_github_utenkov-maxim
    IdentitiesOnly yes
```

</details>

## Подготовка файлов проекта

Предварительно должен быть склонирован репозиторий db-projects из GitHub.

В папке `db-projects` создать папку проекта `utm-mysql8/docker` и создать следующие файлы:

**compose.yaml**

<details>

<summary>Содержимое файла compose.yaml</summary>

```yaml
volumes:
  utm-mysql8-data:
  utm-phpmyadmin-sessions:

services:
  # MySQL 8.4
  utm-mysql8:
    image: mysql:8.4.7
    container_name: utm-mysql8
    restart: always
    environment:
      # Main variabels
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
      # Addition users
      MYSQL_USER2: ${MYSQL_USER2}
      MYSQL_USER2_PASSWORD: ${MYSQL_USER2_PASSWORD}
      # Exporter for Prometheus
      MYSQL_USER_EXPORTER: ${MYSQL_USER_EXPORTER}
      MYSQL_USER_EXPORTER_PASSWORD: ${MYSQL_USER_EXPORTER_PASSWORD}
      # Second database
      MYSQL_DATABASE_DEV: ${MYSQL_DATABASE_DEV}
      # phpmyadmin database
      MYSQL_DATABASE_PHPMYADMIN: ${MYSQL_DATABASE_PHPMYADMIN}
      MYSQL_USER_PHPMYADMIN: ${MYSQL_USER_PHPMYADMIN}
      MYSQL_USER_PHPMYADMIN_PASSWORD: ${MYSQL_USER_PHPMYADMIN_PASSWORD}
    volumes:
      - utm-mysql8-data:/var/lib/mysql/
      - ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
    ports:
      - "3306:3306"
    healthcheck:  
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"] 
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 10s

  # phpmyadmin
  utm-phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    container_name: utm-phpmyadmin
    restart: always
    depends_on:
      - utm-mysql8
    environment:
      PMA_ARBITRARY: 1
      PMA_HOST: utm-mysql8
      PMA_PORT: 3306
      PMA_PMADB: ${MYSQL_DATABASE_PHPMYADMIN}
      PMA_CONTROLUSER: ${MYSQL_USER_PHPMYADMIN}
      PMA_CONTROLPASS: ${MYSQL_USER_PHPMYADMIN_PASSWORD}
      PMA_QUERYHISTORYDB: true
    volumes:
      - utm-phpmyadmin-sessions:/sessions:rw
    ports:
      - "8080:80"

```

</details>

**.env**

<details>

<summary>Содержимое файла <strong>.env</strong></summary>

```apache
# Main variabels
MYSQL_ROOT_PASSWORD=<пароль для пользователя root>
MYSQL_DATABASE=db_test
MYSQL_USER=maxim
MYSQL_PASSWORD=<пароль для пользователя maxim>

# Addition users
MYSQL_USER2=andrew
MYSQL_USER2_PASSWORD=<пароль для пользователя andrew>

# Exporter for Prometheus
MYSQL_USER_EXPORTER=mysql_exporter
MYSQL_USER_EXPORTER_PASSWORD=<пароль для пользователя mysql_exporter>

# Second database
MYSQL_DATABASE_DEV=db_dev

# phpmyadmin database
MYSQL_DATABASE_PHPMYADMIN=phpmyadmin
MYSQL_USER_PHPMYADMIN=pma
MYSQL_USER_PHPMYADMIN_PASSWORD=<пароль для пользователя pma>
```

</details>

В папке `utm-mysql8/docker` создать подпапку `docker-entrypoint-initdb.d` для инициализации сервера и создать следующие файлы:

**init-db.sh**

<details>

<summary>Содержимое файла init-db.sh</summary>

```sh
#!/bin/bash

mysql -uroot -p${MYSQL_ROOT_PASSWORD} -e <<-EOSQL
    CREATE USER ${MYSQL_USER2}@localhost IDENTIFIED BY '${MYSQL_USER2_PASSWORD}';
    CREATE USER ${MYSQL_USER_EXPORTER}@localhost IDENTIFIED BY '${MYSQL_USER_EXPORTER_PASSWORD}';
    
    CREATE DATABASE ${MYSQL_DATABASE_DEV} /*\!40100 DEFAULT CHARACTER SET utf8 */;

    GRANT ALL PRIVILEGES ON ${MYSQL_DATABASE}.* TO '${MYSQL_USER}'@'localhost';
    GRANT ALL PRIVILEGES ON ${MYSQL_DATABASE}.* TO '${MYSQL_USER2}'@'localhost';
    GRANT ALL PRIVILEGES ON ${MYSQL_DATABASE}.* TO '${MYSQL_USER_EXPORTER}'@'localhost';

    GRANT ALL PRIVILEGES ON ${MYSQL_DATABASE_DEV}.* TO '${MYSQL_USER}'@'localhost';
    GRANT ALL PRIVILEGES ON ${MYSQL_DATABASE_DEV}.* TO '${MYSQL_USER2}'@'localhost';
    GRANT ALL PRIVILEGES ON ${MYSQL_DATABASE_DEV}.* TO '${MYSQL_USER_EXPORTER}'@'localhost';

    FLUSH PRIVILEGES;
EOSQL
```

</details>

**create\_tables.sql**

<details>

<summary>Содержимое файла <strong>create_tables.sql</strong></summary>

```sql
-- --------------------------------------------------------
-- SQL Commands to set up the pmadb as described in the documentation.
--
-- This file is meant for use with MySQL 5 and above!
--
-- This script expects the user pma to already be existing. If we would put a
-- line here to create them too many users might just use this script and end
-- up with having the same password for the controluser.
--
-- This user "pma" must be defined in config.inc.php (controluser/controlpass)
--
-- Please don't forget to set up the tablenames in config.inc.php
--

-- --------------------------------------------------------

--
-- Database : `phpmyadmin`
--
CREATE DATABASE IF NOT EXISTS `phpmyadmin`
  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
USE phpmyadmin;

-- --------------------------------------------------------

--
-- Privileges
--
-- (activate this statement if necessary)
-- GRANT SELECT, INSERT, DELETE, UPDATE, ALTER ON `phpmyadmin`.* TO
--    'pma'@localhost;

-- --------------------------------------------------------

--
-- Table structure for table `pma__bookmark`
--

CREATE TABLE IF NOT EXISTS `pma__bookmark` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `dbase` varchar(255) NOT NULL default '',
  `user` varchar(255) NOT NULL default '',
  `label` varchar(255) COLLATE utf8_general_ci NOT NULL default '',
  `query` text NOT NULL,
  PRIMARY KEY  (`id`)
)
  COMMENT='Bookmarks'
  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

-- --------------------------------------------------------

--
-- Table structure for table `pma__column_info`
--

CREATE TABLE IF NOT EXISTS `pma__column_info` (
  `id` int(5) unsigned NOT NULL auto_increment,
  `db_name` varchar(64) NOT NULL default '',
  `table_name` varchar(64) NOT NULL default '',
  `column_name` varchar(64) NOT NULL default '',
  `comment` varchar(255) COLLATE utf8_general_ci NOT NULL default '',
  `mimetype` varchar(255) COLLATE utf8_general_ci NOT NULL default '',
  `transformation` varchar(255) NOT NULL default '',
  `transformation_options` varchar(255) NOT NULL default '',
  `input_transformation` varchar(255) NOT NULL default '',
  `input_transformation_options` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `db_name` (`db_name`,`table_name`,`column_name`)
)
  COMMENT='Column information for phpMyAdmin'
  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

-- --------------------------------------------------------

--
-- Table structure for table `pma__history`
--

CREATE TABLE IF NOT EXISTS `pma__history` (
  `id` bigint(20) unsigned NOT NULL auto_increment,
  `username` varchar(64) NOT NULL default '',
  `db` varchar(64) NOT NULL default '',
  `table` varchar(64) NOT NULL default '',
  `timevalue` timestamp NOT NULL default CURRENT_TIMESTAMP,
  `sqlquery` text NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `username` (`username`,`db`,`table`,`timevalue`)
)
  COMMENT='SQL history for phpMyAdmin'
  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

-- --------------------------------------------------------

--
-- Table structure for table `pma__pdf_pages`
--

CREATE TABLE IF NOT EXISTS `pma__pdf_pages` (
  `db_name` varchar(64) NOT NULL default '',
  `page_nr` int(10) unsigned NOT NULL auto_increment,
  `page_descr` varchar(50) COLLATE utf8_general_ci NOT NULL default '',
  PRIMARY KEY  (`page_nr`),
  KEY `db_name` (`db_name`)
)
  COMMENT='PDF relation pages for phpMyAdmin'
  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

-- --------------------------------------------------------

--
-- Table structure for table `pma__recent`
--

CREATE TABLE IF NOT EXISTS `pma__recent` (
  `username` varchar(64) NOT NULL,
  `tables` text NOT NULL,
  PRIMARY KEY (`username`)
)
  COMMENT='Recently accessed tables'
  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

-- --------------------------------------------------------

--
-- Table structure for table `pma__favorite`
--

CREATE TABLE IF NOT EXISTS `pma__favorite` (
  `username` varchar(64) NOT NULL,
  `tables` text NOT NULL,
  PRIMARY KEY (`username`)
)
  COMMENT='Favorite tables'
  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

-- --------------------------------------------------------

--
-- Table structure for table `pma__table_uiprefs`
--

CREATE TABLE IF NOT EXISTS `pma__table_uiprefs` (
  `username` varchar(64) NOT NULL,
  `db_name` varchar(64) NOT NULL,
  `table_name` varchar(64) NOT NULL,
  `prefs` text NOT NULL,
  `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`username`,`db_name`,`table_name`)
)
  COMMENT='Tables'' UI preferences'
  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

-- --------------------------------------------------------

--
-- Table structure for table `pma__relation`
--

CREATE TABLE IF NOT EXISTS `pma__relation` (
  `master_db` varchar(64) NOT NULL default '',
  `master_table` varchar(64) NOT NULL default '',
  `master_field` varchar(64) NOT NULL default '',
  `foreign_db` varchar(64) NOT NULL default '',
  `foreign_table` varchar(64) NOT NULL default '',
  `foreign_field` varchar(64) NOT NULL default '',
  PRIMARY KEY  (`master_db`,`master_table`,`master_field`),
  KEY `foreign_field` (`foreign_db`,`foreign_table`)
)
  COMMENT='Relation table'
  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

-- --------------------------------------------------------

--
-- Table structure for table `pma__table_coords`
--

CREATE TABLE IF NOT EXISTS `pma__table_coords` (
  `db_name` varchar(64) NOT NULL default '',
  `table_name` varchar(64) NOT NULL default '',
  `pdf_page_number` int(11) NOT NULL default '0',
  `x` float unsigned NOT NULL default '0',
  `y` float unsigned NOT NULL default '0',
  PRIMARY KEY  (`db_name`,`table_name`,`pdf_page_number`)
)
  COMMENT='Table coordinates for phpMyAdmin PDF output'
  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

-- --------------------------------------------------------

--
-- Table structure for table `pma__table_info`
--

CREATE TABLE IF NOT EXISTS `pma__table_info` (
  `db_name` varchar(64) NOT NULL default '',
  `table_name` varchar(64) NOT NULL default '',
  `display_field` varchar(64) NOT NULL default '',
  PRIMARY KEY  (`db_name`,`table_name`)
)
  COMMENT='Table information for phpMyAdmin'
  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

-- --------------------------------------------------------

--
-- Table structure for table `pma__tracking`
--

CREATE TABLE IF NOT EXISTS `pma__tracking` (
  `db_name` varchar(64) NOT NULL,
  `table_name` varchar(64) NOT NULL,
  `version` int(10) unsigned NOT NULL,
  `date_created` datetime NOT NULL,
  `date_updated` datetime NOT NULL,
  `schema_snapshot` text NOT NULL,
  `schema_sql` text,
  `data_sql` longtext,
  `tracking` set('UPDATE','REPLACE','INSERT','DELETE','TRUNCATE','CREATE DATABASE','ALTER DATABASE','DROP DATABASE','CREATE TABLE','ALTER TABLE','RENAME TABLE','DROP TABLE','CREATE INDEX','DROP INDEX','CREATE VIEW','ALTER VIEW','DROP VIEW') default NULL,
  `tracking_active` int(1) unsigned NOT NULL default '1',
  PRIMARY KEY  (`db_name`,`table_name`,`version`)
)
  COMMENT='Database changes tracking for phpMyAdmin'
  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

-- --------------------------------------------------------

--
-- Table structure for table `pma__userconfig`
--

CREATE TABLE IF NOT EXISTS `pma__userconfig` (
  `username` varchar(64) NOT NULL,
  `timevalue` timestamp NOT NULL default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `config_data` text NOT NULL,
  PRIMARY KEY  (`username`)
)
  COMMENT='User preferences storage for phpMyAdmin'
  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

-- --------------------------------------------------------

--
-- Table structure for table `pma__users`
--

CREATE TABLE IF NOT EXISTS `pma__users` (
  `username` varchar(64) NOT NULL,
  `usergroup` varchar(64) NOT NULL,
  PRIMARY KEY (`username`,`usergroup`)
)
  COMMENT='Users and their assignments to user groups'
  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

-- --------------------------------------------------------

--
-- Table structure for table `pma__usergroups`
--

CREATE TABLE IF NOT EXISTS `pma__usergroups` (
  `usergroup` varchar(64) NOT NULL,
  `tab` varchar(64) NOT NULL,
  `allowed` enum('Y','N') NOT NULL DEFAULT 'N',
  PRIMARY KEY (`usergroup`,`tab`,`allowed`)
)
  COMMENT='User groups with configured menu items'
  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

-- --------------------------------------------------------

--
-- Table structure for table `pma__navigationhiding`
--

CREATE TABLE IF NOT EXISTS `pma__navigationhiding` (
  `username` varchar(64) NOT NULL,
  `item_name` varchar(64) NOT NULL,
  `item_type` varchar(64) NOT NULL,
  `db_name` varchar(64) NOT NULL,
  `table_name` varchar(64) NOT NULL,
  PRIMARY KEY (`username`,`item_name`,`item_type`,`db_name`,`table_name`)
)
  COMMENT='Hidden items of navigation tree'
  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

-- --------------------------------------------------------

--
-- Table structure for table `pma__savedsearches`
--

CREATE TABLE IF NOT EXISTS `pma__savedsearches` (
  `id` int(5) unsigned NOT NULL auto_increment,
  `username` varchar(64) NOT NULL default '',
  `db_name` varchar(64) NOT NULL default '',
  `search_name` varchar(64) NOT NULL default '',
  `search_data` text NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `u_savedsearches_username_dbname` (`username`,`db_name`,`search_name`)
)
  COMMENT='Saved searches'
  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

-- --------------------------------------------------------

--
-- Table structure for table `pma__central_columns`
--

CREATE TABLE IF NOT EXISTS `pma__central_columns` (
  `db_name` varchar(64) NOT NULL,
  `col_name` varchar(64) NOT NULL,
  `col_type` varchar(64) NOT NULL,
  `col_length` text,
  `col_collation` varchar(64) NOT NULL,
  `col_isNull` boolean NOT NULL,
  `col_extra` varchar(255) default '',
  `col_default` text,
  PRIMARY KEY (`db_name`,`col_name`)
)
  COMMENT='Central list of columns'
  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

-- --------------------------------------------------------

--
-- Table structure for table `pma__designer_settings`
--

CREATE TABLE IF NOT EXISTS `pma__designer_settings` (
  `username` varchar(64) NOT NULL,
  `settings_data` text NOT NULL,
  PRIMARY KEY (`username`)
)
  COMMENT='Settings related to Designer'
  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

-- --------------------------------------------------------

--
-- Table structure for table `pma__export_templates`
--

CREATE TABLE IF NOT EXISTS `pma__export_templates` (
  `id` int(5) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(64) NOT NULL,
  `export_type` varchar(10) NOT NULL,
  `template_name` varchar(64) NOT NULL,
  `template_data` text NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `u_user_type_template` (`username`,`export_type`,`template_name`)
)
  COMMENT='Saved export templates'
  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

```

</details>

В папке `db-projects` создать папку проекта `utm-mysql8/docker-mysql-exporter` и создать следующие файлы:

**compose.yaml**

<details>

<summary>Содержимое файла <strong>compose.yaml</strong></summary>

```yaml
services:
  mysql-exporter:
    image: quay.io/prometheuscommunity/mysql-exporter
    restart: always
    environment:
      DATA_SOURCE_URI: "192.168.4.9:5432/mysql?sslmode=disable"
      DATA_SOURCE_USER: mysql_exporter
      DATA_SOURCE_PASS: <пароль>
    container_name: mysql-exporter-utm-mysql8
    ports:
      - "9187:9187"
```

</details>

Сделать коммит в GitHub со всеми изменениями в репозитории db-projects.

## Запуск Docker контейнеров с MySQL и phpmyadmin

<details>

<summary>Выполнение запуска Docker контейнеров с MySQL и phpmyadmin</summary>

Подключение репозитория db-projects:

```bash
# Перейти в общую папку
cd  ~/github/utenkov-maxim
# Выполнить клонирование репозитория
git clone git@github.com:utenkov-maxim/db-projects.git
# Перейти в папку репозитория db-projects
cd db-projects/utm-mysql8/docker
```

Обновление репозитория:

```bash
# Перейти в папку репозитория db-projects
cd  ~/github/utenkov-maxim/db-projects
# Получить свежие данные из репозитория
git pull
# Перейти в папку проекта 
cd  ~/github/utenkov-maxim/db-projects/utm-mysql8/docker
```

Запустить контейнеры

```bash
# Запустить
docker compose up -d
```

Проверки:

```bash
# Посмотреть запущенные контейнеры
docker ps

# Посмотреть каталог с volume с данными БД который примонтирован к контейнеру
sudo su
cd /var/lib/docker/volumes/docker_utm-mysql8-data
cd /var/lib/docker/volumes/docker_utm-phpmyadmin-sessions
```

Дополнительные команды:

```bash
# Логи запуска контейнера
docker logs utm-mysql8

# Остановить контейнер
docker stop utm-mysql8

# Список всех контейнеров, включая остановленные
docker ps -a

# Удалить контейнер
docker rm utm-mysql8

# Список volumes
docker volume ls

# Удалить volume docker_utm-mysql8-data
docker volume rm docker_utm-mysql8-data

# Список volumes примонтированных к контейнеру
docker inspect utm-mysql8 | grep -i "Mounts"

# Перезапуск контейнера
docker restart utm-mysql8
```

</details>

phpmyadmin: <http://192.168.4.9:8080/>

## Дополнительная настройка MySQL

<details>

<summary>Действия после первого запуска Docker контейнера с MySQL</summary>

После первоначального запуска в Docker контейнера utm-mysql8 выполняется первоначальная инициализация сервера MySQL. При этом выполняются все скрипты из папки `docker-entrypoint-initdb.d`.

Создаются пользователи:

* root
* maxim
* andrew
* mysql\_exporter
* pma

Базы данных:

* db\_test
* db\_dev

Пользователи создаются с паролями, указанными в файле compose.yaml

Поэтому после инициализации необходимо сменить пароли для этих пользователей.

Для этого необходимо подключиться через DBeaver к серверу и выполнить следующие команды:

```plsql
ALTER USER 'root'@'%' IDENTIFIED BY 'new_password';
ALTER USER 'maxim'@'%' IDENTIFIED BY 'new_password';
ALTER USER 'andrew'@'%' IDENTIFIED BY 'new_password';
```

</details>

## Создание пользователя mysql\_exporter на сервере MySQL

<details>

<summary>Действия после первого запуска Docker контейнера с MySQL</summary>

Для запуска мониторинга необходимо на сервере MySQL создать пользователя mysql\_exporter

```plsql
-- Пользователь для мониторинга
CREATE USER 'mysql_exporter'@'%' IDENTIFIED BY '****' WITH MAX_USER_CONNECTIONS 3;

-- Права доступа для пользователя мониторинга
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysql_exporter'@'%';

FLUSH PRIVILEGES;
```

Также можно дополнительно создать объекты, описание тут

</details>

## Запуск Docker контейнера с mysql-exporter

<details>

<summary>Выполнение запуска Docker контейнера с mysql-exporter</summary>

Перейти в папку проекта docker-mysql-exporter:

```bash
cd  ~/github/utenkov-maxim/db-projects/utm-mysql8/docker-mysql-exporter
```

Запустить контейнер

```bash
# Запустить
docker compose up -d
```

Дополнительные команды:

```bash
# Посмотреть запущенные контейнеры
docker ps

# Остановить контейнер
docker stop mysql-exporter-utm-mysql8

# Список всех контейнеров, включая остановленные
docker ps -a

# Удалить контейнер
docker rm mysql-exporter-utm-mysql8

# Перезапуск контейнера
docker restart mysql-exporter-utm-mysql8
```

Проверка метрик

```bash
curl "http://localhost:9104/metrics"
```

Через браузер: <http://192.168.4.9:9104/metrics>

</details>

## Настройка Prometheus и Grafana

Настройка Prometheus и Grafana [описана тут](/utm-docs/dokumentaciya/utm-it/resheniya/monitoring/prometheus/monitoring-postgres.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://utm-1.gitbook.io/utm-docs/dokumentaciya/utm-it/resheniya/subd/mysql/instansy/utm-mysql8-na-utm-db4-9.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
