通用MySQL 8数据库安装教程
一、准备下载地址
1. 访问MySQL官方网站
- 方式一:通过使用搜索引擎搜索关键字“mysql”
- 方式二:在地址栏中键入https://www.mysql.com
2. 找到正确版本的MySQL服务器社区版下载地址
3. 将准备好的下载地址保存好以备下面使用
https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.31-linux-glibc2.17-aarch64.tar.gz
二、下载安装包
1. 在需要安装MySQL服务器的计算机上下载安装包
我需要给一台Linux机器安装数据库,所以我这里使用ssh登录Linux服务器,然后使用wget命令或curl命令下载安装包。Windows、Mac等其它平台请采取适当的方式把安装包下载到本地,如使用命令行下载、浏览器下载都可以,这里不另做其它平台的示范。
2. 执行安装包下载操作
- 方式一(使用wget命令下载):
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.31-linux-glibc2.17-aarch64.tar.gz
- 方式二(使用curl命令下载):自行研究,一般为
curl -O http://your-download-link.com/file.tar.gz
- 方式三(离线机器):若需安装数据库的Linux机器为内网环境无法访问互联网,可先下载至个人电脑,然后使用scp命令(如:
scp D:\mysql.tar.gz root@192.168.0.115:/root/
)上传至Linux机器
三、安装数据库
注意:如果您之前使用Linux平台如Yum、APT之类的包管理系统安装过MySQL,则使用通用二进制包安装时可能会遇到问题。确保您之前安装的MySQL已通过包管理系统完全删除,并且如数据文件等任何其他文件也都已经删除。您还应该检查并删除MySQL的配置文件,如/etc/my.cnf文件或/etc/mysql目录。
1. 解压安装包到待安装位置
我这里将MySQL安装在
/usr/local/
目录下,该目录也是MySQL官方推荐的安装位置,如果您需要安装至不同的位置,请替换命令中的路径。Linux平台可使用如下的tar
命令将安装包解压到指定目录,其它平台请用适合的方式将包解压到安装位置。
- 方式一:
tar -xvf mysql-8.0.31-linux-glibc2.17-aarch64.tar.gz -C /usr/local/
MySQL通用二进制包各目录解释说明
目录 | 目录或内容 |
bin | mysqld服务器、客户端和实用程序 |
docs | Info格式的MySQL手册 |
man | 仅类Unix平台有该目录,该目录为Unix手册 |
include | 被包含的头文件 |
lib | 库 |
share | 安装数据库的错误信息、字典和SQL |
support-files | 杂项支持文件 |
2. 检查MySQL所需的环境(Windows平台跳过该步骤)
MySQL依赖
libaio
库,请确保该库已被安装。Oracle Linux 8和Red Hat 8 (EL8)这些平台默认没有安装/lib64/.5
,请根据以下说明执行安装。MySQL官方文档未提到需安装libnuma1
和libncurses5
库,但我实际安装ARM架构的MySQL时发现由于缺少这两个库报错了,如需安装请按照以下说明执行安装。
- 安装libaio(基于Yum的系统):
yum install libaio
- 安装libaio(基于APT的系统):
apt-get install libaio1
- 安装.5(基于Yum的系统):
yum install ncurses-compat-libs
- 安装.5(基于APT的系统):
略
- 安装libnuma1(基于Yum的系统):
略
- 安装libnuma1(基于APT的系统):
apt-get install libnuma1
- 安装libncurses5(基于Yum的系统):
略
- 安装libncurses5(基于APT的系统):
apt-get install libncurses5
3. 为MySQL准备所需的用户、用户组和目录(Windows平台跳过该步骤)
为MySQL创建一个用于运行
mysqld
进程的专用“用户”和“用户组”(如已创建请跳过),和创建mysql-files目录。
# 创建一个名为“mysql”的用户组
groupadd mysql
# 创建一个名为“mysql”的不可用于shell登录的用户
# mysql只使用该用户执行进程,因此该用户不需要shell登录。
useradd -r -g mysql -s /bin/false mysql
# 创建mysql符号链接:可简单理解成为原目录创建了别名,访问/usr/local/mysql/就等同于访问原目录
ln -s /usr/local/mysql-8.0.31-linux-glibc2.17-aarch64/ /usr/local/mysql
# 切换到mysql目录
cd /usr/local/mysql/
# 在mysql目录下创建一个名为“mysql-files”的目录
# 该目录用于数据导入和导出操作,具体配置见secure_file_priv变量说明。MySQL官方不建议该变量为空,并表示这将会是一个不安全的设置。如果设置为目录名称,则服务器将导入和导出操作限制为仅使用该目录中的文件。该目录必须存在;服务器不会创建它。
mkdir mysql-files
# 将mysql-files目录拥有者改为“mysql”用户组下的“mysql”用户
chown mysql:mysql mysql-files
# 为mysql-files目录设置适当的目录权限
chmod 750 mysql-files
3. 初始化数据目录
a) Linux平台
# 进入MySQL目录
cd /usr/local/mysql-8.0.31-linux-glibc2.17-aarch64
# 执行初始化:过程中会为root用户生成一个随机密码并打印至控制台
bin/mysqld --initialize --user=mysql
# 创建证书和密钥文件(若该步失败请检查上面mysql符号链接是否创建成功)
bin/mysql_ssl_rsa_setup
# 方式一:启动MySQL服务器(前台启动占用当前终端且ssh登录断开会中断运行)
bin/mysqld_safe --user=mysql &
# 方式二:启动MySQL服务器(后台启动不会占用当前终端,建议首次启动选方式一,可以控制台直观的看到启动有没有报错)
nohup bin/mysqld_safe --user=mysql &
b) Windows平台
# 进入MySQL目录
cd "D:\Program Files\mysql-8.0.28-winx64"
# 执行初始化:过程中会为root用户生成一个随机密码并打印至控制台
bin\mysqld.exe --initialize --console
# 启动MySQL服务器(或鼠标双击mysqld.exe)
bin\mysqld.exe
四、首次登录MySQL服务器配置
1. 登录MySQL数据库
a) 使用mysql命令行客户端登录数据库
- Linux平台:
/usr/local/mysql/bin/mysql -uroot -p
- Windows平台:
"D:\Program Files\mysql-8.0.28-winx64\bin\mysql.exe -uroot -p"
注意:如果执行上述命令后报错“
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
”,请检查MySQL服务器(即mysqld进程)是否真的启动成功了,如执行“ps -ef | grep mysql
”命令查看进程是否存在。执行完上述命令后程序会等待您输入密码,首次登录应输入数据目录初始化时随机生成并打印至控制台的密码。
提示:登录成功后看到控制台打印出类似下面的信息则表示登录成功了
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.31
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> _
b) 使用任何您喜欢的其它MySQL客户端登录数据库
首次登录推荐使用第一种方式
2. 更新root用户密码
登录成功后MySQL强制我们做的第一件事是更新root用户的密码,因为这时除更新密码外无论我们敲什么命令都会收到必须更新密码的报错信息:
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
# 这里我将密码更新为123456,请根据实际情况为您的root用户设置一个足够安全的密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.01 sec)
# 更新完密码后退出数据库登录
mysql> exit
Bye
3. 允许其它机器登录
默认情况下MySQL 8为我们创建了一个
'root'@'localhost'
用户,它表示来自于localhost的root用户。刚刚我们之所以可以用root用户成功登录到数据库是因为客户端和服务端为同一台机器,即我们登录时的身份为'root'@'localhost'
。如果我们用另一台IP为192.168.0.102的同内网机器登录数据库就会发现无法成功登录,因为那时我们的登录身份为'root'@'192.168.0.102'
,它和'root'@'localhost'
是两个不同的用户,所以要想成功登录我们需要创建'root'@'192.168.0.102'
用户。如果我们想让所有IP都可登录该数据库(包括公网),则可以用“%”表示任意IP,即我们只需要创建一个'root'@'%'
用户即可。下面作为简单演示我们将创建一个'root'@'%'
用户并赋予适当的权限。
# 登录到数据库
/usr/local/mysql/bin/mysql -uroot -p
# 创建用户
mysql> CREATE USER 'root'@'%' IDENTIFIED BY '000000';
Query OK, 0 rows affected (0.01 sec)
# 若发现创建错了,可以删除用户重建
DROP USER 'root'@'%';
Query OK, 0 rows affected (0.00 sec)
现在使用另一个机器登录数据库服务器,已能够成功登录。由于未分配权限,这里登录成功后并不能看到名为“mysql”的库。若此步未能成功登录,请检查防火墙(若有)、云平台安全组(若有)等配置,比如检查是否放行了3306端口,由于不属于MySQL安装部分,故本篇不做介绍。
# 登录到数据库
/usr/local/mysql/bin/mysql -uroot -p
# 分配权限(请根据实际情况分配适当的权限)
mysql> GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'root'@'%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.01 sec)
# 刷新权限(上述使用“GRANT”分配权限无需刷新,若您直接操作SQL修改了授权表,则需要执行该命令告诉服务器重新加载权限表)
FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
再次使用另一个机器登录数据库服务器,此时已经能够看到“mysql”库。