[Общий доступ к учебнику] Развертывайте MySQL одним щелчком мыши, а также легко устанавливайте и настраивайте Docker!
[Общий доступ к учебнику] Развертывайте MySQL одним щелчком мыши, а также легко устанавливайте и настраивайте Docker!

1 Скачать MySQL

Мы можем перейти в Docker Hub и увидеть:

Страница после нажатия:

Непосредственно выполните docker pull mysql, и будет загружена последняя версия MySQL.

Щелкните теги, чтобы найти и загрузить классический MySQL5.7:

Язык кода:javascript
копировать
[root@service-monitoring ~]# docker pull mysql:5.7.42-oracle

5.7.42-oracle: Pulling from library/mysql
e83e8f2e82cc: Pull complete 
0f23deb01b84: Pull complete 
f5bda3b184ea: Pull complete 
ed17edbc6604: Pull complete 
33a94a6acfa7: Pull complete 
f153bd2953e4: Pull complete 
ab532edfb813: Pull complete 
c76bdfe4f3d0: Pull complete 
8a7ffe2f2551: Pull complete 
857ada4fbbcc: Pull complete 
b7c508404c3c: Pull complete 
Digest: sha256:f57eef421000aaf8332a91ab0b6c96b3c83ed2a981c29e6528b21ce10197cd16
Status: Downloaded newer image for mysql:5.7.42-oracle
docker.io/library/mysql:5.7.42-oracle
[root@service-monitoring ~]# 

2 ipv4

Выполнить на виртуальной машине ipv4 Основная цель команды — настроить сетевой интерфейс виртуальной машины, чтобы она могла нормально подключаться к сети. IPv4 в настоящее время широко используется IP соглашение, это Internet Член семейства протоколов, используемых для идентификации и обнаружения сетевых устройств в Интернете. В виртуализированной среде виртуальной машине требуется уникальный IPv4 адрес для связи с другими устройствами.

путем выполнения ipv4 команда, которую можно настроить для виртуальной машины IPv4 Параметры сети, такие как адрес, маска подсети, шлюз и т. д. Эти параметры будут определять, как виртуальная машина взаимодействует с другими устройствами. Например, если виртуальная машина IP адрес с другими устройствами IP Если адреса находятся в разных подсетях, они не могут взаимодействовать напрямую и их необходимо перенаправить через шлюз.

Короче говоря, выполнить ipv4 Команды могут помочь виртуальной машине правильно настроить параметры сети, чтобы она могла правильно подключаться к сети и взаимодействовать с другими устройствами. Если вы используете облачный сервер, он уже включен по умолчанию и дополнительная настройка не требуется.

2.1 Проверка

Язык кода:javascript
копировать
[root@service-monitoring ~]# vim /usr/lib/sysctl.d/00-system.conf

Добавить в:

Язык кода:javascript
копировать
net.ipv4_forward=1

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

Язык кода:javascript
копировать
systemctl restart network;

systemctl restart docker;

3 Запустите MySQL

Язык кода:javascript
копировать
# Контейнер 3306 Порт, сопоставленный с хостом 3306 порт, чтобы хост IP Доступ к адресу и номеру порта MySQL Служить.
# Укажите имя контейнера для mysql, удобный для последующего управления и операций
[root@service-monitoring home]# docker run -p 3306:3306 --name mysql \
# Установить хост /home/mysql/log Каталог, смонтированный в контейнере /var/log/mysql Каталог для хранения MySQL файл журнала.
-v /home/mysql/log:/var/log/mysql \
# Установить хост /home/mysql/data Каталог, смонтированный в контейнере /var/lib/mysql Каталог для хранения MySQL файл данных.
-v /home/mysql/data:/var/lib/mysql \
# Установить хост /home/mysql/conf Каталог, смонтированный в контейнере /etc/mysql Каталог для хранения MySQL Файл конфигурации.
-v /home/mysql/conf:/etc/mysql \
# Установить хост /home/mysql/mysql-files Каталог, смонтированный в контейнере /var/lib/mysql-files Каталог для хранения MySQL данные файла.
-v /home/mysql/mysql-files:/var/lib/mysql-files \
# настраивать MySQL из root Пароль пользователя для корень. Этот параметрuse использует переменные среды для передачи информации о пароле.
-e MYSOL_ROOT_PASSWORD=root \
# Запуск в фоновом режиме MySQL контейнер,ииспользовать mysql:5.7.42-oracle Это образ для контейнера.
-d mysql:5.7.42-oracle \
# настраивать MySQL из Набор символовдля utf8mb4,ииспользовать utf8mb4_unicode_ci Правила сортировки. Этот параметр обеспечивает MySQL умеющий правильно обращаться Unicode характер.
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
# ---Команда завершается, вывод следующий:
# выходиз是контейнериз ID, указывающий, что контейнер успешно запущен.
ec88509b8b1b8b759747c71b75a9fc6c5c0a8ec63e1e6b7a716a6e98ccce184e
[root@service-monitoring home]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@service-monitoring home]# 

MySQL находится в состоянии выхода, что означает наличие проблемы, а время создания и время состояния в основном совпадают, что означает, что запуск не удался.

Затем вам нужно проверить журнал соответствующего контейнера:

Язык кода:javascript
копировать
[root@service-monitoring home]# docker logs mysql
2023-04-26 15:36:12+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.42-1.el7 started.
2023-04-26 15:36:12+00:00 [ERROR] [Entrypoint]: mysqld failed while attempting to check config
        command was: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --verbose --help --log-bin-index=/tmp/tmp.lEmtN09BMq
        mysqld: Can't read dir of '/etc/mysql/conf.d/' (Errcode: 2 - No such file or directory)
mysqld: [ERROR] Fatal error in defaults handling. Program aborted!
[root@service-monitoring home]# 

Кажется, необходимы корректировки для удаления и т. д. параметров запуска:

Язык кода:javascript
копировать
# Удален -v /home/mysql/conf:/etc/mysql \из Стартовая команда:
[root@service-monitoring home]# docker run -p 3306:3306 --name mysql \
-v /home/mysql/log:/var/log/mysql \
-v /home/mysql/data:/var/lib/mysql \
-v /home/mysql/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7.42-oracle \
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
docker: Error response from daemon: Conflict. The container name "/mysql" is already in use by container "ec88509b8b1b8b759747c71b75a9fc6c5c0a8ec63e1e6b7a716a6e98ccce184e". You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'.
[root@service-monitoring home]# 

Конечно, сообщается об ожидаемой ошибке, поэтому удалите ее.

Язык кода:javascript
копировать
[root@service-monitoring home]# docker rm mysql
mysql
[root@service-monitoring home]# 

Затем повторно выполните команду запуска:

Проверьте еще раз:

Язык кода:javascript
копировать
[root@service-monitoring home]# docker ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED         STATUS         PORTS                                                  NAMES
e380fdc23c78   mysql:5.7.42-oracle   "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
[root@service-monitoring home]# 

Пришло время вставать!

На данный момент MySQL работает успешно.

4. Смонтировались ли файлы?

Мы обнаружили, что они уже нажали для нас команду запуска и создали соответствующие пути:

Язык кода:javascript
копировать
[root@service-monitoring mysql]# pwd
/home/mysql
[root@service-monitoring mysql]# ll
total 16
drwxr-xr-x 2 root    root 4096 Apr 26 23:36 conf
drwxr-xr-x 5 polkitd root 4096 Apr 26 23:58 data
drwxr-xr-x 2 root    root 4096 Apr 26 23:36 log
drwxr-xr-x 2 polkitd root 4096 Apr 26 23:36 mysql-files
[root@service-monitoring mysql]# 

Видно, что установка докера действительно удобна!

5 docker stats

Статус каждого контейнера можно отслеживать в режиме реального времени:

Язык кода:javascript
копировать
CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT     MEM %     NET I/O     BLOCK I/O        PIDS
e380fdc23c78   mysql     0.05%     208.7MiB / 7.795GiB   2.61%     656B / 0B   1.27MB / 289MB   27

Ctrl+C для выхода.

Язык кода:javascript
копировать
CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT     MEM %     NET I/O     BLOCK I/O        PIDS
e380fdc23c78   mysql     0.06%     208.7MiB / 7.795GiB   2.61%     656B / 0B   1.27MB / 289MB   27
^C
[root@service-monitoring data]# 

6 Подключение клиента локальной базы данных

Также идеально:

7. Войдите в контейнер для настройки MySQL.

Язык кода:javascript
копировать
mysql> alter user 'root'@'localhost' identified with mysql_native_password by 'root';
Query OK, 0 rows affected (0.00 sec)
# настройки Пароль живет вечно
mysql> alter user 'root'@'%' identified by 'root' password expire never;
# позволять root Пользователь входит в систему с любого хоста MySQL база данных.MySQL по умолчанию ограничивает пользователям вход в систему с локального хоста, что повышает безопасность системы. Но в некоторых случаях, например, когда требуется удаленное управление MySQL база данных,Необходимо сменить пользователя из ограничения хоста входа на любой хост
mysql> update user set host='%' where user='root';
# 若已настраивать Проходить,Об этой ошибке будет сообщено
ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY'



mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
# Ctrl+D Выйти из MySQL
mysql> ^DBye
bash-4.2#

8 Docker-развертывание MySQL в производственной среде

Рассмотрите следующие вопросы:

8.1 Динамическое расширение MySQL

Обычно режим кластера MySQL и размер хранилища планируются заранее, а экстренное расширение обычно не выполняется. И, как и в случае с некоторыми пропусками, для облегчения взимания платы с пользователей предоставляются некоторые облачные базы данных. Это облачные платформы, и нет проблем с использованием докера для расширения емкости. Но нормальные компании не будут модифицировать MySQL [часто].

8.2 Обмен данными

Если экземпляр контейнера удален и изображение также удалено, останутся ли данные таблицы базы данных MySQL?

Экземпляр контейнера — это работающий экземпляр, созданный образом Docker, а MySQL в контейнере — это служба базы данных MySQL, работающая в экземпляре контейнера. В Docker каждый экземпляр контейнера представляет собой изолированную рабочую среду, в которой могут выполняться различные приложения и службы. Таким образом, когда вы запускаете MySQL в контейнере Docker, служба базы данных MySQL работает в изолированной среде этого экземпляра контейнера, изолированной от других экземпляров контейнера и других процессов на хосте.

Если вы удалите экземпляр контейнера Docker, а данные в экземпляре контейнера не сохраняются, данные в экземпляре контейнера будут удалены. Если вы удалите образ Docker, файловая система и история образа также будут удалены, но данные в экземплярах контейнера, созданные образом, не будут затронуты.

Контейнеры и образы — это разные вещи:

  • Контейнеры запускают экземпляры, созданные из образов.
  • Изображение — это шаблон, используемый для создания контейнера.

Таким образом, удаление экземпляра контейнера не повлияет на сам образ, но удаление образа повлияет на все экземпляры контейнера, созданные на его основе.

Поэтому мы все смонтируем его через диск, а также перенесем и сохраним данные в каталог на хост-компьютере. Таким образом, наша предыдущая команда запуска также включает операцию монтирования, которая гарантирует, что даже если экземпляр контейнера будет удален, данные все равно сохранятся.

Но если мы хотим добиться совместного использования данных, то есть поделиться данными с другими базами данных для расширения совместного использования данных, а каталог, который мы только что смонтировали, очевидно, не может использоваться несколькими базами данных совместно, другие базы данных не могут быть записаны, поэтому мы не можем включить совместное использование данных. Поскольку доступ к каталогу на хосте и его запись может быть осуществлен только одним экземпляром контейнера, совместное использование данных между несколькими экземплярами контейнера невозможно.

Каталог на хосте может быть доступен и записан только одним экземпляром контейнера, поскольку только один процесс (или экземпляр контейнера) может одновременно занимать каталог. Когда вы монтируете каталог на хосте в контейнер, права доступа к каталогу в контейнере такие же, как и на хосте. Если несколько экземпляров контейнера одновременно обращаются к каталогу, возникнут конфликты, приводящие к несогласованности и повреждению данных. Чтобы решить эту проблему, вы можете использовать некоторые распределенные файловые системы, такие как GlusterFS и Ceph, для преобразования каталога на хосте в распределенную файловую систему и монтирования ее к нескольким экземплярам контейнера. Это обеспечивает совместное использование данных и доступ между несколькими экземплярами контейнера.

8.3 Эксклюзивная память

Другие промежуточные программы, такие как кэш и mq, фактически находятся на одном сервере и используют память, поэтому возникнет конкуренция за память. Конечно, вы также можете ограничить порог использования памяти для другого промежуточного программного обеспечения. Естественно, MySQL может быть выделено недостаточно. память текущего сервера не может использоваться исключительно, что окажет некоторое влияние на производительность, что также является серьезным ограничением.

В этом случае вы можете оптимизировать использование памяти вашей системы следующим образом:

  1. Установите соответствующие ограничения на использование памяти для каждого промежуточного программного обеспечения, чтобы избежать гонок и конфликтов.
  2. Для баз данных MySQL использование памяти можно оптимизировать, регулируя размеры кэша и пула буферов.
  3. для кеша, mq и другого промежуточного ПО,Вы можете использовать профессиональные инструменты мониторинга для мониторинга памяти.,И своевременно вносите коррективы для оптимизации производительности.

С помощью вышеуказанных мер можно эффективно избежать конкуренции памяти и проблем с эксклюзивом, а также повысить производительность и надежность системы.

8.4 Не кладите яйца в одну корзину

База данных — это основа системы, и необходимо приложить все усилия для обеспечения ее стабильности. Поэтому лучше всего развертывать его отдельно, а докер-контейнер развертывает только MySQL. Поэтому рекомендуется использовать различные облачные базы данных, которые имеют низкие затраты на эксплуатацию и обслуживание и отвечают трем высоким требованиям, за исключением того недостатка, что они являются дорогостоящими.

9 Резюме

Когда вы используете Docker для развертывания и настройки базы данных MySQL, вы получаете множество преимуществ, таких как большая переносимость, лучшая изоляция ресурсов и лучшая масштабируемость. Docker обеспечивает удобство развертывания и управления базами данных MySQL, упрощая управление и обслуживание баз данных MySQL.

В этой статье описывается, как развернуть и настроить базу данных MySQL с помощью Docker, а также приведены некоторые советы по оптимизации производительности и предотвращению распространенных проблем. Я надеюсь, что эта статья поможет вам лучше понять базы данных Docker и MySQL, а также получить лучший опыт и результаты на практике.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose