维护
验证
docker exec -it mariadb mariadb -u root -p # 数据库容器内部验证免密模式
docker-compose.yml command: --skip-grant-tables # 免密模式用户权限调整
docker exec -it mariadb mariadb -u root # 进容器数据库终端 ----------激活----------- FLUSH PRIVILEGES; # 激活权限 ----------查询----------- SELECT User, Host FROM mysql.user WHERE User = 'root'; ----------修改----------- 写入sql执行 FLUSH PRIVILEGES;
256M.cnf
[mysqld]
# ====================================================================
# 1. 核心内存限制与并发控制 (针对 256M 内存定制)
# ====================================================================
innodb_buffer_pool_size = 64M
max_connections = 30
# innodb_buffer_pool_instances = 1 # 缓冲池小,强制单实例,降 CPU 消耗,MariaDB 11 重写了缓冲池逻辑,注释掉
# ====================================================================
# 2. 极致省内存大招 (干掉隐藏刺客)
# ====================================================================
performance_schema = OFF
thread_cache_size = 4
key_buffer_size = 8M # 限制 MyISAM 占用的内存
# 限制内存临时表大小 (防突发大表吃光内存)
tmp_table_size = 16M
max_heap_table_size = 16M
# ====================================================================
# 3. 速度与网络优化
# ====================================================================
skip-name-resolve = 1 # 关闭 DNS 解析,连接速度拉满, 会影响用户权限配置在域名上
innodb_log_buffer_size = 16M # 事务日志缓冲,足够应对中小并发
max_allowed_packet = 16M # 防止单条 SQL 过大
# ====================================================================
# 4. 连接回收与稳定性 (防死锁、防僵尸连接)
# ====================================================================
wait_timeout = 660 # 10 分钟自动清理闲置非交互连接
interactive_timeout = 660 # 10 分钟自动清理闲置交互连接 (如 Navicat)
innodb_lock_wait_timeout = 20 # 遇到死锁 20 秒快速熔断释放
# innodb_file_per_table = 1 # 开启独立表空间,方便碎片回收, MariaDB 11 默认强制开启,注释掉
# ====================================================================
# 5. 安全与字符集
# ====================================================================
symbolic-links = 0
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_cidocker-compose.yml
services:
mariadb:
image: mariadb:lts
container_name: mariadb
restart: unless-stopped
# command: --skip-grant-tables # 跳过权限验证,调试用
#environment:
# - MARIADB_ROOT_PASSWORD=123456
# user: "1000:1000"
#ports: ["0.0.0.0:3306:3306"] # 暴露端口到宿主机
volumes:
- ./data/mariadb:/var/lib/mysql
- ./data/conf.d:/etc/mysql/conf.d
- ./data/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
- /etc/localtime:/etc/localtime:ro
networks:
- ghost_net
deploy:
resources:
limits:
memory: 256M
cpus: 0.5
networks:
ghost_net:
external: truemariadb.stream
# MariaDB TCP 代理(生产增强版)
# limit_conn_zone只能由一个,不能共存
limit_conn_zone $binary_remote_addr zone=addr:10m;
upstream mariadb_backend {
server mariadb:3306 max_fails=3 fail_timeout=30s;
}
server {
listen 3306 so_keepalive=on;
proxy_pass mariadb_backend;
proxy_connect_timeout 5s;
proxy_timeout 3600s;
proxy_buffer_size 16k;
proxy_socket_keepalive on;
limit_conn addr 50;
limit_conn_log_level warn;
}init.sql
-- ./data/init.sql
-- docker exec -it mariadb mariadb -u root -p123456
-- SELECT User, Host FROM mysql.user;
-- 创建数据库
CREATE DATABASE IF NOT EXISTS forgejo_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE IF NOT EXISTS kc_portfolio CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- root用户
CREATE OR REPLACE USER 'root'@'172.%' IDENTIFIED BY '123456';
CREATE OR REPLACE USER 'root'@'192.%' IDENTIFIED BY '123456';
CREATE OR REPLACE USER 'root'@'localhost' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.%' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.%' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
-- ghost用户
CREATE OR REPLACE USER 'ghost'@'172.%' IDENTIFIED BY '123456';
CREATE OR REPLACE USER 'ghost'@'192.%' IDENTIFIED BY '123456';
CREATE OR REPLACE USER 'ghost'@'localhost' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON forgejo_db.* TO 'ghost'@'172.%' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON forgejo_db.* TO 'ghost'@'192.%' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON forgejo_db.* TO 'ghost'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON kc_portfolio.* TO 'ghost'@'172.%' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON kc_portfolio.* TO 'ghost'@'192.%' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON kc_portfolio.* TO 'ghost'@'localhost' WITH GRANT OPTION;
-- 刷新生效
FLUSH PRIVILEGES;