欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > docker安装mysql8.0详细步骤教程

docker安装mysql8.0详细步骤教程

2025/6/21 13:11:05 来源:https://blog.csdn.net/qq_21223653/article/details/148768515  浏览:    关键词:docker安装mysql8.0详细步骤教程

概述

  在华为欧拉系统上采用Docker部署时,发现高版本Docker对MySQL5.7兼容性不佳(存在内存管理缺陷,即使调整配置参数仍会占用过高内存),故改用MySQL8.0。
  服务器总内存为16GB,考虑到其他运行中的程序,暂为MySQL分配6GB内存,完全能满足中型项目需求。
  Linux系统中MySQL配置文件通常位于/etc/my.cnf或/etc/mysql/my.cnf,若未找到可使用find命令搜索:

find /-name my.conf

安装具体步骤

一、docker安装mysql
1、docker拉取mysql8.0镜像 (前提是你已经安装docker,并配置好docker镜像源)

 docker pull mysql:8.0

2、创建宿主机目录,用于存放mysql的日志、数据、配置文件,docker启动时指定好映射位置;
1)新建数据存放地址:

mkdir /data/mysql/data
chmod 755 /data/mysql/data 

2)新建日志存放地址:

  mkdir /data/mysql/logchmod 755 /data/mysql/log

3)新建配置文件

  mkdir /data/mysql/config/my.cnfchmod 755 /data/myql/config/my.cnf

编辑配置文件内容(mysql5.7与mysql8.0配置文件在个别属性上是不一样的,这个也是在启动过程中,查看docker容器日志看到,不断修正)

[client]
# 端口号
port=3306[mysql]
no-beep
default-character-set=utf8mb4[mysqld]
# 端口号
port=3306
# 数据目录
datadir=/var/lib/mysql
# 新模式或表时将使用的默认字符集
character-set-server=utf8mb4
# 默认存储引擎
default-storage-engine=INNODB
# 将 SQL 模式设置为严格
sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
#  最大连接数
max_connections=500
# 表缓存
table_open_cache=2000
# 表内存
tmp_table_size=16M
# 线程缓存
thread_cache_size=32
# 设置大小写不敏感
lower_case_table_names=1
#临时处理Access denied for user 'root'@'localhost' (using password: YES)
#skip-grant-tables 
performance_schema_max_table_instances=400
table_definition_cache=400
performance_schema = off
skip-host-cache
skip-name-resolve# innodb设置
innodb_flush_log_at_trx_commit = 2           # 平衡安全与性能
innodb_log_buffer_size = 16M                 # 大事务场景可增至32M
innodb_buffer_pool_size = 3G                 # 约内存的60%
innodb_log_file_size = 512M                  # 日志总大小约缓冲池的20%
innodb_log_files_in_group = 2                # 日志文件数量
innodb_thread_concurrency = 0                # 不限制并发
innodb_autoextend_increment = 1024           # 1GB增量,减少扩展次数
innodb_buffer_pool_instances = 8             # 缓冲池≥16G时设为8
innodb_concurrency_tickets = 10000           # 高并发场景增大
innodb_old_blocks_time = 1000                # 保持默认
innodb_open_files = 2000                     # 增加打开文件数
innodb_stats_on_metadata = 0                 # 禁止元数据更新统计
innodb_file_per_table = 1                    # 启用独立表空间
innodb_checksum_algorithm = 0                # 保持默认# Binlog 功能
log_bin=mysql-bin                  # 开启 Binlog
server-id=12312
binlog_format=ROW                  # 使用 ROW 格式保证主从一致性
expire_logs_days=14                # 保留 14 天日志
max_binlog_size=512M               # 单个日志最大 512MB
sync_binlog=1                      # 事务提交即同步磁盘(强一致性)
log_slave_updates=1                # 从库记录 Binlog(支持级联复制)
binlog_ignore_db=information_schema,performance_schema,mysql  # 忽略系统库
gtid_mode=ON                       # 启用 GTID
enforce_gtid_consistency=ON        # 强制 GTID 一致性# 其他设置
back_log=80
flush_time=0
join_buffer_size=512K
max_allowed_packet=128M
max_connect_errors=300
open_files_limit=4096
sort_buffer_size=256K
table_definition_cache=1400
binlog_row_event_max_size=64K
sync_master_info=5000
sync_relay_log=5000
sync_relay_log_info=5000

以上配置文件具体参数解释可以用豆包直接查询理解;
注意一旦配置文件确定好,后续产生的数据库数据,在mysql迁移的时候也要使用同样的配置文件,不然可能会报错;

3、执行docker启动命令,这里直接使用docker命令启动,熟练使用compose的可以直接进行编排;
1)新建docker执行脚本
vim /data/mysql/startMysql.sh
编辑内容:

docker run -d \
--privileged=true \
--name mysql \
--memory=6G \
--memory-swap=8g \
-p 3306:3306 \
--restart=always \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/config/my.cnf:/etc/mysql/my.cnf \
-v /data/mysql/log:/var/log/mysql \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=123 mysql:8.0

注意:密码改为你自己的,如果需要主从库,可以新建docker网络,docker启动时指定网络,使用“–network mysqlnet”;
截止目前,你的宿主机的目录应该是这样的:
在这里插入图片描述
2)启动脚本

  cd /data/mysql./startMysql.sh 

在这里插入图片描述
3)查看mysql容器状态

  docker ps docker logs mysql docker stats mysql

查看容器占用的内存:

  docker stats --no-stream

在这里插入图片描述
符合我们预期;

4、配置mysql远程访问

1)进入容器内部:

   docker exec -it --user=root mysql /bin/bash执行 mysql -uroot -p 

注意:提示输入密码,不用输入,直接enter进入;
在这里插入图片描述

2)mysql8.0 与 mysql5.7 有所不同,mysql5.7使用:

 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123*';FLUSH PRIVILEGES;

mysql8.0需要新建一个用户,然后赋予权限:

-- 创建用户(密码需符合安全策略)
CREATE USER 'remote_user'@'%' IDENTIFIED BY 'SecureP@ssw0rd';
-- 授予所有数据库的所有权限
GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' WITH GRANT OPTION;
-- 刷新权限
FLUSH PRIVILEGES;

所以我们要执行以上三行命令;

3)使用navicat等工具进行连接测试,当前应该是没有问题的;

附:如果想安装mysql5.7版本,可以参考
https://blog.csdn.net/u012263509/article/details/142323103?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-4-142323103-blog-141535096.235

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词