如何在 Linux 服务器上安装并配置 MySQL5.7 服务

下载 MySQL 服务端软件

MySQL 软件分为服务端与客户端两个部分,本专栏中的 MySQL Server 部署在 Debian 服务器中,Client 使用的是 Windows 平台的 IDE:DataGrip

我们首先去 官网 (downloads.mysql.com) 选择合适的 MySQL 安装包,根据自己服务器的体系结构选择合适的 5.7 版本进行下载:

选择 mysql 版本

以本人为例,我的服务器 CPU 架构是 x86_64,所以这里选择 mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz。复制其下载链接,在终端执行以下命令:

1
2
wget #{url}
# 例如:wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz

下载完成后,校验文件完整性,执行以下命令:

1
2
md5sum -b #{MySQL 软件包文件名}
# 例如:md5sum -b mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz

得到文件的 MD5 后,与官网给出的 MD5 对比,如果一致就进行下一步,否则删除下载的内容,重试直到 MD5 一致。

安装 MySQL 服务端软件

下载完成后,创建 MySQL 服务的安装目录以及数据的存放目录,并创建 MySQL 专用的用户和组:

1
2
3
mkdir -p /usr/local/mysql/data
groupadd mysql
useradd -r -g mysql mysql

然后,将下载的 MySQL 服务端软件解压到刚刚创建的目录:

1
2
tar xzvf mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz -C /usr/local/mysql --strip-components 1
# --strip-components 1 表示去掉压缩包的第一级根目录

最后,设置 MySQL 软件的用户与组:

1
chown -R mysql:mysql /usr/local/mysql

初始化数据库文件

进入 MySQL 安装目录,利用 mysqld 工具初始化数据库:

1
2
cd /usr/local/mysql/bin
./mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --initialize
  • --user=mysql:指定 MySQL Server 所属用户
  • --basedir:指定 MySQL 软件根目录
  • --datadir:指定 MySQL 数据目录
  • --initialize:执行数据库初始化流程
可能的异常
  1. error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
    • 解决办法:apt install libaio1 -y
  2. error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory
    • 解决办法:apt install libnuma1 -y

注意apt 为 Debian 系发行版下的特有的包管理工具,如果您使用的是 CentOS 等发行版,请查询对应的命令。

安装完成后,终端会有如下打印:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
2021-10-30T09:42:08.622353Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-10-30T09:42:08.622719Z 0 [ERROR] Can't find error-message file '/usr/local/mysql/share/errmsg.sys'. Check error-message file location and 'lc-messages-dir' configuration directive.
2021-10-30T09:42:10.168163Z 0 [Warning] InnoDB: New log files created, LSN=45790
2021-10-30T09:42:10.365452Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2021-10-30T09:42:10.479418Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
2021-10-30T09:42:10.489199Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2021-10-30T09:42:12.109523Z 0 [Warning] 
2021-10-30T09:42:12.109587Z 0 [Warning] 
2021-10-30T09:42:12.117694Z 0 [Warning] CA certificate ca.pem is self signed.
2021-10-30T09:42:13.015521Z 1 [Note] A temporary password is generated for root@localhost: !Y!j=<i31xwh

我们重点关注最后一行:root@localhost: !Y!j=<i31xwh,这是 MySQL 初始化后,默认创建的一个只允许本地访问的管理员账户。

配置 MySQL 服务端

首先在 /etc 目录下创建 my.cnf 用户配置文件:

1
vim /etc/my.cnf

输入以下内容:

1
2
3
4
[mysqld]
port=33333
bind-address=0.0.0.0
lower-case-table-names=1
  • bind-address:绑定所有地址,以支持远程访问;
  • port:由于站长的服务部署在公网,所以这里修改了默认端口号,否则很容易被黑客攻击;
  • lower-case-table-names:上文在执行 mysqld --initialize 初始化命令时,将其默认值设置成了 1,但对 MySQL Server 来说,其默认值却是 0,所以这里必须在 my.cnf 中显式地将其置为 1,否则会由于不统一造成启动失败。

然后将 MySQL 自带的支持文件 mysql.server 复制到 init.d 下,用于配置自启动:

1
2
3
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
systemctl daemon-reload

最后,启动 MySQL 并设置开机自启:

1
2
service mysqld start
systemctl enable mysqld.service

至此,MySQL 服务端的配置就完成了。

创建支持远程访问的普通用户

首先通过 localhost 连接 MySQL Server:

1
2
/usr/local/mysql/bin/mysql -uroot -p
Enter password: # 按照提示输入上边初始化时打印的密码。
可能的异常

Mysql Client 运行时依赖字符终端处理库 libncurses,执行上述命令时可能会提示该动态库缺失:error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory

  • 解决办法:apt install libncurses5 -y

连接成功后,首先要修改 root 账户的默认密码,否则会提示无法继续操作:

1
ALTER USER USER() identified by 'Xjskdjhf87_hjsdkh'; --密码换成自己的强密码

最后,新建一个用于远程访问的普通用户,并授权:

1
2
3
4
5
6
-- 新建用户 mysql_test_user
CREATE USER 'mysql_test_user'@'%' IDENTIFIED BY 'ASFH89f73h24r23hs_ksdf';
-- 授权
GRANT ALL ON *.* TO 'mysql_test_user'@'%' WITH GRANT OPTION; 
-- 更新
flush privileges;
  • 注意:将以上用户名 mysql_test_user 替换成自己的登录用户名,同时将密码 ASFH89f73h24r23hs_ksdf 替换成自己的强密码。

至此,MySQL 的服务端就装配完毕了。

通过 DataGrip 连接数据库

datagrip
  • Host:MySQL 服务器 IP 地址;
  • Port:上文自定义的 MySQL 服务端口号;
  • User:上文设置的新用户的用户名;
  • Password:上文设置的新用户的密码。

连接好后,就可以在 DataGrip 的 console 输入命令了。

0%