Docker安装MySQL8的方法步骤

本文详细介绍如何使用Docker下载并启动MySQL8镜像,包括创建目录、设置环境变量及修改MySQL配置等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、下载镜像

下载最新版本:docker pull mysql 
下载指定版本:docker pull mysql:verison(8.0.11,8.0,8)

二、启动镜像

创建目录

mkdir -p /mnt/mysql/data /mnt/mysql/logs /mnt/mysql/conf
docker run -p 3308:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

进入镜像 修改

docker exec -it mymysql /bin/sh

登录MySQL

mysql -uroot -p

输入密码

执行SQL

mysql>ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root'; 

参考地址

安装 mysql 8.0后;root用户在客户端连接不上

Docker安装MySQL8的方法步骤

 

<think>我们正在讨论MySQL5.7和MySQL8.0(注意:截至2023年,MySQL的最新版本是8.0,尚未发布8.4版本,因此这里假设用户指的是8.0)之间的差异。以下将重点介绍两者之间的关键区别。###1.**默认SQL模式更严格**MySQL8.0的默认SQL模式比5.7更严格,包括`ONLY_FULL_GROUP_BY`等选项,这可能导致在5.7中能正常运行的GROUPBY查询在8.0中报错[^2]。###2.**数据字典**-**MySQL5.7**:使用MyISAM存储系统表(如mysql数据库中的表)。-**MySQL8.0**:引入事务性数据字典,将元数据存储在InnoDB表中,提高了系统表的可靠性和崩溃恢复能力。###3.**查询缓存移除**MySQL8.0完全移除了查询缓存功能(在5.7.20版本中已标记为废弃)[^1]。这意味着在8.0中,与查询缓存相关的配置(如`query_cache_type`)和状态变量(如`Qcache_free_memory`)不再可用。###4.**窗口函数**MySQL8.0引入了窗口函数(WindowFunctions),支持复杂的分析查询,如:```sqlSELECTdepartment_id,employee_id,salary,RANK()OVER(PARTITIONBYdepartment_idORDERBYsalaryDESC)ASrank_in_deptFROMemployees;```这在MySQL5.7中无法实现。###5.**通用表表达式(CTE)**MySQL8.0支持非递归和递归的通用表表达式(CTE),例如递归查询组织结构:```sqlWITHRECURSIVEcteAS(SELECTid,name,manager_idFROMemployeesWHEREid=1UNIONALLSELECTe.id,e.name,e.manager_idFROMemployeeseJOINcteONe.manager_id=cte.id)SELECT*FROMcte;```MySQL5.7不支持此功能。###6.**JSON增强**MySQL8.0扩展了JSON功能,包括:-新增`JSON_TABLE()`函数,将JSON数据转换为表形式。-增加`JSON_OBJECTAGG()`和`JSON_ARRAYAGG()`聚合函数。-优化JSON内部存储(二进制格式),提升查询性能。###7.**角色管理**MySQL8.0引入了角色(Roles),简化权限管理:```sqlCREATEROLE'developer';GRANTSELECT,INSERT,UPDATEONdb.*TO'developer';GRANT'developer'TO'user1'@'localhost';```在MySQL5.7中,只能直接为用户授权。###8.**InnoDB增强**-**自增序列持久化**:8.0修复了自增主键重启后可能重复使用旧值的问题。-**死锁检测**:默认启用死锁检测(`innodb_deadlock_detect`)。-**并行读取**:支持InnoDB表的并行全表扫描(`innodb_parallel_read_threads`)。###9.**安全改进**-**默认身份认证插件**:从`mysql_native_password`改为`caching_sha2_password`,提高安全性(可能导致旧客户端连接问题)[^2]。-**密码策略**:支持密码重用策略、密码复杂度检查等。###10.**性能优化**-**直方图统计**:8.0支持为列创建直方图统计信息(`ANALYZETABLE...UPDATEHISTOGRAM`),优化查询计划。-**倒序索引**:支持对索引列降序排序(`CREATEINDEXidxONt1(aDESC,bASC);`)。###11.**配置注意事项**-**端口冲突**:如果宿主机已运行MySQL(默认3306端口),Docker容器启动MySQL会因端口冲突失败[^2]。-**数据目录权限**:安装PerconaServer(基于MySQL)时需预先创建并授权目录(如`/var/log/mysql/data/mysql_tmp`)[^3]。---###升级注意事项1.**兼容性测试**:由于SQL模式变更,需测试现有应用在8.0下的运行情况。2.**认证方式**:若客户端不支持`caching_sha2_password`,需降级为`mysql_native_password`或更新驱动。3.**查询缓存**:移除后需通过其他方式(如应用层缓存)优化查询。§§相关问题§§1.如何将MySQL5.7的数据迁移到MySQL8.0?2.MySQL8.0中如何处理不再支持的查询缓存功能?3.MySQL8.0中,如何解决`caching_sha2_password`认证插件导致的客户端连接问题?4.如何利用窗口函数优化复杂报表查询?</think>### MySQL 5.7 与 MySQL 8.0 核心差异对比 > 📌 注意:截至2023年,MySQL官方尚未发布8.4版本。最新稳定版为8.0,本文以8.0作为比较基准。 #### 一、架构与存储引擎 1. **数据字典** - 5.7:使用MyISAM存储系统表 - 8.0:**事务性数据字典**(InnoDB存储),元数据崩溃恢复能力提升[^3] ```sql -- 8.0中数据字典表不可直接访问 SELECT * FROM mysql.tables; -- 将返回错误 ``` 2. **查询缓存** - 5.7.20起标记为废弃 - 8.0:**完全移除**,相关参数(如`query_cache_size`)失效[^1] ```ini # my.cnf 配置警告 [mysqld] query_cache_type = 1 -- 在8.0中无效 ``` #### 二、SQL功能增强 1. **窗口函数(8.0新增)** ```sql SELECT name, department, salary, AVG(salary) OVER (PARTITION BY department) AS dept_avg FROM employees; ``` - 5.7需使用复杂子查询实现同等功能 2. **通用表表达式(CTE)** ```sql -- 递归查询组织结构(8.0支持) WITH RECURSIVE org_tree AS ( SELECT id, name, manager_id FROM employees WHERE id = 1 UNION ALL SELECT e.id, e.name, e.manager_id FROM employees e JOIN org_tree ot ON e.manager_id = ot.id ) SELECT * FROM org_tree; ``` 3. **JSON增强** | 功能 | 5.7支持 | 8.0新增 | |------------------|------------------|------------------------| | JSON路径表达式 | 基础支持 | `$[last]`等扩展语法 | | 聚合函数 | - | `JSON_OBJECTAGG()` | | 合并函数 | - | `JSON_MERGE_PATCH()` | #### 三、安全与账户管理 1. **认证插件** - 5.7默认:`mysql_native_password` - 8.0默认:**`caching_sha2_password`**(更安全但需客户端适配)[^2] ```sql -- 降级兼容方案 ALTER USER 'user'@'host' IDENTIFIED WITH mysql_native_password BY 'password'; ``` 2. **角色管理(8.0新增)** ```sql CREATE ROLE 'developer'; GRANT SELECT, INSERT ON db.* TO 'developer'; GRANT 'developer' TO 'user1'@'localhost'; ``` #### 四、性能优化 1. **索引改进** - **倒序索引**(8.0支持) ```sql CREATE INDEX idx_name ON table (name DESC); ``` - **隐藏索引**(8.0优化器可忽略索引) ```sql CREATE INDEX idx_temp ON table(col) INVISIBLE; ``` 2. **并行查询** - 8.0支持**并行全表扫描**(通过`innodb_parallel_read_threads`配置) #### 五、配置与运维差异 1. **端口冲突处理** ```bash # 检查端口占用(Docker部署前必做)[^2] $ netstat -tuln | grep 3306 $ docker run -p 3307:3306 mysql:8.0 # 修改映射端口 ``` 2. **目录权限要求** ```bash # Percona Server需预创建目录[^3] $ mkdir -p /var/log/mysql/data/mysql_tmp $ chown -R mysql:mysql /var/log/mysql ``` #### 六、废弃与移除功能 | 功能 | 5.7状态 | 8.0状态 | |--------------------|---------------|---------------| | 查询缓存 | 已废弃 | 完全移除 | | `password()`函数 | 可用 | 移除 | | MyISAM系统表 | 使用中 | 迁移到InnoDB | --- ### 升级建议 1. **测试SQL兼容性**:重点验证GROUP BY查询(8.0默认启用`ONLY_FULL_GROUP_BY`) 2. **客户端驱动更新**:确保支持`caching_sha2_password`认证 3. **性能基准测试**:对比查询缓存移除前后的性能影响
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值