对于码农一族来讲,新入手电脑后,工具安装,环境搭建是为必备功课。环境搭很差工具装不全,后续的工做开展那就会有至关多的痛点,也会耗去至关多的时间和精力。近日,博主在安装 Mysql 数据库的过程当中,一番探究,发现平日里最基本的操做,也有不少值得总结的地方,为免于时间的重复性浪费,因而有了如下的内容分享。先来问问你本身,平时安装数据库的时候,都尝试过哪几种方式?博主稍微一探究,发现还真很多,好比 Windows 上能够程序安装也能够解压免安装使用;Linux系统能够用 Yum安装,二进制文件安装,源码编译安装等;更还有一些方式,好比安装虚拟机的时候能够选择 MySQL做为预装软件安装同虚拟机一块儿安装,再好比世界上最好的语言 PHP 中有phpStudy 程序集成包,安装该包以后也就顺带安装上了MySQL服务,等等。经过简单的发散,你会发现,虽然都是以安装同一种工具为目的,可是技术的实现方式却有N多种,因此,骚年们,技术路上永远不要局限在会某种技术,而是要尽量多的寻找替代方案、更优方案,否则出去装逼都没点逼数,这怎么行!由于平时经常使用的就是 Windows 和 Linux 这两种操做系统,因此博主就来总结下在这两种系统下的Mysql的几种常见的安装方式。(下载入口)php
根据上面的连接入口,进入官网下载页面后,找到下图中对应的下载位置 。程序安装版是官网推荐的安装版本,点击 推荐下载区域 连接到安装版下载页,选择对应的安装包,点击下载,在新界面不用登陆或注册,直接点击开始下载便可,下载完安装程序后执行安装程序就行。这种安装方式有点傻瓜式的,是不少初学者最开始接触的安装方式,博主也是第一次学习数据库的时候安装过一次,后面发现有免安装的方式后,就基本再也不使用此种安装方式了,由于这种方式一旦没有安装成功或者要卸载的话还要删注册表之类的比较麻烦,因此我的不是特别喜欢这种方式,这里就再也不演示,看官能够百度下其余网友的分享教程自行尝试——html
这就是比较绿色的版本了,下载流程如上图,与 msi 版相似,无需多言。虽然看起来很简单,但布衣博主在一番折腾后仍是发现,因为版本迭代(MySQL在 5.7.x 后就直接跳跃式的以大版本 8.x.x 的方式发布),MySQL 的不一样版本解压安装是很不同的,因此博主特地下载了三个不一样的大版原本比较: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 '新密码'; 下图为部分操做示例:linux
再来讲说布衣博主的不爽吧。针对网上大多数的教程中一上来就不讲原因的说要安装服务,并且还强调用管理员身份,还要配置什么 my.ini文件等等,人云亦云,千篇一概,但就是不讲那样作的原因,博主真心以为方——这写博客都不动脑子不用走心的吗?而按照本文上面的演示,明明就是开箱即用的操做啊,干吗还要要画蛇添足呢? 为此,博主要在这里根据官网来解释一下不少教程中无理由的操做。算法
① 为何要安装为 Windows 服务且要求管理员身份 ?sql
官方解释中有这样的话:在Windows上,运行MySQL的推荐方法是将其添加为Windows服务,以便在Windows系统启动和中止时自动启动和中止。。。一般,要将MySQL添加到Windows服务,您应该使用具备管理员权限的账户登陆。为避免冲突,建议从命令行执行添加或删除服务操前先关闭已经在运行的MySQL"服务"程序。简单来讲就是为了方便服务开机自启,你能够经过 mysqld -install 将mysql 安装为系统服务。数据库
② 配置文件 my.ini或者my.cnf 是必需要有的吗?windows
官方文档是这样表述的:从MySQL 5.7.18开始,my-default.ini
再也不包含在分发包中或由分发包安装...若是没有配置文件,服务器只会以其默认设置启动。安全
Linux做为文件系统,Linux系统因为衍生版本比较多,不一样版有各自适用的包管理工具(如 rpm,apt 等)和压缩包格式,本文不作大而全的归纳,只选取经常使用的红帽系为例,介绍两种最经常使用的安装方式方式。bash
① 环境说明:CenOS 6.5 + MySQL 8;
② 请确保安装环境干净,若是以前有安装过MySQL或MariaDB,检查是否相应的配置文件存在,如/etc/my.cnf文件或/etc/mysql目录,删除之;
预编译过的二进制文件其实就是对应了Windows上的压缩文件,去下载页面选择 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
① 安装包下载的时候旁边会有一个MD5下载签名,有什么用?
这主要是用来作文件校验的,一般网络传输都有丢包或者包来源不明存在被恶意篡改的状况,拿到二进制包后能够执行 md5sum+包名(其它算法如 sha1 校验相似)命令对 包内容的完整性作校验
② 为何没看到你用配置文件?
本着约定大于配置的原则,没有特地强调个性化配置,若是想要显示的指定配置文件,按照官网文档,MySQL服务器会在启动时会默认去寻找 /etc/my.cnf
或 /etc/mysql/my.cnf 文件(参见文末经常使用配置信息),请在此文件位置建立你的配置信息,也可在启动时经过命令参数指定要加载的配置文件。
环境说明:CentOS 7 + MySQL 8;
这种安装方式应该是最简单的,缺点就是不能自定义安装的目录,并且要求服务器必须能能访问公网或者说内网有搭建专门的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
探究的过程当中遇到各类各样的问题,有的解决了,持续更新到下文,有些尚有疑惑待探究;也诚挚欢迎博友留言提出问题或提供更好的解决方案,互助共享,技术之源!
① 临时密码登陆并重置密码后命令行的方式能够登陆并进行相应操做,可是客户端工具仍是没法链接,为何?
这主要是针对 8.0.x 的版本。由于最新版本将密码的认证插件由以前的 mysql_native_password 改为了 caching-sha2-password,而不少链接工具对新版的兼容每每是滞后的,因此就出现了命令行能登陆数据库可是客户端工具却没法登陆的状况。这种状况 网上有不一样的解决方案,好比升级客户端插件,但最简单通行的作法是使用命令 alter user ‘root’@’localhost’ identified with mysql_native_password by ‘新密码’; 将用户密码的认证插件降级为低版本的 mysql_native_password 模式便可——
② 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