Как осуществить подключение к реализации MariaDB?

Я использую Docker для настройки проекта и столкнулся с некоторыми трудностями, связанными с документацией, доступной по ссылке <a href="https://mariadb.com/kb/en/setting-up-replication/" rel="nofollow">https://mariadb.com/kb/en/setting-up-replication/</a>. 

В частности, меня интересуют следующие моменты:

1. Я правильно настроил образы для главного и слейв-сервера MariaDB в Docker? Вот как они выглядят: 
   <pre><code class="yaml">services:
    dbmaster:
        container_name: dbmaster
        image: mariadb:10.3.3
        restart: unless-stopped
        environment:
            MYSQL_ROOT_PASSWORD: pass
            MYSQL_DATABASE: 99ballov
            MYSQL_USER: myUser
            MYSQL_PASSWORD: myUser
        volumes:
            - dbmaster:/var/lib/mysql
            - ./conf/mysql-master.cnf:/etc/mysql/conf.d/mysql-master.cnf
        networks:
            - app-network
        ports:
            - 3307:3306
    dbslave:
        container_name: dbslave
        image: mariadb:10.3.3
        restart: unless-stopped
        environment:
            MYSQL_ROOT_PASSWORD: pass
        volumes:
            - dbslave:/var/lib/mysql
        networks:
            - app-network
        ports:
            - 3308:3306
volumes:
    dbmaster:
    dbslave:
networks:
    app-network:
        driver: bridge</code></pre>

2. Я также создал файл конфигурации `./conf/mysql-master.cnf`, как показано ниже:
   <pre><code>[mysqld]
log-bin
server_id=1
log_bin = /var/log/mysql/mariadb-bin.log
binlog_format = ROW</code></pre>

3. Наконец, когда я пытаюсь войти в Docker-контейнер с `dbmaster`, я получаю следующее предупреждение:
   <pre><code>docker exec -it dbmaster sh -с 'exec mysql -u root -p
Warning: World-writable config file '/etc/mysql/conf.d/mysql-master.cnf' is ignored
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.3.3-MariaDB-10.3.3+maria~jessie mariadb.org binary dis</code></pre>

Как мне разрешить проблему с файлом конфигурации и убедиться, что репликация настроена правильно?
  • 4 декабря 2024 г. 20:13
Ответы на вопрос 1
Ваша настройка Docker для MariDB выглядит в целом неплохо, и вы на правильном пути. Однако у вас есть некоторые моменты, которые требуют внимания. Давайте рассмотрим их поочередно.

### 1. Настройка образов для главного и слейв-сервера

Ваши настройки для `dbmaster` и `dbslave` корректны. Вы используете различные порты для каждого контейнера, и это правильно. Обратите внимание, что для настройки репликации также нужно будет указать параметры на стороне слейва.

### 2. Файл конфигурации `mysql-master.cnf`

Ошибка "World-writable config file" (файл конфигурации с правами на запись для всех) возникает из-за того, что файл имеет права доступа, позволяющие записывать его всем пользователям (доступ 777). Это может привести к проблемам с безопасностью и поэтому MariaDB игнорирует этот файл.

Чтобы исправить это, зайдите в папку, где находится файл `mysql-master.cnf`, и измените права доступа файла с помощью команды:

```bash
chmod 644 ./conf/mysql-master.cnf
```

Проверьте права доступа к файлу с помощью `ls -l ./conf/mysql-master.cnf`:

```bash
-rw-r--r-- 1 user group size date mysql-master.cnf
```

После изменения прав вам, возможно, потребуется перезапустить контейнер `dbmaster` для применения новых настроек:

```bash
docker-compose down
docker-compose up -d
```

### 3. Настройка репликации

После того как вы убедитесь, что файл конфигурации успешно загружен, вам нужно выполнить настройку репликации. После подключения к `dbmaster` введите следующие команды:

```sql
CREATE USER 'replicator'@'%' IDENTIFIED BY 'replicator_password';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;
SHOW MASTER STATUS;
```

Запишите вывод команды `SHOW MASTER STATUS`, он будет содержать `File` и `Position`, которые вы будете использовать в конфигурации вашего слейва.

### Настройка слейва

После этого, подключитесь к контейнеру `dbslave` и выполните следующие команды, используя информацию из предыдущего шага:

```sql
CHANGE MASTER TO 
  MASTER_HOST='dbmaster',
  MASTER_USER='replicator',
  MASTER_PASSWORD='replicator_password',
  MASTER_LOG_FILE='имя_файла_из_MASTER_STATUS',
  MASTER_LOG_POS=позиция_из_MASTER_STATUS;

START SLAVE;
SHOW SLAVE STATUS\G
```

Проверьте статус слейва с помощью команды `SHOW SLAVE STATUS\G`. Убедитесь, что `Slave_IO_Running` и `Slave_SQL_Running` имеют значение "Yes".

### Резюме

1. Измените права доступа к файлу конфигурации.
2. Перезапустите контейнер `dbmaster`.
3. Настройте учетную запись репликации и параметры репликации на слейве.

Если у вас остались вопросы или возникли новые проблемы, пожалуйста, дайте знать, и я помогу вам!
Похожие вопросы