mysql
vim docker-compose.yml
yml
services:
mysql:
image: mysql:8.0.45
container_name: mysql8
restart: unless-stopped
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
volumes:
- ./data:/var/lib/mysql
- ./conf:/etc/mysql/conf.d
- ./init:/docker-entrypoint-initdb.d
command: [
"--default-authentication-plugin=mysql_native_password",
"--character-set-server=utf8mb4",
"--collation-server=utf8mb4_unicode_ci",
"--skip-host-cache",
"--skip-name-resolve"
]
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "-p${MYSQL_ROOT_PASSWORD}"]
interval: 5s
timeout: 3s
retries: 10可选方案
yml
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:vim .env
MYSQL_ROOT_PASSWORD=sql123123mkdir data conf initvim conf/my.cnf
sh
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 避免 DNS 解析带来的性能问题
skip-name-resolve
# 连接数(按需调整)
max_connections=200vim init/001-init.sql
sql
-- 1. 创建数据库
CREATE DATABASE IF NOT EXISTS my_database
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 2. 创建业务用户(关键:明确 host)
CREATE USER IF NOT EXISTS 'qin'@'%' IDENTIFIED BY '123456';
-- 3. 授权(最小权限原则)
GRANT ALL PRIVILEGES ON my_database.* TO 'qin'@'%';
-- 4. root 允许远程(可选,但开发建议开)
ALTER USER 'root'@'%' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}';
FLUSH PRIVILEGES;警告
这里的 '${MYSQL_ROOT_PASSWORD}' 不可用,访问不到变量,所以需要修改为
sql
ALTER USER 'root'@'%' IDENTIFIED BY 'sql123123';权限问题
sh
docker exec -it mysql8 mysql -uroot -psql
-- 1. 创建用户并允许任意IP访问(关键!)
CREATE USER 'qin'@'%' IDENTIFIED BY '你的密码';
-- 2. 给所有库权限
GRANT ALL PRIVILEGES ON *.* TO 'qin'@'%';
-- 3. 刷新权限
FLUSH PRIVILEGES;