重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 201|回复: 0
打印 上一主题 下一主题

[安装] oracle linux 9.6 下安装mysql docker

[复制链接]
跳转到指定楼层
楼主
发表于 2025-11-23 20:42:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.前提
   已经安装docker
   docker -v

2.下载MYSQL IMAGE
   如果想下载8.0.31
    docker pull mysql:8.0.31

   如果想下载5.7
    docker pull mysql:5.7

   如果想下载8.4
    docker pull mysql:8.4

   如果想下载最新版本
    docker pull mysql:latest

   确认一下下载的image
   [root@docker-hub ~]# docker image ls
                                                                                                i Info →   U  In Use
IMAGE                ID             DISK USAGE   CONTENT SIZE   EXTRA
hello-world:latest   f7931603f70e       16.2kB         3.96kB    U   
mysql:5.7            4bc6bc963e6d        684MB          138MB        
mysql:8.0.31         3d7ae561cf60        729MB          161MB    U   
mysql:8.4            b306273d4d36       1.07GB          236MB        
mysql:latest         569c4128dfa6       1.27GB          278MB        
[root@docker-hub ~]#

3.运行mysql docker
  3.1 建立响应的目录
   mkdir -p               ~/docker/mysql/{conf,data,log,binlog}
   chown -R 999:999 ~/docker/mysql  # MySQL 容器内默认用户 UID=999
   chmod -R 755       ~/docker/mysql
  3.2 创建配置文件
   vim ~/docker/mysql/conf/my.cnf
   ..
   [mysqld]
# 字符集(避免乱码)
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'

# 连接配置
max_connections = 500          # 最大连接数(根据CPU核数调整:4核→200-500,8核→500-1000)
wait_timeout = 60              # 空闲连接超时(60秒,避免连接泄露)
interactive_timeout = 60
back_log = 100                 # 连接队列长度(应对突发流量)

# 日志配置(排查问题必备)
slow_query_log = ON            # 开启慢查询日志
slow_query_log_file = /var/lib/mysql/slow.log
long_query_time = 1            # 执行>1秒的SQL记录为慢查询
log_queries_not_using_indexes = OFF  # 不记录“未用索引的小查询”(避免日志过大)
log_error = /var/log/mysql/error.log  # 错误日志(排查启动/崩溃问题)

# 8核16g

innodb_buffer_pool_size = 10G  # 内存的60%-70%(16GB→10G)
innodb_buffer_pool_instances = 8  # 8核→8实例
innodb_log_file_size = 1G
innodb_log_buffer_size = 64M   # 日志缓冲(应对写密集)
innodb_flush_log_at_trx_commit = 1
innodb_read_io_threads = 8
innodb_write_io_threads = 8

max_connections = 1000         # 高并发场景调大
open_files_limit = 65535       # 避免文件句柄不足
table_open_cache = 4096        # 表缓存(应对多表查询)

   3.3 DOCKER run 首次启动
    docker run -d \                   # -d 后台启动
  --name mysql-prod \             # --name 容器名字
  -p 3306:3306 \                     # -p 3306 映射端口
  -e MYSQL_ROOT_PASSWORD=sztech_4U \          # 初始root密码
  -e MYSQL_INITDB_SKIP_TZINFO=1 \  # 跳过时区初始化(避免报错)
  -v ~/docker/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf \  # 挂载上面的配置文件
  -v ~/docker/mysql/data:/var/lib/mysql \  # 持久化数据(关键!避免容器删除后数据丢失)
  -v ~/docker/mysql/log:/var/log/mysql \  # 持久化日志(方便本地查看)
  -v ~/docker/mysql/binlog:/var/binlog/mysql \  # 持久化binlog(主从复制/恢复用)
  --cpus=8 \  # 限制使用8核CPU(避免抢占其他服务资源)
  --memory=12G \  # 限制使用16GB内存(留4GB给系统)
  --restart=always \  # 容器崩溃自动重启
  --privileged=true \  # 授予权限(避免挂载目录权限问题)
  mysql:8.0.31  # 镜像版本(建议用8.0,性能和安全性更优)

4.查看容器运行
   docker ps
   [root@docker-hub ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED       STATUS          PORTS                                                    NAMES
253a9fb087fa   mysql:8.0.31   "docker-entrypoint.s…"   2 hours ago   Up 59 minutes   0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp, 33060/tcp   mysql-prod
[root@docker-hub ~]#

5.停止容器
  [root@docker-hub ~]# docker stop mysql-prod

6.重启容器
  [root@docker-hub ~]# docker start mysql-prod

7.登录MYSQL容器
  [root@docker-hub ~]# docker exec -it mysql-prod mysql -uroot -psztech_4U

mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 19
Server version: 8.0.31 MySQL Community Server - GPL

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

8.修改root密码
    mysql> alter user 'root'@'localhost' identified by 'newpass';
    mysql> flush privileges;

    mysql> alter user 'root'@'%' identified by 'newpass';
    mysql> flush privileges;


9.删除容器
    docker rm mysql-prod
    之后,可以把对应的数据文件,配置文件都删除。

10.修改参数配置
    临时修改
    mysql> set global innodb_buffer_pool_size=2147483648;

    mysql> show variables like '%innodb_buffer_pool_size%';
+-------------------------+------------+
| Variable_name           | Value      |
+-------------------------+------------+
| innodb_buffer_pool_size | 2147483648 |
+-------------------------+------------+
1 row in set (0.00 sec)

mysql>
11.永久修改
     找到配置文件
      [root@docker-hub ~]# docker inspect  -f '{{.HostConfig.Binds}}' mysql-prod
[/root/docker/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf /root/docker/mysql/data:/var/lib/mysql /root/docker/mysql/log:/var/log/mysql]
     修改配置文件
      vim  /root/docker/mysql/conf/my.cnf
       ...
       innodb_buffer_pool_size = 2048M
       ...
      之后,重启容器并生效
       docker stop mysql-prod
       docker start mysql-prod









分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2026-4-17 21:19 , Processed in 0.198192 second(s), 20 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表