写在前面:大家好K。首先为你点进这篇有趣的文章点赞👍!文章在撰写过程中难免有疏漏和错误,欢迎你在下方留言指出文章的不足之处;如果觉得这篇文章对你有用,也欢迎你点赞和留下你的评论。更多内容请点进👉我的博客K。👈阅览。
现在网路上对安装MySQL这件事的教程文章或千篇一律,或软件版本老旧。MySQL到目前为止最新版为8,本文根据官方文档安装指南为主线,详细说明mysql8的安装过程。
本文操作环境:centos7、阿里云服务器、使用rpm包安装、社区版MySQL
1. 下载哪个安装文件
下载地址:MySQL官网
本文示例用系统为centos7的云服务器。
- 系统选择红帽系,centos的版本号与Redhat版本号一致,所以选择x86架构64位(云服务器非ARM架构)的系统版本。
- 点击第一个下载,这是一个组合包(Bundle),里面包含了所有它下面的组件。我们是从零开始安装,所以选择此文件下载。
-
点击下载按钮,会跳转到一个页面,中间有两个硕大的登录和注册按钮。不要管它俩,右击下面蓝绿色小字(
No thanks, just start my download.
),复制下载地址。 -
连接服务器,自己切换到你想保存这些rpm包的目录(示例用/root/目录)。使用wget命令下载。
# 不要复制这个代码
# 使用你自己复制的下载地址下载
wget https://dev.mysql.com/get/Downloads/MySQL-X.0/mysql-X.X.X-X.XXX.XXXXXX.rpm-bundle.tar
wget
是从互联网上下载文件到当前目录。
- 下载好后得到以
mysql
开头,后缀为.tar
的文件,使用tar -xvf
解包。
# 先在当前目录创建mysql(示例)文件夹
mkdir ./mysql
# 再解包
tar -xvf mysql-X.X.X-X.XXX.XXXXXX.rpm-bundle.tar -C ./mysql/
tar
命令是与文件打包解包有关的程序。-x
选项表示现在要解包,-v
选项表示显示所有过程,-f
选项表示指定文件为XXX.tar,-C
表示切换到某目录后再解包(示例用当前目录中的mysql
文件夹)
2. 这些rpm包的作用
MySQL Community Edition的RPM软件包(本表摘抄自官方安装指南)
各包名 | 摘要 |
---|---|
mysql-community-client | MySQL客户端应用程序和工具 |
mysql-community-common | 服务器和客户端库的通用文件 |
mysql-community-devel | MySQL数据库客户端应用程序的开发头文件和库 |
mysql-community-embedded-compat | MySQL服务器作为嵌入式库,与使用库版本18的应用程序兼容 |
mysql-community-libs | MySQL数据库客户端应用程序的共享库 |
mysql-community-libs-compat | 以前的MySQL安装的共享兼容性库 |
mysql-community-server | 数据库服务器和相关工具 |
mysql-community-server-debug | 调试服务器和插件二进制文件 |
mysql-community-test | MySQL服务器的测试套件 |
mysql-community | RPM源代码看起来类似于mysql-community-8.0.22-1.el7.src.rpm,具体取决于所选的OS |
我们只安装两个部分的5个rpm包(已加粗),1. client、server和他们公用的东西common;2. 库文件libs和老版本的库文件libs-compat。
使用yum安装,yum会处理包之间的依赖关系,如果用rpm -qpl
的话,可能会存在隐含的依赖关系,导致安装不成功。
sudo yum install mysql-community-{server,client,common,libs}-*
yum在当前文件夹有rmp包时,会安装本地的rpm包而不是联网下载安装。使用通配符,使5个文件一起安装(libs-*
同时指代了两个库文件,他们都是以libs-开头)。
不推荐单个单个安装,这5个文件之间也有依赖关系,使用通配符一起安装会省很多事。
并且在安装过程中,会自动删除掉系统中本来有的mariadb的东西
至此MySQL已经安装成功,初次使用请接着看下文。
3. 安装到哪儿了
MySQL安装布局(本表摘抄自官方安装指南)
各包名 | 摘要 |
---|---|
客户端程序和脚本 | /usr/bin |
mysqld服务器 | /usr/sbin |
配置文件 | /etc/my.cnf |
数据目录 | /var/lib/mysql |
错误日志文件 | /var/log/mysqld.log |
secure_file_priv值 | /var/lib/mysql-files |
System V初始化脚本 | /etc/init.d/mysqld |
系统服务 | mysqld |
PID文件 | /var/run/mysql/mysqld.pid |
套接字文件 | /var/lib/mysql/mysql.sock |
Keyring目录 | /var/lib/mysql-keyring |
man手册 | /usr/share/man |
包含(头)文件 | /usr/include/mysql |
库文件 | /usr/lib/mysql |
其他支持文件(例如,错误消息和字符集文件) | /usr/share/mysql |
下节用到的初始密码放在错误日志文件/var/log/mysqld.log
中。
4. 第一次使用
- 启动服务
systemctl start mysqld
centos7(含)以上版本,使用systemctl
管理系统服务,这里是开启mysqld服务。
- 查看初始密码
从MySQL5.7开始,MySQL会在第一次安装后为管理员提供初始密码。
grep 'temporary password' /var/log/mysqld.log
# 或者
cat /var/log/mysqld.log | grep 'temporary password'
该初试密码放在/var/log/mysqld.log
中,利用grep
工具查找'temporary password'
所在的行。
默认密码仅供第一次登录MySQL使用,登陆成功后必须马上更改密码,否则不能进行其他任何操作。
- 登录系统,更改密码
mysql -uroot -p
之后将提示输入密码(输入密码时无任何字符回显),进入数据库管理系统后,更改密码。若不立即更改密码,执行其他操作时会提示You must reset your password using ALTER USER statement before executing this statement.
。
ALTER USER 'root'@'localhost' IDENTIFIED BY '_A-Za-z0-9';
用户名为root
,主机名为localhost
,必须这样写!若只写个root
,默认含义为'root'@'%'
,会提示错误。
为了保证密码有一定复杂度,新密码必须包含大小写字母、数字和其他符号。否则会提示Your password does not satisfy the current policy requirements
至此安装过程全部完成
5. 其他:密码安全等级
若此MySQL只是自用练习,希望密码改得更简单一点,请看下文。
MySQL的密码验证有三个级别(全局参数validate_password.policy的值)
级别 | 判断项目 |
---|---|
0 或 LOW | 长度 |
1 或 MEDIUM | 长度、数字、大小写、特殊字符 |
2 或 STRONG | 长度、数字、大小写、特殊字符、字典文件 |
现在默认是MEDIUM
级别。
MySQL中查看validate_password插件是否安装(MySQL5.7(含)以上以默认安装),在MySQL中输入:
SHOW VARIABLES LIKE 'validate_password%';
若未安装,则输出为空。否则,得到下表:
Variable_name | Value |
---|---|
validate_password.check_user_name(检查用户名) | ON |
validate_password.dictionary_file(字典文件) | |
validate_password.length(长度) | 8 |
validate_password.mixed_case_count(大小写混写) | 1 |
validate_password.number_count(数字数) | 1 |
validate_password.policy(密码等级) | MEDIUM |
validate_password.special_char_count(特殊字符数) | 1 |
可以看到各个参数,此时validate_password.policy值为MEDIUM,若想修改为LOW,则输入:
set global validate_password.policy=0;
(MySQL8以下版本把.
换成_
)
这样就只判断密码长度了,默认为8个字符长度(参数validate_password.length的值),同时可以发现,此时大小写混写数(.mixed_case_count
)、数字数(.number_count
)、特殊字符数(.special_char_count
)都为1。
事实上,表格里的这几个值都可以通过set global XXX.XXX=X
来修改。
修改了.number_count
,.special_char_count
,.mixed_case_count
中任何一个值,validate_password.length
都将进行动态修改。