01 在 CentOS 7 中安装 MySQL
个人主页: 小米里的大麦-CSDN博客所属专栏: MySQL_小米里的大麦的博客-CSDN博客GitHub主页: 小米里的大麦的 GitHub文章目录在 CentOS 7.6 上从零安装并配置 MySQL 详细教程1. 准备工作卸载旧的、不要的 MySQL/MariaDB 环境1. 检查正在运行的 mysqld / mysql / mariadb 进程2. 停止正在运行的服务2. 检查系统安装包1. 查找已安装的相关 RPM 包2. 删除已安装的 MySQL/MariaDB 包3. 处理残留文件3. 获取 MySQL 官方 yum 源1. 确认系统版本2. 下载并安装 MySQL YUM 仓库 RPM 包3. 安装仓库 RPM4. 验证仓库是否添加成功5. 检查是否可列出 MySQL 包4. 正式安装 MySQL 服务1. 安装 MySQL Server2. 验证安装结果5. 启动 MySQL 服务并验证1. 启动服务2. 设置开机自启推荐3. 检查服务状态6. 首次登录 MySQL 并重置 root 密码1. 获取临时密码2. 登录 MySQL3. 修改 root 密码必须操作4. 重新登录使用自己的密码7. 配置优化可选1. 修改配置文件2. port3306 有必要写吗3. default-storage-engineinnodb 有必要吗4. 其他补充项8. RPM VS YUM1. RPM 是什么2. YUM 源是什么3. RPM 与 YUM 源的关系4. 如果只用 RPM不用 YUM 会怎样共勉在 CentOS 7.6 上从零安装并配置 MySQL 详细教程配置之前请先使用 root 账号登录后续命令都是基于 root 权限的1. 工程实践中的常态在公司级、工程级的开发环境里数据库几乎都是部署在 Linux 上。原因很现实稳定性Linux 的内核和生态对长时间运行的服务数据库、Web 服务器更稳。性能Linux 的 I/O 调度、文件系统、网络栈优化比 Windows 更适合高并发和大数据量场景。生态一致性大部分运维工具、监控方案Prometheus、Ansible、Docker/K8s都是围绕 Linux 构建的。服务器环境绝大多数云服务阿里云、华为云、AWS、GCP默认都跑 Linux不会给你装 Windows Server 再跑 MySQL。换句话说“工程实践里数据库跑在 Linux 上” 已经是行业共识。2. 那 Windows 下用 MySQL 就“愚蠢”吗也不能这么绝对。Windows 下用 MySQL 有几个合理的场景个人开发/学习很多初学者直接用 Windows 装 MySQL图形化界面工具丰富上手快。小型应用/测试有些实验性项目或 demo没必要起一台 Linux 服务器。企业遗留环境部分公司内部系统历史包袱大早期就跑在 Windows MySQL 上一时半会没迁移。所以在学习/个人项目阶段Windows 并不是愚蠢而是易用。只是它天然不适合工业级、持续稳定运行的数据库。3. 为什么大公司更青睐 Linux MySQL因为要考虑的远不止“能不能跑”集群部署Linux 下搭建主从复制、MGR 集群、分布式架构更成熟。高可用用 Linux 的 keepalived、pacemaker、systemd 脚本能做自动容灾。容器化/云原生MySQL 在 Docker/Kubernetes 中的镜像都是基于 Linux。Windows 几乎没有原生容器支持。1. 准备工作卸载旧的、不要的 MySQL/MariaDB 环境1. 检查正在运行的 mysqld / mysql / mariadb 进程在安装新版本 MySQL 之前务必确保系统中没有残留的旧版本数据库避免冲突。如果有输出说明有正在运行的 MySQL 或 MariaDB 进程。psajx|grepmysqlpsajx|grepmariadb# 或者psaux|egrepmysqld|mysql|mariadb# 列出相关进程注意看最后一列的命令内容。如果最后一列显示是 grep …这个其实是刚刚执行的 grep 本身。比如14375 14838 14837 14375 pts/0 14837 S 1000 0:00 grep --colorauto mysql不要将这个当作 MySQL 的进程2. 停止正在运行的服务如果上面检查出了有 mysqld / mysql / mariadb 进程的存在才需要执行这一步。执行下面的命令如果输出中存在service not loaded.的字样说明大概率就是 MySQL/MariaDB 服务未安装我们就可以直接进行下一步了。当然也存在及其少见的情况服务名称不同非常罕见不做讨论。systemctl stop mysql systemctl stop mariadb2. 检查系统安装包1. 查找已安装的相关 RPM 包有些人可能会想要备份当前的数据目录和配置可以执行下方命令后续可以从/var/lib/mysql.bak进行恢复。当然我们这里是从 0 安装 MySQL我想要干净、易于管理就不进行备份了备份是可选项个人感觉没有太多必要。sudosystemctl stop mysqld||sudosystemctl stop mariadb||truesudocp-a/var/lib/mysql /var/lib/mysql.bak# 备份数据目录sudocp-a/etc/my.cnf /etc/my.cnf.bak||true# 备份配置文件如存在sudotarczvf /root/mysql_backup_$(date%F).tgz /var/lib/mysql /etc/my.cnf||truerpm-qa|grep-imysql# -i 选项可忽略下同rpm-qa|grep-imariadb2. 删除已安装的 MySQL/MariaDB 包rpm-qa|grep-imysql|xargsyum-yremove# 删除所有 mysql 相关 rpmrpm-qa|grep-imariadb|xargsyum-yremove# 删除 mariadb 相关 rpm# 再次确认rpm-qa|grep-imysql||truerpm-qa|grep-imariadb||true使用xargs可以将查询结果作为参数传递给yum remove实现批量卸载。3. 处理残留文件ls/etc/my.cnf# 配置文件ls/var/lib/mysql/# 数据目录[roothcss-ecs-be68 ~]# which mysql mysqld mysqld_safe # 检查二进制文件残留可选/usr/bin/which: no mysqlin(/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)/usr/bin/which: no mysqldin(/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)/usr/bin/which: no mysqld_safein(/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)# mysql客户端命令mysqld服务器主程序mysqld_safe服务器安全启动脚本# 这些关键二进制文件都不存在于系统的环境变量路径中进一步证明了 MySQL/MariaDB 相关组件已经被彻底卸载没有残留的可执行文件。如有残留建议删除残留文件当然这一步是可选的不清理残留可能会影响后续使用。rm-rf/etc/my.cnfrm-rf/var/lib/mysql/3. 获取 MySQL 官方 yum 源CentOS 默认 YUM 源中不包含 MySQL 常用版本需手动添加官方仓库。1. 确认系统版本cat/etc/redhat-release# 本机输出示例CentOS Linux release 7.6.1810 (Core)我们需要选择 MySQL 5.7 安装包因为大多数公司使用的版本依旧在 5.7 左右所以选择这个另外选择这个版本会方便后续出错问题的排查。但是很可惜我在安装这个版本时出错了倒腾了很久遂放弃。所以我们选用 MySQL 8.0具体是 8.0.43但后面的讲解依旧会参杂部分的 MySQL 5.7 的讲解。MySQL 8.0 和 MySQL 5.7 存在一些差异 基础学习有差异的地方查一下就行了SQL 语句基本上是一样的问题不大。2. 下载并安装 MySQL YUM 仓库 RPM 包在 Windows 中前往 MySQL YUM Repository选择对应版本进行下载。由于网页不是很好筛选在浏览器中右键选择查看网页源代码ctrlu去寻找对应版本的安装包。这里我选择是mysql-community-release-el7.rp通过rz命令将下载好的 RPM 包上传至我们的 Linux。输入命令ls /etc/yum.repos.d/ -l可以查看系统中配置了哪些软件仓库比如[roothcss-ecs-be68 ~]# ls /etc/yum.repos.d/ -ltotal48-rw-r--r--1root root1732Jul72024CentOS-Base.repo -rw-r--r--.1root root1309Nov232018CentOS-CR.repo -rw-r--r--.1root root649Nov232018CentOS-Debuginfo.repo -rw-r--r--.1root root314Nov232018CentOS-fasttrack.repo -rw-r--r--.1root root630Nov232018CentOS-Media.repo -rw-r--r--.1root root1331Nov232018CentOS-Sources.repo -rw-r--r--.1root root5701Nov232018CentOS-Vault.repo -rw-r--r--1root root927Jul72024epel.repo -rw-r--r--1root root1358Sep52021epel.repo.rpmnew -rw-r--r--1root root1457Sep52021epel-testing.repo -rw-r--r--1root root192Jan202016wandisco-git.repo为了方便管理可以整理一下目录结构比如[roothcss-ecs-be68 ~]# tree.└── MySQL └── mysql-community-release-el7.rpm3. 安装仓库 RPMrpm-ivhmysql-community-release-el7.rpm# 注意这里是自己实际的 rpm 包名# 示例[roothcss-ecs-be68 MySQL]# rpm -ivh mysql-community-release-el7.rpmwarning: mysql-community-release-el7.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY Preparing...################################# [100%]Updating / installing...1:mysql80-community-release-el7-3################################# [100%]4. 验证仓库是否添加成功ls/etc/yum.repos.d/-l# 或者ls/etc/yum.repos.d/-l|grepmysql包含下面的字段则代表安装成功mysql-community.repo mysql-community-source.repo前提警告只可远观而不可亵玩焉不要擅自进行修改你可以使用vim /etc/yum.repos.d/mysql-community.repo进行 MySQL 官方软件仓库的查看这里面是纯文本配置内容记录了 MySQL 官方软件仓库的地址、可安装的 MySQL 版本如 5.7、8.0 等、软件包校验信息等。给系统的包管理器yum指路 —— 告诉 yum 从哪里下载官方正版的 MySQL 软件包括服务器、客户端等组件以及如何验证下载的软件是否安全从而实现通过yum install mysql等命令一键安装 / 更新 MySQL。5. 检查是否可列出 MySQL 包yum list|grepmysql首次执行可能较慢需下载元数据耐心等待。若看到mysql-community-server.x86_64等条目说明配置成功。此时可删除下载的.rpm文件非必需rmmysql-community-release-el7.rpm4. 正式安装 MySQL 服务1. 安装 MySQL Serveryuminstall-ymysql-community-server等待安装完成过程中会自动安装依赖包。很不幸我当时在这里出现了报错AI 的说法日志末尾出现GPG 密钥验证失败报错这是导致安装无法继续的核心问题具体报错信息The GPG keys listedfortheMySQL 8.0 Community Serverrepository are already installed but they are not correctforthis package. Check that the correct key URLs are configuredforthis repository. Failing package is: mysql-community-client-8.0.43-1.el7.x86_64 GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql第一次执行yum install时还出现过SSH 连接断开Socket error Event: 32 Error: 10053导致安装过程中途终止重新连接后再次执行安装才暴露了 GPG 密钥不匹配的核心报错。解决办法导入 MySQL 官方的 GPG keyMySQL 8.0.43需要执行rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023如果是 MySQL 5.7或者 8.0 的早期版本 8.0.34才会用旧的rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql导入完 MySQL 官方的 GPG key 后需要再次执行yum install -y mysql-community-server。我在这一次才成功来看看几个关键点Transaction test succeeded 说明依赖检查通过可以正常安装。Running transaction ... Installing ... Verifying ... 依赖包一个个安装并验证通过没有报错。最后输出Complete! 这是 yum 安装成功的标志。2. 验证安装结果ls/etc/my.cnf# 配置文件应已生成whichmysqld# MySQL 服务程序路径whichmysql# MySQL 客户端路径输出示例/etc/my.cnf /usr/sbin/mysqld /usr/bin/mysql5. 启动 MySQL 服务并验证1. 启动服务systemctl start mysqld# 启动服务systemctl status mysqld# 检查服务状态# 启动成功示例[roothcss-ecs-be68 ~]# systemctl start mysqld[roothcss-ecs-be68 ~]# systemctl status mysqld● mysqld.service - MySQL Server Loaded: loaded(/usr/lib/systemd/system/mysqld.service;enabled;vendor preset: disabled)Active: active(running)since Tue2025-08-1620:49:34 CST;5ms ago Docs: man:mysqld(8)http://dev.mysql.com/doc/refman/en/using-systemd.html Process:30782ExecStartPre/usr/bin/mysqld_pre_systemd(codeexited,status0/SUCCESS)Main PID:30852(mysqld)Status:Server is operationalCGroup: /system.slice/mysqld.service └─30852 /usr/sbin/mysqld2. 设置开机自启推荐在上面的运行启动示例中已经显示 MySQL 服务默认配置了开机自启如果你不确定开机自启是否启用可执行systemctlenablemysqld3. 检查服务状态psajx|grepmysqld# 查看守护进程netstat-nltp|grep3306# 查看监听端口默认3306# 或ss-nltp|grep3306# 查看 3306 端口是否已监听正常应看到mysqld进程及0.0.0.0:3306监听状态。MySQL 本质上其实是一种网络服务默认监听 3306 端口可通过防火墙或云平台安全组放行。6. 首次登录 MySQL 并重置 root 密码1. 获取临时密码安装后 MySQL 默认会生成一个随机 root 密码写在日志里greptemporary password/var/log/mysqld.log你会得到类似2025-08-16T12:49:30.049756Z6[Note][MY-010454][Server]A temporary password is generatedforrootlocalhost: Rhszstdgg3#! # 临时密码各不相同复制Rhszstdgg3#!部分作为临时密码。⚠️ 如果日志中没有可能服务未正常启动或未生成请检查/var/log/mysqld.log全文。2. 登录 MySQLmysql-uroot-p输入上面复制的临时密码进行登录。3. 修改 root 密码必须操作登录后立即修改密码否则多数操作会被拒绝ALTERUSERrootlocalhostIDENTIFIEDBYxxxxxxxxxxx;# 你需要把 xxxxxxxxxxx 换成自己实际的密码注意要用 ; 结尾MySQL 5.7 默认有密码强度策略密码至少 8 位包含大小写、数字和特殊字符否则修改会出错4. 重新登录使用自己的密码在 MySQL 里输入exit;# 注意要一直输入直到退出到 Linux 的 shell 中不要丢掉了分号结尾重新登录mysql-uroot-p# 这里再输入自己的密码注意这里不回显。如果能成功进入 MySQL就说明密码修改完成 7. 配置优化可选1. 修改配置文件可以使用vim /etc/my.cnf或者用 VS Code 进行修改我们需要调整字符集为 utf8mb4防止后续中文或 emoji 出现乱码以及一些其他设置下面是完整文件内容可以直接复制替换# For advice on how to change settings please see # http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html [mysqld] # # Remove leading # and set to the amount of RAM for the most important data # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. # innodb_buffer_pool_size 128M # # Remove the leading # to disable binary logging # Binary logging captures changes between backups and is enabled by # default. Its default setting is log_binbinlog # disable_log_bin # # Remove leading # to set options mainly useful for reporting servers. # The server defaults are faster for transactions and fast SELECTs. # Adjust sizes as needed, experiment to find the optimal values. # join_buffer_size 128M # sort_buffer_size 2M # read_rnd_buffer_size 2M # # Remove leading # to revert to previous value for default_authentication_plugin, # this will increase compatibility with older clients. For background, see: # https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin # default-authentication-pluginmysql_native_password # 数据库存储目录 datadir/var/lib/mysql socket/var/lib/mysql/mysql.sock # 错误日志和 PID 文件 log-error/var/log/mysqld.log pid-file/var/run/mysqld/mysqld.pid # 设置默认字符集为 utf8mb4避免中文和 emoji 乱码 character-set-server utf8mb4 collation-server utf8mb4_general_ci # 开启远程访问默认只允许本地连接 bind-address 0.0.0.0说明character-set-server utf8mb4→ 设置服务端默认字符集为 utf8mb4。collation-server utf8mb4_general_ci→ 设置默认的排序规则utf8mb4_general_ci 兼容性好性能也不错。bind-address 0.0.0.0→ 默认 MySQL 只监听 127.0.0.1只能本机访问加上这行才能接受远程连接。systemctl restart mysqld# 保存退出后重启 MySQLsystemctl status mysqld# 再检查服务是否起来2.port3306有必要写吗建议不用额外写保持默认除非有特殊需求。MySQL 默认就是 3306我们可以添加字段port3306也可以不添加。需要改的时候才写如果你要跑多个实例或者公司要求用非默认端口比如 3307、13306这时候才需要在my.cnf明确写portxxx即 3306 可以自定义成其他值/端口。3.default-storage-engineinnodb有必要吗MySQL 8.0 默认存储引擎就是 InnoDB所以写不写效果一样。在 5.1、5.5 那个时代MyISAM 还是默认引擎所以 MySQL 5.7 左右的配置里常常会加这行这里我们就不需要了。4. 其他补充项优化项根据机器内存调整这里我们就跳过依旧使用上面的可覆盖文件内容。innodb_buffer_pool_size 1G内存充足时设大一点max_connections 200并发上限根据业务调慢查询日志调试优化时用slow_query_log 1 slow_query_log_file /var/log/mysql-slow.log long_query_time 28. RPM VS YUM1. RPM 是什么RPMRedHat Package Manager一个软件的安装包。就像一个压缩文件里面装着可执行程序比如/usr/sbin/mysqld配置文件比如/etc/my.cnf安装说明依赖、版本号、校验信息我们可以直接用rpm -ivh xxx.rpm安装就像手工解压复制到系统目录。特点只装这个包本身不会自动去找依赖比如你装 MySQL缺少 libaio它不会帮你装。2. YUM 源是什么YUMYellowdog Updater, Modified一个包管理工具。它的任务是根据命令yum install mysql-community-server自动去找相应的 RPM 包如果缺少依赖会自动从仓库里拉依赖包自动校验包的签名保证安全还负责卸载、升级等操作。YUM 源repo 文件就是给 YUM 指路的「仓库地址清单」告诉它仓库的网址http/https 地址里面有哪些 RPM 包比如 mysql-community-server、mysql-community-client用哪个 GPG key 校验特点一条命令自动装好依赖比手工rpm安全省心。3. RPM 与 YUM 源的关系RPM 包→ 一个个软件快递盒子。YUM 源→ 快递仓库的导航地图。我们做的事rpm -ivh mysql-community-release-el7.rpm→ 装了一个「导航地图」repo 文件让 yum 知道 MySQL 仓库在哪里。yum install mysql-community-server→ yum 拿着地图去官方仓库把 MySQL 的 RPM 和依赖都搬到系统里装上。4. 如果只用 RPM不用 YUM 会怎样得自己一个个下载 RPMserver、client、libs、common、依赖库…可能缺一个依赖包就报错得再去手动找过程麻烦还容易遗漏。而用 YUM只要源配置好yuminstall-ymysql-community-server它会自动把server client libs common 依赖库都装好。MySQL 安装『适用于 CentOS 7』 | CSDNMySQL安装和 MySQL 基础 | CSDN共勉
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2517351.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!