对于码农一族来说, 新入手电脑后, 工具安装, 环境搭建是为必备功课. 环境搭不好工具装不全, 后续的工作开展那就会有相当多的痛点, 也会耗去相当多的时间和精力. 近日, 博主在安装 MySQL 数据库的过程中, 一番探究, 发现平日里最基本的操作, 也有很多值得总结的地方, 为免于时间的重复性浪费, 于是有了以下的内容分享. 先来问问你自己, 平时安装数据库的时候, 都尝试过哪几种方式? 博主稍微一探究, 发现还真不少, 比如 Windows 上可以程序安装也可以解压免安装使用; Linux 系统可以用 Yum 安装, 二进制文件安装, 源码编译安装等; 更还有一些方式, 比如安装虚拟机的时候可以选择 MySQL 作为预装软件安装同虚拟机一起安装, 再比如世界上最好的语言 PHP 中有 phpStudy 程序集成包, 安装该包之后也就顺带安装上了 MySQL 服务, 等等. 通过简单的发散, 你会发现, 虽然都是以安装同一种工具为目的, 但是技术的实现方式却有 N 多种, 所以, 骚年们, 技术路上永远不要局限在会某种技术, 而是要尽可能多的寻找替代方案, 更优方案, 不然出去装逼都没点逼数, 这怎么行! 因为平时常用的就是 Windows 和 Linux 这两种操作系统, 所以博主就来总结下在这两种系统下的 MySQL 的几种常见的安装方式.(下载入口 https://dev.mysql.com/downloads/mysql/ )
1 Windows 系统
1.1 程序安装版(msi)
根据上面的链接入口, 进入官网下载页面后, 找到下图中对应的下载位置 . 程序安装版是官网推荐的安装版本, 点击 推荐下载区域 链接到安装版下载页, 选择对应的安装包, 点击下载, 在新界面不用登录或注册, 直接点击开始下载即可, 下载完安装程序后执行安装程序就行. 这种安装方式有点傻瓜式的, 是很多初学者最开始接触的安装方式, 博主也是第一次学习数据库的时候安装过一次, 后面发现有免安装的方式后, 就基本不再使用此种安装方式了, 因为这种方式一旦没有安装成功或者要卸载的话还要删注册表之类的比较麻烦, 所以个人不是特别喜欢这种方式, 这里就不再演示, 看官可以百度下其他网友的分享教程自行尝试 --
1.2 免安装版(zip)
1.2.1 安装说明
这就是比较绿色的版本了, 下载流程如上图, 与 msi 版类似, 无需多言. 虽然看起来很简单, 但布衣博主在一番折腾后还是发现, 由于版本迭代(MySQL 在 5.7.x 后就直接跳跃式的以大版本 8.x.x 的方式发布),MySQL 的不同版本解压安装是很不一样的, 所以博主特意下载了三个不同的大版本来比较:
从三个版本 zip 包的解压目录结构可以看到很大的区别, 其实只有 5.6.x 版本才称得上是真正的绿色版, 解压后运行 bin 目录下的 mysqld.exe , 你就可以从任务管理器中找到 MySQL 的进程了, 也能直接通过客户端工具连接数据库 (默认 root 用户, 密码为空), 而 5.7.x 和 8.0.x 版本并不包含默认配置文件, 也不能直接 mysqld.exe 启动使用. 不过, 没有默认文件也无所谓, 因为 MySQL 服务本就是按照默认参数来运行的, 无法直接运行的真正原因是缺少数据目录 data (如果要自定义默认值文件名也是可以更改的), 这是 MySQL 的数据目录, 没有数据目录 MySQL 服务就无法启动, 执行 mysqld.exe 命令窗只是一闪而过, 服务进程也完全起不来. 这里不是说你新建一个 data 目录就可以, 目录不用你自己建, 只需要以管理员权限运行 cmd 在 bin 目录下执行 初始化数据目录的 命令 mysqld --initialize (会随机生成密码, 命令后跟 --console 就可以看到生成的密码信息) 或 mysqld --initialize-insecure( 免密) 即可自动生成数据目录. 数据目录初始化后再执行 mysqld.exe 即可启动 MySQL 服务了. 尤其说明, mysqld --initialize 生成的随机密码是被标记为已过期的过期密码, 客户端工具是无法用过期命令登录的, 只能用命令行先登录进行密码修改后才能进行额外操作, 修改密码命令为: alter user'root'@'localhost' identified by '新密码'; 下图为部分操作示例:
1.2.2 释疑解惑
再来说说布衣博主的不爽吧. 针对网上大多数的教程中一上来就不讲缘由的说要安装服务, 而且还强调用管理员身份, 还要配置什么 my.INI 文件等等, 人云亦云, 千篇一律, 但就是不讲那样做的缘由, 博主真心觉得方 -- 这写博客都不动脑子不用走心的吗? 而按照本文上面的演示, 明明就是开箱即用的操作啊, 干嘛还要要多此一举呢? 为此, 博主要在这里根据官网来解释一下很多教程中无理由的操作.
1 为什么要安装为 Windows 服务且要求管理员身份 ?
官方解释中有这样的话: 在 Windows 上, 运行 MySQL 的推荐方法是将其添加为 Windows 服务, 以便在 Windows 系统启动和停止时自动启动和停止... 通常, 要将 MySQL 添加到 Windows 服务, 您应该使用具有管理员权限的帐户登录. 为避免冲突, 建议从命令行执行添加或删除服务操前先关闭已经在运行的 MySQL"服务" 程序. 简单来说就是为了方便服务开机自启, 你可以通过 mysqld -install 将 MySQL 安装为系统服务.
2配置文件 my.INI 或者 my.cnf 是必须要有的吗?
官方文档是这样表述的: 从 MySQL 5.7.18 开始, my-default.INI 不再包含在分发包中或由分发包安装... 如果没有配置文件, 服务器只会以其默认设置启动.
2 Linux 系统
Linux 作为文件系统, Linux 系统由于衍生版本比较多, 不同版有各自适用的包管理工具 (如 rpm,apt 等) 和压缩包格式, 本文不做大而全的概括, 只选取常用的红帽系为例, 介绍两种最常用的安装方式方式.
2.1 预编译文件安装
1 环境说明: CenOS 6.5 + MySQL 8;
2 请确保安装环境干净, 如果之前有安装过 MySQL 或 MariaDB, 检查是否相应的配置文件存在, 如 / etc/my.cnf 文件或 / etc/MySQL 目录, 删除之;
预编译过的二进制文件其实就是对应了 Windows 上的压缩文件, 去下载页面 https://dev.mysql.com/downloads/mysql/ 选择 Linux Generic 这个预编译的二进制通用版本下载, 结合官网的安装文档并经博主反复实践, 遂有以下流程说明:
- # 查看自己系统的预编译环境是否匹配要下载的二进制编译文件版本
- rpm -qa glibc
- # 解压二进制文件到 / usr/local 目录(官方推荐的目录), 如果因为系统差异不能解压 xz 格式文件, 请尝试其它方式 如 xz -d xx.tar.xz
- tar -xvf MySQL-8.0.15-Linux-glibc2.12-x86_64.tar.xz
- # 解压后包名很长, 有些教程说改名, 这里推荐软链接的方式, 这样保留了带版本号目录名便于查看和升级
- ln -s MySQL-8.0.15-Linux-glibc2.12-x86_64 MySQL
- # 为了服务器的安全性, 最好为 MySQL 服务新建单独的用户和组, 并设置用户禁止登陆
- groupadd MySQL
- useradd -r -g MySQL -s /bin/false MySQL
- # 创建 MySQL-files 目录, 按照官方说法, 是为了作为 secure_file_priv 系统变量的值, 使得导入和导出操作限制为特定目录
- mkdir MySQL-files
- # 将 MySQL-files 目录的用户权限更改为 MySQL 用户 MySQL 组
- chown MySQL.MySQL MySQL-files
- # 执行初始化操作, 正常情况下你会打印中找到随机生成的一个临时口令用来首次登录
- bin/mysqld -initialize --user=MySQL
--------------- 执行完上诉动作就算安装好了, 以下为可选当也很有必要的操作 ---------------------------------
- # 把启动脚本放到开机启动目录
- cp support-files/MySQL.server /etc/init.d/mysqld
- chkconfig add mysqld
- chkconfig mysqld on
- # 添加环境变量, 这需要修改 /etc/profile(全局)或用户目录下的 .bash_profile 文件
- echo 'export PATH=$PATH:/usr/local/mysql/bin'>>/etc/profile
- source /etc/profile
2.1.1 释疑解惑
1 安装包下载的时候旁边会有一个 MD5 下载签名, 有什么用?
这主要是用来做文件校验的, 通常网络传输都有丢包或者包来源不明存在被恶意篡改的情况, 拿到二进制包后可以执行 md5sum + 包名 (其它算法如 sha1 校验类似) 命令对 包内容的完整性做校验
2 为什么没看到你用配置文件?
本着约定大于配置的原则, 没有特意强调个性化配置, 如果想要显示的指定配置文件, 按照官网文档, MySQL 服务器会在启动时会默认去寻找 / etc/my.cnf 或 / etc/MySQL/my.cnf 文件(参见文末常用配置信息), 请在此文件位置创建你的配置信息, 也可在启动时通过命令参数指定要加载的配置文件.
2.2 Yum 仓库安装
环境说明: CentOS 7 + MySQL 8;
这种安装方式应该是最简单的, 缺点就是不能自定义安装的目录, 而且要求服务器必须能能访问公网或者说内网有搭建专门的 yum 仓库. 本博只以公网为例讲述, 先去下载页 https://dev.mysql.com/downloads/repo/yum/ 根据自己系统位数和内核版本选择 yum 存储库, 复制存储库链接地址, 开始 yum 安装 --
- # 在线下载 MySQL 的 yum 存储库文件到本地
- wget https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm
- # 查看 rpm 文件中的库信息(可选操作)
- rpm -qpl mysql80-community-release-el7-2.noarch.rpm
- # 安装 yum 存储库的 rpm 包
- rpm -ivh mysql80-community-release-el7-2.noarch.rpm
- # yum 安装
- yum -y install MySQL-community-server
- # 首次启动数据库, 会初始化服务
- systemctl start mysqld
- # 设置开机自启动
- systemctl enable mysqld
- # 查看随机生成的密码用来登录
- cat /var/log/mysqld.log
3 绕坑指南(持续更新)
探究的过程中遇到各种各样的问题, 有的解决了, 持续更新到下文, 有些尚有疑惑待探究; 也诚挚欢迎博友留言提出问题或提供更好的解决方案, 互助共享, 技术之源!
1 临时密码登录并重置密码后命令行的方式可以登录并进行相应操作, 但是客户端工具还是无法连接, 为什么?
这主要是针对 8.0.x 的版本. 因为最新版本将密码的认证插件由之前的 mysql_native_password 改成了 caching-sha2-password, 而很多连接工具对新版的兼容往往是滞后的, 所以就出现了命令行能登录数据库但是客户端工具却无法登录的情况. 这种情况 网上有不同的解决方案, 比如升级客户端插件, 但最简单通行的做法是使用命令 alter user'root'@'localhost' identified with mysql_native_password by '新密码'; 将用户密码的认证插件降级为低版本的 mysql_native_password 模式即可 --
2 yum 安装中 wget yum 存储库可能会报证书名不符或权限不足, 无法下载, 按照提示去掉证书校验并用超级管理员或临时授予超管权限即可下载(如下图)
附: 配置文件 (my.INI 或 my.cnf) 信息:
[MySQL] 命令行登录默认设置
- # 设置客户端默认字符集
- default-character-set=utf8
- # 客户端套接字
- socket=/tmp/MySQL.sock
- # 客户端工具连接的默认设置
[client] 客户端登录默认设置
port=3306
[mysqld] 数据库服务默认设置
- # 设置服务端口
- port = 3306
- # 服务端套接字
- socket=/tmp/MySQL.sock
- # 安装基础目录, 根据具体位置填写
- basedir= /usr/local/MySQL
- # 数据库数据目录, 根据具体位置填写
- datadir= /usr/local/MySQL/data
- # 允许最大连接数
- max_connections=20
- # 服务器默认字符集
- character-set-server=utf8
- # 创建新表时将使用的默认存储引擎
- default-storage-engine=INNODB
- # 绑定监听地址 不写或 0.0.0.0(接收所有的 IPv4 请求)或 * (默认值, 接收所有 IPv4 或 IPv6 请求)都表示允许远程访问, 如果想禁止远程访问, 可设置为本机回送地址 127.0.0.1
- bind-address = 0.0.0.0
- # 允许连接失败次数, 防攻击使用, 默认 100
- max_connect_errors=10
- # 跳过权限表加载, 忘记密码且安全性要求不高的情况下使用, 如果要求安全的修改密码, 请采用另外的方式, 参见: https://www.cnblogs.com/ivictor/p/9243259.html
- #skip-grant-tables
来源: https://www.cnblogs.com/chenbenbuyi/p/10447966.html