# 安装 MySQL 数据库
# 前言
# MySQL 数据库的版本
目前 MySQL 官网为我们提供了两个版本,一个是社区版本,一个是商业版本。
# 社区版本 (MySQL Community Server)
这个版本的数据库与早先的版本一样,还是完全免费的,但是 MySQL 不提供任何的技术支持。
# 商业版本 (MySQL Community Enterprise Edition)
这个版本是收费的,我们也可以免费试用 30 天,官方也会提供相关的技术支持。
注意:以下安装教程统一使用的是 MySQL 的社区版本。
# 在 Windows 系统上安装 MySQL 数据库
# 方式一:通过 ZIP 压缩包安装
# 下载 ZIP 压缩包
打开 MySQL Community Downloads (opens new window) 官网,点击【Product Version】选择需要的版本,这里以【5.7.37】为例,然后找到 64 位,点击 Download。
说明:
mysqld 和 mysqld-debug 的区别:https://dev.mysql.com/doc/refman/5.7/en/windows-select-server.html (opens new window)
# 解压 ZIP 压缩包
下载完成之后,把压缩包解压出来,然后进入解压后的目录。
# 配置环境变量
解压后进入 bin 目录。
右键【此电脑】点击【属性】,左侧找到【高级系统设置】,选择【环境变量】,找到下面的系统变量。
新建一个变量【MYSQL_HOME】,值为安装路径,如:D:\mysql-5.7.37-winx64
编辑变量【Path】,新增【%MYSQL_HOME%\bin】
完成后点击确定,关闭对话框。
# 初始化 MySQL
以【管理员身份运行】打开命令提示符,输入以下命令。
因为涉及到服务的注册,没有管理员权限是无法注册成功的。
# 创建 data 目录并填充 MySQL 系统模式中的表来初始化 MySQL 安装
mysqld --initialize-insecure
# serviceName 服务名为可选项,不输入默认为 MySQL
mysqld --install [serviceName]
# 安装服务成功后启动服务
net start mysql
# 设置 MySQL 密码,不执行则默认密码为空,这里以 123456 为例。
mysqladmin -uroot password 123456
也可以不注册服务,需要用的时候再手动执行命令启动【D:\mysql-5.7.37-winx64\bin\mysqld MySQL】,启动服务也是执行这一条命令,但是注册为服务可以方便 Windows 系统开机自动启动。
# 卸载 MySQL
卸载前可以备份所有数据库到一个 SQL 文件。
mysqldump -uroot -p --all-databases > sqlfile.sql
执行以下命令可以进行数据库文件的导入
# D:\sqlfile.sql 为要导入 SQL 的文件路径
source D:\sqlfile.sql
执行以下命令移除服务
# MySQL 是注册时 MySQL 服务时填写的的服务名称,不填默认为 MySQL
net stop MySQL
mysqld --remove MySQL
参考文献:
# 方式二:通过 MSI 安装包安装
# 安装 5.7/8.0 数据库
备注:这里以 5.7 为例子,8.0 也是一样的。
# 下载 MySQL 数据库安装器
访问 MySQL 官网:https://www.mysql.com/ (opens new window)
然后在上方找到 DOWNLOADS 选项。
向下滚动页面,点击 MySQL Community (GPL) Downloads »
点击 MySQL Installer for Windows,下载 MySQL 针对 Windows 系统发行的安装器
打开页面后默认是最新版本,点击 Archives 下载历史版本。
点击 Product Version 下拉框,可以选择需要下载的版本。
下载对应版本的完整安装包。
# 安装 MySQL 数据库
# 运行 MySQL 安装包
找到刚才下载好的 msi 安装包,双击运行。
如果出现提示是否应用进行更改,选择是。
运行后会准备进入安装环境,耐心等待处理完成。
# 选择安装类型
进入到 MySQL 的安装环境中,就会弹出如下界面。
我们选择默认的开发者模式即可,无需改动,直接点击 “Next” 下一步。
# 依赖环境检查
接下来会进行环境检查,点击 Execute 安装 MySQL 所需要的依赖环境。
然后会弹出依赖安装界面,如果没有自动弹出来下载框,在下面手动点一下。
依赖安装完成后点击 Close 关闭。
安装好依赖之后,点击 Next 下一步。
如果有的产品依赖没有安装,就会出现这个弹窗,但是那些产品不是必须的,不影响使用。
只要保证 MySQL Server 能够安装成功就可以了。
点击 Yes 进入下一步。
# 安装产品
点击 Execute 执行安装。
这里需要较长时间安装,耐心等待安装完成。
看到前面绿色的勾说明安装成功了,接下来点击 Next 进入配置。
这里列出了需要配置的产品,点击 Next 进入下一步。
# 配置 MySQL 参数
这里可以修改端口和配置类型,使用默认配置即可点击 Next。
这里可以看到 MySQL 默认的端口号是 3306,一般情况下使用默认值即可,不需要修改。
如果是安装 MySQL 8.0,这里还会多一个步骤,配置验证的方法。
在 MySQL 8.0 修改了验证加解密的方法,但是要求客户端 connector 使用的版本也要 8.0 以上才行,如果数据库的驱动是 5 的,就选下面那个。
配置 Root 的密码
此处会把 MySQL 作为 Windows 的一个服务,服务的名称为 MySQL57,并且这个 MySQL 的服务会随着系统的启动而自动启动。
点击 Execute,执行刚刚填写的配置信息,稍等几分钟。
配置完成以后,点击 Finish。
# 配置 MySQL 路由
点击 Next,进入下一步,配置其他的产品。
这个东西是 MySQL 的路由,官网的解释是,不需要用到 InnoDB 集群模式的话不需要启用,点击 Finish 即可。
MySQL Installer provides a configuration wizard that can bootstrap an installed instance of MySQL Router 8.0 to direct traffic between MySQL applications and an InnoDB Cluster. When configured, MySQL Router runs as a local Windows service.
点击 Next 进入下一步,配置其他产品。
输入 root 的密码,测试是否可以正常连接 MySQL。
如果出现红色条,说明用户名和密码不匹配。
点击 Execute 应用配置。
点击 Finish 完成配置。
点击 Next 完成配置。
点击 Finish 完成安装。
关闭自动打开的 MySQL Workbench 和 MySQL Shell,能够打开说明安装成功了。
# 配置环境变量
右键 此电脑
,点击属性
。
在左侧找到”高级系统设置“。
点击高级 --> 环境变量。
在下面的系统变量中点击新建,然后变量名为:MYSQL_HOME
。
然后在 C:\Program Files\MySQL
下找到 MySQL Server 5.7
如果安装 MySQL 8.0,则文件夹名为【MySQL Server 8.0】。
右键复制路径。
把安装路径填到变量值中。
选中 Path 变量,编辑。
点击新建,值为 %MYSQL_HOME%\bin
添加完成后点击确定。
左下角输入 cmd
打开命令提示符
输入 mysql -uroot -proot
,连接测试。
看到以下界面说明配置成功了。
参考资料:
# 卸载 5.7/8.0 数据库
这里以 8.0 的数据库为例子,由于从 5.7 开始数据库的安装采用了组件化,因此卸载的时候需要一个个组件的卸载,挺蛋疼的。
好在,MySQL 为我们准备了相应的卸载器。
进入目录【C:\Program Files (x86)\MySQL\MySQL Installer for Windows】,双击运行【MySQLInstaller.exe】。
最后,把 MySQL 的安装器也一起卸载。
卸载完成后,可以到【C:\Program Files\MySQL】文件夹是否还存在,如果存在把这个也删掉,就彻底删干净了。
参考文献:
# 安装 5.5 数据库
# 下载 MySQL 数据库安装器
镜像地址:https://gitlab.com/samho2008/tool/-/raw/main/mysql/5.5/mysql-5.5.62-winx64.msi (opens new window)
安装包下载地址:https://downloads.mysql.com/archives/community/ (opens new window)
Product Version 选择 5.5.62
系统选择 64 位。
# 安装 MySQL 数据库
# 运行 MySQL 安装包
双击运行下载好的安装包。
# 安装数据库
选择 Custom(自定义安装)
各参数说明如下:
Typical(典型安装)
Installs the most common program features. Recommended for most users.
意思是:安装最常用的程序功能。建议大多数用户使用。
Custom(自定义安装)
Allows uers to choose which program features will be installed and where they will be installed. Recommended for advanced users.
意思是:允许用户选择安装的程序功能和安装的位置,建议高级用户使用。
Complete(完全安装)
All program features will be installed. Requires the most disk space.
意思是:将安装所有的程序功能,需要最多的磁盘空间。
可以看到 Documentation 旁边有个【X】的按钮,表示这个组件不会被安装。
带有 图标的都是默认安装到本地硬盘上的。
其他部分详解:
Development Components(开发者部分):
用左键单击向下的小箭头选择【Entire feature will be installed on local hard drive】
意思是:即此部分,以及下属子部分内容全部安装在本地硬盘上。
MySQL Server(MySQL 服务器):照上面的做。
Client Programs(MySQL 客户端程序):照上面的做。
Documentation(文档) :照上面的做。
Server data files(服务器数据文件):照上面的做。
这样操作,以保证安装所有文件。
等待数据库安装完成。
# 配置数据库
接下来,需要进行数据库的配置。
在上一步安装完成后,会自动打开这个界面,如果上一步没有勾选或者关闭了配置界面,可以在【C:\Program Files\MySQL\MySQL Server 5.5\bin\MySQLInstanceConfig.exe】中重新打开。
使用 UTF8 作为默认的数据库编码,不过这里不指定为 UTF8,使用默认的 Latin1 也没关系,创建数据库的时候也可以单独去指定。
这里需要勾选以下,把数据库配置到环境变量中,这样可以在任意目录下执行数据库的相关命令。
root 密码统一设置成 123456,避免忘记。
等待自动配置完成。
# 连接数据库
点击左下角开始菜单,点击【命令提示符】。
输入命令【mysql -uroot -p123456】
看到以下界面说明连接成功了。
# 卸载 MySQL 5.5 数据库
# 停止 MySQL 服务
MySQL 运行的时候是无法删除的,因此需要先停止。
开始菜单中输入【service】,选择【服务】,找到【MySQL】,点击【停止此服务】。
下载 Geek Uninstaller,这个软件删的比较干净,可以把注册表也一起删掉。
卸载完成之后,把软件检测出来的残留痕迹也删除。
参考资料:
# 在 Linux 系统上安装 MySQL 数据库
# 查看 Linux 操作系统版本和系统内核版本
稍后下载安装包的时候需要用到这些信息
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
[root@localhost ~]# uname -r
3.10.0-862.el7.x86_64
# 下载 MySQL 数据库安装包
打开 MySQL 下载网址:https://downloads.mysql.com/archives/community/ (opens new window)
点击下拉框 Product Version:选择你要下载的 MySQL 版本
点击下拉框 Operating System:操作系统类型
点击下拉框 OS Version:操作系统版本
CentOS 也是选择 Red Hat Enterprise Linux,因为 CentOS 是红帽公司的产品。
建议选择下载 RPM Bundle,这个是完整的安装包。
也可以细化下载具体需要的 MySQL 组件,如:MySQL Server、Client Utilities、Development Libraries等
可以先在本机下载下来,然后上传至服务器。
(推荐)如果服务器可以访问外网,也可以直接在服务器上下载,一般来说在服务器下载会比较快。
点击 Download 按钮,右键点击复制链接地址,获取下载地址。
在服务器上执行,下载 MySQL 安装包至 【/usr/local/src】 下
wget -P /usr/local/src https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.36-1.el7.x86_64.rpm-bundle.tar
如果提示:
-bash: wget: 未找到命令
,说明系统是最小化安装的,没有 wget 命令,需要先下载 wget。yum -y install wget
# 解压 MySQL 安装包
把【mysql-5.7.36-1.el7.x86_64.rpm-bundle.tar】换成下载后的安装包名字
cd /usr/local/src
mkdir mysql
tar -xvf mysql-5.7.36-1.el7.x86_64.rpm-bundle.tar -C ./mysql
# 卸载系统自带的安装包(重要,记得卸载)
由于操作系统会自带 MySQL/MariaDB 的安装包,要把自带的先删除掉,否则安装的时候会冲突。
有的系统是自带 MySQL 的安装包,有的是自带 MariaDB 的,最好都看一下。
rpm -qa | grep mariadb
rpm -qa | grep mysql
移除掉系统已安装好的依赖包,根据搜出来的删除,一般是:mariadb-libs-5.5.56-2.el7.x86_64
yum -y remove mariadb-libs
还有另外一种方法,通过 RPM 来卸载。
# 格式:rpm -e --nodeps 要卸载的包名称 rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64
# 检查是否已安装 MySQL 的系统依赖
一键安装 MySQL 依赖:
yum -y install libaio perl net-tools
# libaio
MySQL 依赖 libaio,所以要先安装 libaio,我们通过以下命令查看是否已安装。
rpm -qa | grep libaio
如果没有的话,通过 yum 安装一下。
yum -y install libaio
# perl
MySQL 依赖 perl,所以要先安装 perl,我们通过以下命令查看是否已安装。
rpm -qa | grep perl
如果没有的话,通过 yum 安装一下。
yum -y install perl
# net-tools
MySQL 依赖 net-tools,所以要先安装 net-tools,我们通过以下命令查看是否已安装。
rpm -qa | grep net-tools
如果没有的话,通过 yum 安装一下。
yum -y install net-tools
# 安装 MySQL 组件
使用命令 rpm -ivh xxx
进行安装操作。
- i:install,表示安装
- v:verbose,显示进度条
- h:hash,对安装包进行哈希校验
按照依赖关系依次按顺序安装 rpm 包,依赖关系依次为 common → libs → client → server
cd /usr/local/src/mysql
rpm -ivh mysql-community-common-5.7.36-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.36-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.36-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.36-1.el7.x86_64.rpm
# 安装 libs 组件报错
如果安装 libs 时报错,说明没有卸载系统自带的 mariadb-libs,需要先 卸载系统自带的安装包
[root@localhost mysql]# rpm -ivh mysql-community-libs-5.7.36-1.el7.x86_64.rpm
警告:mysql-community-libs-5.7.36-1.el7.x86_64.rpm: 头V3 DSA/SHA256 Signature, 密钥 ID 5072e1f5: NOKEY
错误:依赖检测失败:
mysql-community-common(x86-64) >= 5.7.9 被 mysql-community-libs-5.7.36-1.el7.x86_64 需要
mariadb-libs 被 mysql-community-libs-5.7.36-1.el7.x86_64 取代
如果卸载后再次安装 libs 时候仍然报错,这是因为之前没有删除自带的安装包,然后直接安装的 common 组件,导致安装的 common 组件是针对于系统自带的版本的,需要再次执行命令进行升级:rpm -ivh mysql-community-common-5.7.36-1.el7.x86_64.rpm
[root@localhost mysql]# rpm -ivh mysql-community-libs-5.7.36-1.el7.x86_64.rpm
警告:mysql-community-libs-5.7.36-1.el7.x86_64.rpm: 头V3 DSA/SHA256 Signature, 密钥 ID 5072e1f5: NOKEY
错误:依赖检测失败:
mysql-community-common(x86-64) >= 5.7.9 被 mysql-community-libs-5.7.36-1.el7.x86_64 需要
# 安装 server 组件报错
这是因为缺少 MySQL 所需要的系统依赖,需要先 [安装 MySQL 的系统依赖](#检查是否已安装 MySQL 的系统依赖)
[root@localhost mysql]# rpm -ivh mysql-community-server-5.7.36-1.el7.x86_64.rpm
警告:mysql-community-server-5.7.36-1.el7.x86_64.rpm: 头V3 DSA/SHA256 Signature, 密钥 ID 5072e1f5: NOKEY
错误:依赖检测失败:
/usr/bin/perl 被 mysql-community-server-5.7.36-1.el7.x86_64 需要
net-tools 被 mysql-community-server-5.7.36-1.el7.x86_64 需要
perl(Getopt::Long) 被 mysql-community-server-5.7.36-1.el7.x86_64 需要
perl(strict) 被 mysql-community-server-5.7.36-1.el7.x86_64 需要
# 登录并创建 MySQL 密码
# 启动 MySQL
安装完后,使用命令 service mysqld start
或 systemctl start mysqld.service
启动 MySQL 服务。(如果 MySQL 服务无法启动,就 reboot 重启下系统)
# 启动 MySQL
systemctl start mysqld
# 设置开机自动启动 MySQL
systemctl enable mysqld
# 查看 MySQL 状态
systemctl status mysqld
# 查看 MySQL 进程
ps -ef | grep mysql | grep -v grep
# 查看 3306 端口
netstat -anop | grep 3306
# 登录 MySQL
由于 MySQL 5.7.4 之前的版本中默认是没有密码的,登录后直接回车就可以进入数据库,进而进行设置密码等操作。其后版本对密码等安全相关操作进行了一些改变,在安装过程中,会在安装日志中生成一个临时密码。
怎么找到这个临时密码呢?
执行以下命令,在日志中搜索临时密码:
grep 'temporary password' /var/log/mysqld.log
执行结果:
[root@localhost mysql]# grep 'temporary password' /var/log/mysqld.log
2022-04-18T18:39:19.402451Z 1 [Note] A temporary password is generated for root@localhost: keji#VI,;95x
说明生成的临时密码是:keji#VI,;95x
使用生成的临时密码登录至数据库,由于生成的临时密码会包含一些特殊符号,需要给密码两边添加上英文半角的单引号 ''
,由于临时密码我们随后会进行修改,所以这里直接在控制台暴露密码也不会有安全问题。
mysql -uroot -p'keji#VI,;95x'
# 修改 root 密码
假设把密码修改为 root,生产环境请勿使用 root 作为密码 !!!
ALTER USER root@localhost IDENTIFIED BY 'root';
在 MySQL 5.6 后,MySQL 内置密码增强机制,低强度密码会报错(也可以直接使用强度更高的密码解决):
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
这个其实与 validate_password_policy 的值有关:
Policy | Tests Performed | 解释 |
---|---|---|
0 or LOW | Length | 密码只有长度的限制 |
1 or MEDIUM | Length; numeric, lowercase/uppercase, and special characters | 密码包括:长度限制、数字、小写字母、大写字母、特殊字符 |
2 or STRONG | Length; numeric, lowercase/uppercase, and special characters; dictionary file | 密码包括:长度限制、数字、小写字母、大写字母、特殊字符,并且这个密码不能在 MySQL 中的弱密码字典中出现。 |
默认是 1,即 MEDIUM,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。
解决方案如下:
更改策略,修改密码强度为弱,只有密码长度限制。
set global validate_password_policy=0;
修改密码的最短长度为 4
set global validate_password_length=4;
不管设置 validate_password_length=1,还是 2、3、4,这个参数的实际值都是4(因为 MySQL 强制规定密码最短为 4 位)。超过 4 后设置是多少实际就是多少。
再次执行修改密码命令(假设把密码修改为 root)
ALTER USER root@localhost IDENTIFIED BY 'root';
# 开启 MySQL 远程访问
这里 identified by 'root' 中的 root 需要替换成你修改后的新的密码
grant all privileges on *.* to 'root'@'%' identified by 'root';
flush privileges;
quit;
MySQL 中可以给一个用户授予如 select,insert,update,delete 等其中的一个或者多个权限,主要使用 grant 命令,用法格式为: grant 权限 on 数据库对象 to 用户 一、grant 普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利。 grant select on testdb.* to common_user@'%' grant insert on testdb.* to common_user@'%' grant update on testdb.* to common_user@'%' grant delete on testdb.* to common_user@'%' 或者,用一条 MySQL 命令来替代: grant select, insert, update, delete on testdb.* to common_user@'%'
查看防火墙是否开启:
systemctl status firewalld
如果看到绿色的小圆点或者
Active: active (running)
,说明防火墙是运行状态,需要先关闭防火墙或者放行 3306 端口。
关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld
或者,单独放行 3306 端口(看到 success 说明执行成功)
firewall-cmd --zone=public --add-port=3306/tcp --permanent
重启防火墙,重启后才可以生效(看到 success 说明执行成功)
firewall-cmd --reload
如果使用的是云服务器(比如:腾讯云,阿里云等)还需要在云防火墙中放行端口才能正常访问!!!
# 使用可视化工具远程连接至数据库进行测试
这里以 Navicat 为例子。
连接名:只用于在 Navicat 中显示用,叫什么都可以。
主机名或 IP 地址:填写你的服务器 IP 地址
端口:默认是 3306
用户名:默认是 root
密码:输入在上面设置的 root 的密码
填写完毕后点击连接测试查看是否能连接上去。
# 关闭 binlog 日志
新版本已经默认关闭 binlog 日志了,保险起见还是检查下。
执行以下 SQL 语句,看到 OFF 说明已经关闭了。
SHOW VARIABLES LIKE 'log_bin';
# 开启 binlog 日志(可选)
主从同步的时候,需要用到 binlog 日志,此时必须开启。
vi /etc/my.cnf
在 [mysqld] 下添加以下内容:
# binlog 文件名,格式为:mysql-bin.00000*,从 1 开始递增
log-bin=mysql-bin
# binlog 日志保留天数
expire-logs-days=7
# binlog 日志有三种格式,分别是 Statement、mixed、ROW
binlog-format=ROW
# 服务器 id,主从同步的时候才使用到,如果需要建议改为 IP 地址的最后一段
# 比如:10.2.52.128,则 server-id 设为 128
server-id=1
日志默认存放在:/var/lib/mysql
重启 MySQL 服务:
systemctl restart mysqld
执行 SQL 语句,查看是否开启成功。出现 ON 说明开启成功:
show variables like 'log_bin';
在 MySQL 中,也可以通过
SELECT VERSION();
的方式查询,如果开启了日志,在版本号后面会有-log
的标识,如:5.7.36-log
如果没有开启,查询出来就是
5.7.36
查询其他参数,如:
生成出来的日志名字前缀(log_bin_basename)
日志索引文件(log_bin_index)
SHOW VARIABLES LIKE '%log_bin%';
# MySQL 文件目录说明
安装完 MySQL 的 server 组件后,会生成几个 MySQL 的文件夹和目录:
在 /etc 下生成 my.cnf 文件和 my.cnf.d 文件夹
ls -l /etc/my.cnf
ls -l /etc/my.cnf.d
在 /var/lib 下生成以下三个文件夹
ls -l /var/lib/mysql
ls -l /var/lib/mysql-files
ls -l /var/lib/mysql-keyring
在 /var/log 下生成 mysqld.log 文件
ls -l /var/log/mysqld.log
在 /var/run 下生成 mysqld 目录
ls -l /var/run/mysqld
# MySQL 默认数据库说明
安装好数据库后,默认会有几个系统自带的库:information_schema、mysql、performance_schema、sys,这些是 MySQL 需要用到的库,不要删除,否则会导致 MySQL 无法正常工作!
# 卸载 MySQL 数据库
有的时候,因为一些特殊原因,我们需要把 MySQL 卸载掉,那么,需要怎么操作呢?
# 查询已安装的 MySQL 包
rpm -qa | grep mysql
# 卸载 MySQL 软件包
yum -y remove mysql*
# 卸载 MySQL 目录
# 查找所有 MySQL 的相关安装目录
find / -name mysql
执行结果:
[root@localhost mysql]# find / -name mysql /etc/selinux/targeted/active/modules/100/mysql /var/lib/mysql /var/lib/mysql/mysql /usr/lib64/mysql /usr/share/mysql /usr/local/src/mysql
# 删除查询出来的目录
rm -rf /etc/selinux/targeted/active/modules/100/mysql
rm -rf /var/lib/mysql
rm -rf /var/lib/mysql/mysql
rm -rf /usr/lib64/mysql
rm -rf /usr/share/mysql
rm -rf /usr/local/src/mysql
# 删除 MySQL 日志
rm -rf /var/log/mysqld.log
# 卸载 MySQL 配置文件
rm -rf /etc/my.cnf
# 删除 MySQL 默认密码
rm -rf /root/.mysql_history
rm -rf /root/mysql_secret
参考资料:
centos7下安装mysql5.7(rpm) (opens new window)
安装MySQL报错 : Your password does not satisfy the current policy requirements (opens new window)