Skip to main content

Mysql Server Docker

下载 MySql Server

wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.28-linux-glibc2.17-x86_64-minimal.tar.xz

entrypoint.sh

Entrypoint

Dockerfile

FROM --platform=linux/amd64 debian:stable-slim

ENV PATH=/opt/mysql/bin:$PATH
COPY mysql-8.0.28 /opt/mysql/
COPY entrypoint.sh /opt/mysql/entrypoint.sh

RUN groupadd -r mysql && useradd -r -g mysql mysql
RUN apt-get update && apt-cache search libaio && apt-get install -y libaio1 numactl gosu libncurses5 && \
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false && \
rm -rf /var/lib/apt/lists/*
RUN mkdir /docker-entrypoint-initdb.d/

EXPOSE 3306 33060

ENTRYPOINT ["/opt/mysql/entrypoint.sh"]
CMD ["mysqld"]

Build & Run

docker build . -t mysql:8.0.28
docker run -d --name mysql --pull missing \
--network docker_tts --network-alias mysql \
-e MYSQL_RANDOM_ROOT_PASSWORD=yes \
-p 3306:3306 \
-v /Users/tts/data/docker/mysql/my.cnf:/opt/mysql/my.cnf \
-v /Users/tts/data/docker/mysql/data:/data/mysql/data \
-v /Users/tts/data/docker/mysql/log:/data/mysql/log \
-v /Users/tts/data/docker/mysql/temp:/data/mysql/temp \
mysql:8.0.28 --defaults-file=/opt/mysql/my.cnf

root 用户设置

注意

当初始化完成,命令输出中会包含为 root 用户生成的随机密码,可以通过下面的命令提取密码:

docker logs mysql 2>&1 | grep GENERATED
# 输出中会打印出密码
GENERATED ROOT PASSWORD: Axegh3kAJyDLaRuBemecis&EShOs

server 已就绪,即可通过客户端连接到 Mysql server

docker exec -it mysql mysql -u root -p

交互界面要求输入密码,即可输入刚刚获取到的随机密码,登录进去之后即可更改 root 用户的信息(记住改密码)。

ALTER USER CURRENT_USER() IDENTIFIED WITH caching_sha2_password BY 'password';
FLUSH PRIVILEGES;

如果控制台日志中未输出生成的随机密码,可尝试使用空密码登录。

修改 root 用户 Host

UPDATE mysql.user SET Host = '%' WHERE User = 'root';
FLUSH PRIVILEGES;