下面使用 MySQL 8.4 官方容器,在空目录中建立本地练习环境。先确认 Docker 和 Compose 已运行,数据保存在命名卷中。
创建 .env,填写自己的本地管理员密码,并把该文件加入 .gitignore:
MYSQL_ROOT_PASSWORD=replace-with-your-local-password保存 compose.yaml:
services: mysql: image: mysql:8.4 environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:?请在.env中设置MYSQL_ROOT_PASSWORD} MYSQL_DATABASE: tutorial_db ports: - "127.0.0.1:3307:3306" volumes: - mysql_data:/var/lib/mysql
volumes: mysql_data:启动与连接
docker compose up -ddocker compose logs --tail=100 mysqldocker compose exec mysql mysql -uroot -p tutorial_db第一次初始化需要时间。出现可接收连接的日志后执行客户端命令,按提示输入 .env 中的密码。在 MySQL 客户端里运行:
SELECT VERSION(), DATABASE();CREATE TABLE IF NOT EXISTS greeting (id INT PRIMARY KEY, text VARCHAR(100) NOT NULL);INSERT INTO greeting VALUES (1, 'hello') ON DUPLICATE KEY UPDATE text = 'hello';SELECT * FROM greeting;执行 exit 退出客户端。容器内连接使用 3306,宿主机映射端口是 3307。通过宿主机程序连接还需创建允许该来源访问的业务账号,并只授予所需库权限;不要以开放 root 远程登录作为通用方案。
修改 .env 不会重设已有数据卷中的账号密码。docker compose down 保留卷,down -v 会删除卷,不能用删除数据来处理普通连接错误。
评论