Мы можем перейти в Docker Hub и увидеть:
Страница после нажатия:
Непосредственно выполните docker pull mysql, и будет загружена последняя версия MySQL.
Щелкните теги, чтобы найти и загрузить классический MySQL5.7:
[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 ~]#
Выполнить на виртуальной машине ipv4
Основная цель команды — настроить сетевой интерфейс виртуальной машины, чтобы она могла нормально подключаться к сети. IPv4 в настоящее время широко используется IP соглашение, это Internet Член семейства протоколов, используемых для идентификации и обнаружения сетевых устройств в Интернете. В виртуализированной среде виртуальной машине требуется уникальный IPv4 адрес для связи с другими устройствами.
путем выполнения ipv4
команда, которую можно настроить для виртуальной машины IPv4 Параметры сети, такие как адрес, маска подсети, шлюз и т. д. Эти параметры будут определять, как виртуальная машина взаимодействует с другими устройствами. Например, если виртуальная машина IP адрес с другими устройствами IP Если адреса находятся в разных подсетях, они не могут взаимодействовать напрямую и их необходимо перенаправить через шлюз.
Короче говоря, выполнить ipv4
Команды могут помочь виртуальной машине правильно настроить параметры сети, чтобы она могла правильно подключаться к сети и взаимодействовать с другими устройствами. Если вы используете облачный сервер, он уже включен по умолчанию и дополнительная настройка не требуется.
[root@service-monitoring ~]# vim /usr/lib/sysctl.d/00-system.conf
Добавить в:
net.ipv4_forward=1
Поскольку были внесены изменения, связанные с сетью, соответствующие службы необходимо перезапустить:
systemctl restart network;
systemctl restart docker;
# Контейнер 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 находится в состоянии выхода, что означает наличие проблемы, а время создания и время состояния в основном совпадают, что означает, что запуск не удался.
Затем вам нужно проверить журнал соответствующего контейнера:
[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]#
Кажется, необходимы корректировки для удаления и т. д. параметров запуска:
# Удален -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]#
Конечно, сообщается об ожидаемой ошибке, поэтому удалите ее.
[root@service-monitoring home]# docker rm mysql
mysql
[root@service-monitoring home]#
Затем повторно выполните команду запуска:
Проверьте еще раз:
[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 работает успешно.
Мы обнаружили, что они уже нажали для нас команду запуска и создали соответствующие пути:
[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]#
Видно, что установка докера действительно удобна!
Статус каждого контейнера можно отслеживать в режиме реального времени:
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 для выхода.
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]#
Также идеально:
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#
Рассмотрите следующие вопросы:
Обычно режим кластера MySQL и размер хранилища планируются заранее, а экстренное расширение обычно не выполняется. И, как и в случае с некоторыми пропусками, для облегчения взимания платы с пользователей предоставляются некоторые облачные базы данных. Это облачные платформы, и нет проблем с использованием докера для расширения емкости. Но нормальные компании не будут модифицировать MySQL [часто].
Если экземпляр контейнера удален и изображение также удалено, останутся ли данные таблицы базы данных MySQL?
Экземпляр контейнера — это работающий экземпляр, созданный образом Docker, а MySQL в контейнере — это служба базы данных MySQL, работающая в экземпляре контейнера. В Docker каждый экземпляр контейнера представляет собой изолированную рабочую среду, в которой могут выполняться различные приложения и службы. Таким образом, когда вы запускаете MySQL в контейнере Docker, служба базы данных MySQL работает в изолированной среде этого экземпляра контейнера, изолированной от других экземпляров контейнера и других процессов на хосте.
Если вы удалите экземпляр контейнера Docker, а данные в экземпляре контейнера не сохраняются, данные в экземпляре контейнера будут удалены. Если вы удалите образ Docker, файловая система и история образа также будут удалены, но данные в экземплярах контейнера, созданные образом, не будут затронуты.
Контейнеры и образы — это разные вещи:
Таким образом, удаление экземпляра контейнера не повлияет на сам образ, но удаление образа повлияет на все экземпляры контейнера, созданные на его основе.
Поэтому мы все смонтируем его через диск, а также перенесем и сохраним данные в каталог на хост-компьютере. Таким образом, наша предыдущая команда запуска также включает операцию монтирования, которая гарантирует, что даже если экземпляр контейнера будет удален, данные все равно сохранятся.
Но если мы хотим добиться совместного использования данных, то есть поделиться данными с другими базами данных для расширения совместного использования данных, а каталог, который мы только что смонтировали, очевидно, не может использоваться несколькими базами данных совместно, другие базы данных не могут быть записаны, поэтому мы не можем включить совместное использование данных. Поскольку доступ к каталогу на хосте и его запись может быть осуществлен только одним экземпляром контейнера, совместное использование данных между несколькими экземплярами контейнера невозможно.
Каталог на хосте может быть доступен и записан только одним экземпляром контейнера, поскольку только один процесс (или экземпляр контейнера) может одновременно занимать каталог. Когда вы монтируете каталог на хосте в контейнер, права доступа к каталогу в контейнере такие же, как и на хосте. Если несколько экземпляров контейнера одновременно обращаются к каталогу, возникнут конфликты, приводящие к несогласованности и повреждению данных. Чтобы решить эту проблему, вы можете использовать некоторые распределенные файловые системы, такие как GlusterFS и Ceph, для преобразования каталога на хосте в распределенную файловую систему и монтирования ее к нескольким экземплярам контейнера. Это обеспечивает совместное использование данных и доступ между несколькими экземплярами контейнера.
Другие промежуточные программы, такие как кэш и mq, фактически находятся на одном сервере и используют память, поэтому возникнет конкуренция за память. Конечно, вы также можете ограничить порог использования памяти для другого промежуточного программного обеспечения. Естественно, MySQL может быть выделено недостаточно. память текущего сервера не может использоваться исключительно, что окажет некоторое влияние на производительность, что также является серьезным ограничением.
В этом случае вы можете оптимизировать использование памяти вашей системы следующим образом:
С помощью вышеуказанных мер можно эффективно избежать конкуренции памяти и проблем с эксклюзивом, а также повысить производительность и надежность системы.
База данных — это основа системы, и необходимо приложить все усилия для обеспечения ее стабильности. Поэтому лучше всего развертывать его отдельно, а докер-контейнер развертывает только MySQL. Поэтому рекомендуется использовать различные облачные базы данных, которые имеют низкие затраты на эксплуатацию и обслуживание и отвечают трем высоким требованиям, за исключением того недостатка, что они являются дорогостоящими.
Когда вы используете Docker для развертывания и настройки базы данных MySQL, вы получаете множество преимуществ, таких как большая переносимость, лучшая изоляция ресурсов и лучшая масштабируемость. Docker обеспечивает удобство развертывания и управления базами данных MySQL, упрощая управление и обслуживание баз данных MySQL.
В этой статье описывается, как развернуть и настроить базу данных MySQL с помощью Docker, а также приведены некоторые советы по оптимизации производительности и предотвращению распространенных проблем. Я надеюсь, что эта статья поможет вам лучше понять базы данных Docker и MySQL, а также получить лучший опыт и результаты на практике.