docker部署MySQL
1、创建数据存放目录
mkdir -p /data/docker/mysql/{data,conf}
2、配置MySQL配置文件
cat <<EOF> /data/docker/mysql/conf/my.cnf
[client]
default-character-set=utf8mb4 # 客户端默认字符集 utf8mb4,支持表情符号
[mysql]
default-character-set=utf8mb4 # mysql 命令行默认 utf8mb4
[mysqld]
# ================= 基础字符集 =================
character-set-server=utf8mb4 # 服务端默认字符集 utf8mb4
collation-server=utf8mb4_unicode_ci # 排序规则(常用 utf8mb4_unicode_ci)
skip-character-set-client-handshake # 忽略客户端字符集请求,强制用服务端字符集
# ================= 基础优化 =================
skip-name-resolve # 禁止主机名解析,连接更快(授权必须用IP)
max_connections=300 # 最大连接数,根据业务需要调整
max_allowed_packet=64M # 允许的最大包大小,适合较大 SQL
max_connect_errors=100000 # 防止连接错误导致被拒绝
# ================= InnoDB 引擎优化 =================
default-storage-engine=InnoDB # 默认存储引擎
innodb_buffer_pool_size=1G # 内存 4G 可设置 1G~2G,占总内存 50~70%
innodb_log_file_size=512M # 日志文件大小,适合较大事务
innodb_flush_log_at_trx_commit=1 # 每次提交写入日志,最安全
innodb_file_per_table=1 # 每表单独表空间,方便管理
innodb_flush_method=O_DIRECT # 避免双缓存,性能更好
# ================= 日志 =================
log-bin=mysql-bin # 开启二进制日志(单节点建议保留,方便恢复)
binlog_format=ROW # 推荐 ROW 格式,数据一致性更好
server-id=1 # server-id 必须设置,即使单节点
expire_logs_days=7 # 二进制日志保留天数,按需求调整
# ================= 慢查询日志 =================
slow_query_log = ON # 开启慢查询日志
long_query_time = 2.0 # 超过 2 秒的查询记入慢日志
log_queries_not_using_indexes = ON # 记录未用索引的查询
# ================= MyISAM(如果不用可调小) =================
key_buffer_size=16M # MyISAM 索引缓冲,少用时不必太大
# ================= 安全设置 =================
lower_case_table_names=1 # 表名不区分大小写(Windows 默认 1,Linux 可选)
default-authentication-plugin=mysql_native_password # 加密插件,设置兼容旧版
sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION # 推荐模式,防止隐式错误
EOF
3、创建docker-compose.yml文件
cat <<EOF> /data/docker/mysql/docker-compose.yml
version: '3.8'
services:
mysql:
image: registry.cn-hangzhou.aliyuncs.com/guojie-apps/mysql:8.0.42
restart: always
container_name: MySQL8
security_opt:
- seccomp:unconfined
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: dkfhdNUd1D12c
network_mode: "host"
volumes:
- /data/docker/mysql/data:/var/lib/mysql
- /data/docker/mysql/conf:/etc/mysql/conf.d
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1"]
interval: 30s
timeout: 10s
retries: 5
EOF
4、启动
# 注意以上docker镜像是我使用个人仓库的,需要提前登录,否则拉取不到
docker-compose -f /data/docker/mysql/docker-compose.yml up -d
5、备份和数据恢复
全备:
docker exec MySQL8 sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > full-backup.sql
全部导入:
[root@localhost mysql]# docker exec MySQL8 printenv MYSQL_ROOT_PASSWORD
dkfhdNUd1D12c
[root@localhost mysql]# docker exec -i MySQL8 mysql -uroot -p"dkfhdNUd1D12c" < full-backup.sql
来源链接:https://www.cnblogs.com/luguojie/p/19004537
© 版权声明
本站所有资源来自于网络,仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您(转载者)自己承担!
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
THE END
暂无评论内容