资讯动态

AI课程必备:Ubuntu 24.04+MySQL 8+utf8mb4环境搭建指南

发布时间:2026/10/9 18:40:49 来源:尧图企业网站定制
人工智能课程进入数据库模块之后不少同学第一反应是跳过环境搭建直接学增删改查。这个想法其实很危险——SQL写得好不好很大程度上取决于底层数据库环境稳不稳。我这门课统一采用 Ubuntu 24.04.3 LTS 作为开发机MySQL 8 作为实践环境并且在初始化阶段就直接把字符集锁死在 utf8mb4。这篇文章就把安装和配置全过程完整记录下来从零开始在一台干净的 Ubuntu 24.04.3 LTS 上装好 MySQL 8顺便把 utf8mb4 字符集一次配到位保证后续做 AI 应用的数据存储、中文语义检索、模型训练样本管理时不会被编码问题卡脖子。适合人工智能专业学生、刚转行做数据工程的开发者以及所有需要在 Linux 环境搭数据库的人参考。1. 环境与版本选型为什么是 Ubuntu 24.04.3 LTS MySQL 8 utf8mb41.1 操作系统层面的选择逻辑Ubuntu 24.04.3 LTS 是 2024 年发布的一个长期支持版本点更新。对 AI 课程来说选 LTS 版本最大的价值在于稳定和软件源完整——生产环境跑 AI 推理服务大多也是 Ubuntu Server LTS课程里保持一致以后你进公司时会发现这套操作直接能复用。24.04.3 的内核、驱动、安全补丁都是持续维护的不需要像非 LTS 那样每隔几个月就跨版本升级这对教学环境来说非常关键。另一个现实原因apt 源里默认就有 MySQL 8.0.x不需要从 Oracle 官网下载 .deb 包手动安装也不涉及乱七八糟的依赖冲突。装过 CentOS 的人应该深有体会yum 源里 MySQL 的版本经常滞后还得先配 MySQL 官方 yum 仓库才能装新版。Ubuntu 这一点真的省心一个 apt install 就能搞定。1.2 为什么用 MySQL 8 而不是 5.7MySQL 5.7 在 2023 年 10 月已经停止官方维护不再有安全更新。Ubuntu 24.04 的软件源默认提供的就是 MySQL 8.0.x你直接 apt 安装就能获得长期维护的版本这个优势是决定性的。从功能层面看MySQL 8 相比 5.7 有几个值得 AI 课程关注的提升。比如它默认支持 utf8mb4_0900_ai_ci 排序规则这个后面会详细说。再比如窗口函数、公共表表达式CTE在 8.0 里都是完整可用的做数据分析类的 SQL 练习时非常顺手。还有一个容易忽略的点——JSON 类型的功能增强。AI 项目里经常要把模型推理结果、用户行为日志存进数据库JSON 字段能省掉不少建表时的麻烦。课程后面做数据清洗和特征表构建MySQL 8 这一堆新特性是真的能派上用场。1.3 utf8mb4中文和表情符号的底线配置很多人在 Windows 上用 MySQL 默认配置用了很久从来没琢磨过字符集的问题直到某天往表里插入一条带 emoji 的评论突然报错。这个报错就是典型的 utf8 字符集容量不够导致的。MySQL 里的 utf8 实际上指的是 utf8mb3最多只能存 3 字节的 Unicode 字符。英文、数字、绝大多数中文都在这个范围内但 emoji 表情、部分生僻字是 4 字节编码用 utf8 存就直接报 Incorrect string value。把字符集改成 utf8mb4 之后整个 Unicode 字符集都能装下。现代 AI 应用的数据来源包括社交评论、用户反馈、日志文本、聊天记录里面 emoji 出现的频率远超想象。如果建库的时候用的是 utf8将来要么改库改表要么做数据清洗纯属给自己找事。课程里我会会直接让所有人在初始化阶段就把默认字符集设成 utf8mb4从源头上规避脏数据。2. 安装前准备更新系统、检查残留、确认网络2.1 第一步永远是更新系统安装任何软件之前先把系统索引和软件包更新到最新状态这不是走形式。新装的系统仓库索引可能很旧直接 apt install mysql-server 可能会拉到旧版本或者因为依赖关系不满足而失败。sudo apt update sudo apt upgrade -yapt update 只刷新软件包索引不会升级软件apt upgrade 才会真正升级系统里已安装的包。第一次升级可能需要几分钟取决于网络状况。升级完成之后最好看一眼系统版本lsb_release -a输出里应该能看到 Ubuntu 24.04.3 LTS 或者相近的版本号。确认无误再继续。2.2 检查是否有残留的 MySQL 相关包如果是全新安装这一步可以跳过。但如果你的机器之前装过 MySQL、MariaDB 或者其他数据库服务最好先查一遍。dpkg -l | grep -E mysql|mariadb有输出说明系统里存在残留的数据库相关文件。直接装新版 MySQL 大概率会撞端口或者起冲突。我遇到过学生机器上残留 MariaDBMySQL 装完之后怎么都启动不了最后发现是配置文件里的 socket 路径被 MariaDB 占用了。清理方法其实很简单sudo apt purge mysql-server mysql-client mysql-common mariadb-server mariadb-client -y sudo apt autoremove -y如果没有输出说明系统环境干净可以继续。另外建议顺手看一下 3306 端口是否空闲sudo ss -tlnp | grep 3306有输出说明端口被占用。这时候要先找到占用进程再决定是停掉它还是直接清理不要稀里糊涂装下去。2.3 软件源配置国内机器的加速方案这一步是可选的但如果你在国内的网络环境下做实验建议把 apt 源换成国内镜像源否则下载 MySQL 和依赖包的时候会非常痛苦几个 MB 的包能等半天。Ubuntu 24.04 的源配置文件是 /etc/apt/sources.list.d/ubuntu.sources格式和 22.04 不太一样。比较方便的做法是直接注释掉原来的源换成镜像站提供的地址。这里以清华 TUNA 源为例替换之后记得再执行一遍 sudo apt update。换源这个操作本身没什么难度但要注意别把源配置文件改坏了。改之前先把原文件备份一下比如 cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak出问题还能恢复。提示如果网络状况良好完全可以直接用官方源。换源只影响下载速度不影响任何功能。3. 安装 MySQL 8从命令到安全初始化全流程3.1 安装 mysql-server 包环境准备好了执行安装命令。Ubuntu 24.04 的 apt 源里 MySQL 8 的包名是 mysql-server一条命令装完所有组件sudo apt install mysql-server -y安装过程中如果没有弹窗什么都不用操作等它跑完。安装完成后系统会通过 systemd 自动把 MySQL 服务启动起来。检查一下服务状态sudo systemctl status mysql正常情况下应该显示 active (running)。如果显示 inactive 或者 failed先别急着排查看下一个步骤——很多时候只是服务没被启动手动启动一下就行。3.2 启动服务并设置开机自启哪怕安装完服务已经自动运行了保险起见还是手动确认一遍sudo systemctl enable mysql sudo systemctl start mysql sudo systemctl status mysqlenable 是设置开机自启start 是立即启动。这两个命令分开执行不要合并。用 systemctl 管理服务的好处是动词好记start、stop、restart、status 一套下来就知道当前服务处于什么状态。3.3 安全初始化配置 mysql_secure_installationMySQL 装完不能直接用因为默认状态下 root 用户的认证方式、匿名账户、测试数据库都是开放的安全风险很高。Ubuntu 自带的 mysql_secure_installation 脚本就是用来做这些收尾工作的。sudo mysql_secure_installation执行之后会进入交互式配置每一步的推荐选择我直接列出来密码强度验证插件输入 y 启用。如果不想让数据库强制要求复杂密码也可以选 n但课程环境我建议启用养成好习惯。设置 root 密码选择一个强度足够的密码。MySQL 8 的默认密码策略要求至少 8 位包含大小写字母和数字。删除匿名用户输入 y。匿名账户是安全隐患必须删。禁止 root 远程登录输入 y。这一步很多人犹豫其实课程实验在本地连接就够了root 远程登录的权限留到后面章节讲用户权限管理时再放开。删除测试数据库输入 y。test 数据库留着没什么用。重新加载权限表输入 y。让前面的配置立即生效。全部跑完MySQL 的安全配置就基本到位了。这里有一个容易踩的坑要注意Ubuntu 上默认的 root 用户认证方式不是密码认证而是 auth_socket 认证这意味着你只能用 sudo mysql 进入数据库用 mysql -u root -p 反而会登录失败。这个问题的解决方案在下一章里展开。3.4 验证安装是否成功安全初始化完成后用最直接的方式验证一下数据库能不能进去sudo mysql -e SELECT VERSION();能正常输出版本号比如 8.0.x说明 MySQL 已经装好并运行正常了。这一步做完安装流程本身已经全部结束但到这里其实才算走了一半——字符集配置才是今天这篇文章的重头戏。4. 登录认证与基本权限解决 sudo mysql 的依赖问题4.1 Ubuntu 下 MySQL root 用户的特殊认证方式前面提到了一个关键细节Ubuntu 安装的 MySQLroot 用户默认走 auth_socket 认证不是密码认证。所以你会发现一个非常有趣的现象——你明明设置了 root 密码但 mysql -u root -p 输入密码却登录不进去而直接执行 sudo mysql 就能进入。这个设计是 Debian/Ubuntu 系的一个安全特性只有操作系统的 root 用户或者 sudo 组用户才能通过 socket 认证方式登录数据库的 root 账户。好处是系统层和数据库层绑定得很紧密坏处是如果你在写 Python、Java 程序想用 root 用户连接数据库会被这个机制卡住。课程实验也建议新建一个普通用户来操作数据库不要总用 root。具体做法看 4.2 节。4.2 创建课程专用的普通用户先通过 sudo mysql 进入数据库然后创建用户、授权退出后用新用户重新连接CREATE USER ai_lablocalhost IDENTIFIED BY YourStrongPassword123; GRANT ALL PRIVILEGES ON *.* TO ai_lablocalhost; FLUSH PRIVILEGES;第一句创建用户第二句授予全部权限第三句刷新权限表。用 localhost 限制只允许本机连接安全且够用。如果后面课程需要远程连接再单独开放权限现在先把本地搞通。然后退出 root用新用户测试mysql -u ai_lab -p输入刚才设置的密码能进入 mysql 提示符就说明用户创建成功。这一步对后续所有开发工作都很重要——你用 Python 连接数据库时连接串里的用户名就应该是 ai_lab而不是 root。5. 字符集核心配置把 utf8mb4 落实到每一个环节5.1 查看默认字符集先知道自己站在哪里配置字符集之前先看当前系统的默认字符集到底是什么。进入 mysql 命令行后执行SHOW VARIABLES LIKE character_set%; SHOW VARIABLES LIKE collation%;新装的 MySQL 8.0 在 Ubuntu 上默认字符集通常已经有一部分是 utf8mb4 了但完整看下来你会发现某些变量还是 latin1 或者 utf8mb3。这种情况如果不处理后续创建数据库、表的时候很容易踩坑。比较关键的几个变量是变量名含义建议值character_set_server服务器默认字符集utf8mb4character_set_database数据库默认字符集utf8mb4character_set_client客户端发送 SQL 的字符集utf8mb4character_set_connection客户端连接后的字符集utf8mb4collation_server服务器默认排序规则utf8mb4_0900_ai_ci5.2 修改配置文件一次性锁死全局默认值MySQL 在 Ubuntu 上的主配置文件是 /etc/mysql/my.cnf但它会 include 大量子配置。实践中最稳妥的做法是单独建一个配置文件不要动原有的文件出问题还能快速排错。sudo vim /etc/mysql/mysql.conf.d/utf8mb4.cnf在文件里写入以下内容[mysqld] character-set-server utf8mb4 collation-server utf8mb4_0900_ai_ci [client] default-character-set utf8mb4 [mysql] default-character-set utf8mb4三个段落分别对应服务器端、客户端程序、mysql 命令行工具。mysqld 部分设置服务器默认字符集和排序规则client 部分让所有客户端连接时自动使用 utf8mb4 通信mysql 部分确保命令行交互时不会出现乱码。5.3 重启服务并验证配置生效sudo systemctl restart mysql重启之后再次进入 mysql 执行 SHOW VARIABLES LIKE character_set%现在应该能看到所有关键变量都变成 utf8mb4 了。注意 character_set_filesystem 保持 binary 是正常的不用管它。这一步做完服务器默认值已经对了但不代表万事大吉。还需要验证一下老的数据库、表是否还是旧的字符集以及建库时有没有被之前的默认值影响。5.4 库表级别的兜底防止历史遗留问题服务器默认字符集改好了但如果之前已经用默认设置创建过数据库那些数据库还是旧的字符集。MySQL 只对新建对象生效默认值已经存在的库表不会被自动改造。用一个命令查一下所有库的字符集SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA;如果发现有库还是 utf8mb3 或者 latin1可以用下面这个命令把整个库的默认字符集改掉ALTER DATABASE database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;注意这只是改了数据库的默认值库里的表还是维持原样。改表要逐个执行或者写个存储过程批量处理这个属于字符集迁移的范畴课程里不必搞这么复杂新建库表时确保默认值正确就够了。5.5 连接层的字符集谁连接谁负责数据库服务器字符集正确只是第一层客户端和服务器之间的连接同样涉及字符集。平时写代码连接 MySQL 时连接参数里也要显式声明字符集。Python 用 pymysql 时import pymysql conn pymysql.connect( hostlocalhost, userai_lab, passwordYourStrongPassword123, databaseai_course, charsetutf8mb4 )Java 用 JDBC 时jdbc:mysql://localhost:3306/ai_course?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneUTCJDBC 里的 characterEncodingutf8 对应的是 utf8mb4不要被名字误导。MySQL Connector/J 8.0 里写成 characterEncodingutf8 时会自动映射成 utf8mb4。5.6 用实测数据说话插入中文和 emoji配置完之后做个实测直接在数据库中建一个测试表并插入几条数据CREATE DATABASE ai_test CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci; USE ai_test; CREATE TABLE t_charset ( id INT AUTO_INCREMENT PRIMARY KEY, content VARCHAR(200) ); INSERT INTO t_charset (content) VALUES (人工智能课程); INSERT INTO t_charset (content) VALUES (数据库模块 GPT-4o); SELECT * FROM t_charset;如果两条记录都能正常插入并能读出来说明服务器、数据库、表、连接四个层面全部打通了。插入报错的概率其实已经不大了因为新建库时锁死了 CHARACTER SET但这一步能确认没有遗漏。6. 常见问题与排查技巧实录6.1 安装后服务无法启动症状是 systemctl status mysql 显示 failed 或者 inactive (dead)。最常见的两个原因一个是系统里之前有残留的数据库进程占用端口或文件另一个是配置文件写坏了。排查顺序是先看日志 sudo cat /var/log/mysql/error.log重点找 error 级别的内容。日志里会有具体报错信息比如 Cant create/write to file 或者 Address already in use。如果是端口占用找到占用进程并停掉如果是数据目录权限问题chown -R mysql:mysql /var/lib/mysql 之后重启服务。6.2 mysql -u root -p 登录不进No such file or directory前面说过Ubuntu 上 root 默认用 auth_socket 认证直接输入密码是登不进去的。如果确实需要 root 密码认证可以手动改认证方式ALTER USER rootlocalhost IDENTIFIED WITH caching_sha2_password BY YourNewPassword; FLUSH PRIVILEGES;caching_sha2_password 是 MySQL 8 默认的密码认证插件比 mysql_native_password 更安全。改完之后就可以用 mysql -u root -p 加密码登录了。但课程里还是建议用 sudo mysql 进 root平时操作用普通用户最省心。6.3 配置了 utf8mb4 但插入 emoji 仍然报错这种情况十有八九是连接层的字符集没有对上。服务器默认值正确、数据库和表也是 utf8mb4但客户端到服务器之间走的还是旧字符集。比如 Python 连接时没有指定 charsetutf8mb4JDBC 连接串里没有 characterEncodingutf8都会导致插入 4 字节内容时报错。排查思路很简单一条 SQL 看当前连接的字符集SELECT character_set_client, character_set_connection;如果显示的不是 utf8mb4就按连接层的设置重新配。这个问题在生产环境里最隐蔽很多人改了半天配置文件结果问题出在应用代码里。6.4 磁盘空间不足导致安装失败Ubuntu 24.04 默认分区如果给得不够大MySQL 安装到中途会报 No space left on device。MySQL 的数据目录挺占空间的加上二进制日志轻松吃掉几个 GB。排查方法df -h看看 / 挂载点剩余空间。空间不足时优先清理 apt 缓存 sudo apt clean以及 /var/log 下的旧日志。另外 MySQL 8 默认开启 binlog如果实验机器磁盘捉急可以在配置文件里关掉[mysqld] disable-log-bin 1这个操作只适合开发环境生产环境千万别关。6.5 MySQL 8 和 Redis、Nginx 等服务的端口联动如果本机同时装了 Redis、Nginx它们各自用各自的端口一般不冲突。但如果之前残留了旧的 MySQL、MariaDB 实例占用了 3306新装 MySQL 起来之后就是起不来。可以临时让 MySQL 监听其他端口测试或者彻底卸载残留实例。安装之前检查 3306 这一步真的不亏花费十秒钟省去半小时排障。6.6 常用维护命令速查这部分是给学生整理的小抄课堂和实验都会多次用到操作命令启动 MySQLsudo systemctl start mysql停止 MySQLsudo systemctl stop mysql重启 MySQLsudo systemctl restart mysql查看状态sudo systemctl status mysql开机自启sudo systemctl enable mysql查看错误日志sudo tail -f /var/log/mysql/error.log备份单个数据库mysqldump -u ai_lab -p ai_course backup.sql恢复数据库mysql -u ai_lab -p ai_course backup.sql7. 这套环境在 AI 课程中的应用扩展环境搭好只是开始。作为人工智能课程的数据库模块这个 MySQL 8 utf8mb4 环境承载着好几个后续章节的操作。简单梳理一下这套环境可以用来做什么帮助你理解现在花时间配置它的价值。第一个场景是 NLP 语料管理。课程中做中文文本分类或者情感分析时原始语料通常会从数据库读取。语料里大量中文、偶尔出现 emojiutf8mb4 表象上保证了语料的完整性实际上保证了训练数据不会因为编码问题丢掉字符影响模型输入的质量。第二个场景是特征存储与查询。AI 模型训练时产出的特征、推理结果、评估指标都可以存到 MySQL 里做后续分析。MySQL 8 的 JSON 字段类型可以把模型输出结果直接结构化存储窗口函数可以帮助做时间序列分析这一块在课程后期会重点练习。第三个场景是日志数据管理。爬虫采集的数据、API 请求日志存到 MySQL 里方便做统计分析。utf8mb4 确保各种来源的数据都能无损入库配合适当索引就算数据量达到百万级查询也不会慢到不可接受。这种小型数据库方案在课程实验和毕业设计里完全够用。我个人在实际使用中有一个小习惯装完 MySQL 之后顺手写一个简单的 Python 连接脚本测试连通性就几行代码非常推荐你也这么做。这样既能确认当前命令行环境里的字符集配置没问题也能确认正则连接参数对不对省得以后到写连接代码时再回头排错。这个基础打牢了后面做数据库增删改查、ORM 映射这些章节就会顺很多。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑