通过二进制文件来安装MySQL

微信搜索『coder-home』,或者扫一扫右侧的二维码,关注『程序猿集锦』。
了解更多干货分享,还有各类视频教程。
扫描它,带走我。

背景

MySQL的安装有很多种方式,基于不同的平台又有不同的安装方式。接下来几篇文章,我们来盘点一些在Linux系统下常用的安装方式。这篇文章我们先来看一下基于已经编译好的二进制文件如何安装MySQL数据库。

安装前注意事项

版本的选择

推荐安装General Availability(GA)版本,也称为生产或者稳定版本。当然,如果想尝试新鲜的功能,可以尝试安装开发版本,这样的版本有新的功能,但是不一定稳定。在我们的生产环境中不要使用这样的版本,要使用稳定版本。

MySQL版本的命名规则,拿5.7.32举例说明。5是大版本,7是中间版本,32是小版本好。其中大版本+总结版本,这两个值可以确定一个稳定发行版本。小版本号主要是用来迭代修复某一个稳定版本的bug,每修复一些bug,重新发布就会把小版本号加一。

卸载已安装的MySQL

如果之前已经安装过MySQL,通过yum或者apt-get的方式安装的,在使用二进制包安装之前,需要把之前安装的MySQL彻底卸载掉。卸载的方式也需要通过yum或者apt-get命令来卸载。卸载完成之后,需要查看/etc/my.cnf/etc/mysql/my.cnf目录下面是否还有MySQL相关的文件或者目录,如果存在的话,删除它们。

如果是通过其他方式安装的,可以把对应的安装目录删除,环境变量删除即可。

配置sudo权限

要使用root用户来安装MySQL,如果你不是使用root用户,那么你使用的用户,起码需要有sudo的权限。如何配置普通的用户具有sudo权限呢?参考下面的步骤。

首先确保你的系统中已经安装了sudo的命令,如果没有安装sudo的命令,则需要使用yum来安装一下sudo命令。安装方式如下:

# 查看是否安装了sudo命令
[root@b9f018d06344 ~]# sudo --help

# 使用yum来安装sudo命令
[root@b9f018d06344 ~]# yum install sudo

# 安装完sudo命令之后,在/etc目录下面会生成sudo相关的配置文件,如下所示
[root@b9f018d06344 ~]# ls -lstr /etc/sudo*
8 -r--r----- 1 root root 4328 May 18  2020 /etc/sudoers
4 -rw-r----- 1 root root 1786 May 18  2020 /etc/sudo.conf
4 -rw-r----- 1 root root 3181 May 18  2020 /etc/sudo-ldap.conf

/etc/sudoers.d:
total 0
[root@b9f018d06344 ~]#

编辑sudo的配置文件/etc/sudoers,在里面增加我们想要使用sudo命令的用户信息。注意,此时编辑的时候需要使用visudo命令而不能直接使用vi命令,因为此时的/etc/sudoers配置文件对任何用户来说都是只读的,包括root用也是只读的,如果你此时强行使用vi命令编辑,在编辑的时候,系统会提示你正在修改一个只读的文件,所以需要使用visudo命令来修改。visudovi没有什么区别,命令的使用规则一样。具体增加的配置内容如下所示:

[root@b9f018d06344 ~]# visudo /etc/sudoers

# 打开文件后,找到如下的这一行
root    ALL=(ALL)       ALL

# 在上面的行下面增加如下四行中的任意一行即可。
# 表示指定的用户可以执行sudo命令,但是在执行的时候,需要输入这个用户的密码后才可以执行。
your_user_name ALL=(ALL)       ALL

# 表示指定的用户组下面所有的用户都可以执行sudo命令,但是在执行的时候,需要输入对应的用户的密码后才可以执行。
%your_group_name ALL=(ALL)			ALL

# 表示指定的用户可以执行sudo命令,并且在执行的时候,不需要输入这个用的密码就可以执行。
your_user_name ALL=(ALL)       NOPASSWD: ALL

# 表示指定的用户组下面所有的用户都可以执行sudo命令,并且在执行的时候,不需要输入对应的用户的密码就可以执行。
%your_group_name ALL=(ALL)       NOPASSWD: ALL

当然,如果你不使用visudo命令,非要使用vi命令也是可以的。你可以使用root用户,先把配置文件/etc/sudoers的权限改为root可以读写,然后再使用vi就可以编辑保存了。修改完成之后,再把这个配置文件的权限给修改回来。这样也是可以的,属于一种曲线救国的方式。但是为了安全、省事、方便起见,推荐使用visudo命令。

基于二进制安装包安装

安装包的下载

登录MySQL的官网,进入下载页面。选择我们的二进制安装包。如下图所示:

地址为:https://dev.mysql.com/downloads/

在这里插入图片描述

地址为:https://dev.mysql.com/downloads/mysql/

地址:https://downloads.mysql.com/archives/community/

可以直接点击Download按钮,下载到本地,然后再上传到服务器上,这里我们选择复制下载地址,到服务器上面使用wget命令来下载安装包(注:服务上面的网络比本地的网络下载得快很多,这是我选择在服务器上下载安装包的原因),如下所示:

wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz

安装包目录说明

下载后解压下载后的安装包,解压后的效果如下:

[root@b9f018d06344 ~]# tar -zxvf mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz -C /usr/local
[root@b9f018d06344 ~]# cd /usr/local/mysql-5.7.32-linux-glibc2.12-x86_64
[root@b9f018d06344 mysql-5.7.32-linux-glibc2.12-x86_64]# ls
LICENSE  README  bin  docs  include  lib  man  share  support-files
[root@b9f018d06344 mysql-5.7.32-linux-glibc2.12-x86_64]# ls -lstr
total 276
  4 -rw-r--r--  1 7161 31415    587 Sep 23 12:00 README
244 -rw-r--r--  1 7161 31415 247914 Sep 23 12:00 LICENSE
  4 drwxr-xr-x  3 root root    4096 Jan 18 11:17 include
  4 drwxr-xr-x  4 root root    4096 Jan 18 11:18 man
  4 drwxr-xr-x  2 root root    4096 Jan 18 11:18 bin
  4 drwxr-xr-x  5 root root    4096 Jan 18 11:18 lib
  4 drwxr-xr-x 28 root root    4096 Jan 18 11:18 share
  4 drwxr-xr-x  2 root root    4096 Jan 18 11:18 support-files
  4 drwxr-xr-x  2 root root    4096 Jan 18 11:18 docs

针对上述解压出来的文件和目录,挑选比较重要的简单说明一下:

  • include:MySQL启动服务使用的包含头文件。
  • man:使用man命令查看MySQL相关命令的手册。
  • bin:MySQL所有的一些命令都在这里面,都是一些可执行的二进制文件。需要把这个目录配置到$PATH环境变量中,便于以后在任何目录都可以直接执行MySQL的各种命令。
  • lib:MySQL启动服务的时候,需要依赖的库文件。
  • share:MySQL的错误消息文件和字符集文件都放在这个文件夹下面,里面还有一些SQL文件,是初始化MySQL数据库的时候使用的。
  • docs:MySQL帮助手册。

解压二进制安装包

把下载好的二进制安装包解压到指定目录下,一般我们解压安装在/usr/local目录下面。

[root@b9f018d06344 ~]# tar -zxvf mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz -C /usr/local

创建软连接,这样当我们执行cd /usr/local/mysql命令的时候,就等于执行了命令cd /usr/local/mysql-5.7.32-linux-glibc2.12-x86_64命令,这可以方便我们平时的操作,又可以保留我们MySQL的安装文件名称中的版本,这是在Linux系统中安装二进制文件的一种常用的方法。

[root@b9f018d06344 ~]# ln -s /usr/local/mysql-5.7.32-linux-glibc2.12-x86_64 /usr/local/mysql

配置系统环境变量

配置环境变量,方便在任何目录下面都可以直接执行MySQL的各种命令。原则就是把/usr/local/mysql/bin目录添加到Linux系统的$PATH变量中。可以在/etc/profile文件最后,增加export PATH=$PATH:/usr/local/mysql/bin这一行代码。具体修改环境变量的方式如下所示:

[root@b9f018d06344 mysql]# vi /etc/profile

# 查看最后一行是否添加成功。
[root@b9f018d06344 mysql]# tail -1 /etc/profile
export PATH=$PATH:/usr/local/mysql/bin

# 使用source命令重新加载一下/etc/profile文件,是当前修改马上生效,否则需要退出操作系统,重新登录才生效。
[root@b9f018d06344 mysql]# source /etc/profile 

创建文件目录

首先说明一下,这一步可以省略不做。因为这个步骤是为了以后执行一些load dataselct ... into outfile命令的时候使用到的文件目录才创建的。如果不用这些命令,则不用创建这个文件夹目录。创建目录和授权的命令如下:

[root@b9f018d06344 mysql]# cd /usr/local/mysql
[root@b9f018d06344 mysql]# mkdir mysql-files
[root@b9f018d06344 mysql]# chown mysql:mysql mysql-files
[root@b9f018d06344 mysql]# chmod 750 mysql-files

之所以有这几步操作的原因是为了以后MySQL执行load dataselect ... into outfile这样的语句时候会使用到这个文件夹目录,这个文件夹需要配合MySQL中的参数secure_file_priv一起使用。如果我们不需要执行load dataselect ... into outfile这样的命令,这个文件目录是可以不创建的。这并不影响我们后面安装初始化MySQL数据库。

创建操作系统用户

使用如下命令在MySQL服务器上创建mysql用户:

[root@b9f018d06344 ~]# groupadd mysql
[root@b9f018d06344 ~]# useradd -r -g mysql -s /bin/false mysql

创建操作系统用户mysql的原因是因为初始化MySQL数据库的时候,会使用mysql这个用户来进行初始化。如果没有这个用户,在初始化MySQL数据库的时候会出现如下错误。从安全性的角度上,创建一个单独的用户mysql,然后给这个用户授予适当的权限,然后将MySQL服务器启动这个用户下面也是比较合理的一种方式。

[root@b9f018d06344 bin]# mysqld --initialize --user=mysql # 初始化MySQL数据库
2021-01-20T04:17:54.981607Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-01-20T04:17:54.985870Z 0 [ERROR] Fatal error: Can't change to run as user 'mysql' ;  Please check that the user exists!

2021-01-20T04:17:54.985947Z 0 [ERROR] Aborting

[root@b9f018d06344 bin]#

初始化MySQL数据库

现在开始执行MySQL数据库的初始化操作,初始化的时候出现的错误:

[root@b9f018d06344 mysql]# bin/mysqld --initialize --user=mysql
bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

错误的原因是:缺少libaio.so库文件,需要安装libaio,使用yum命令安装,如下:

# 查找安装包
[root@b9f018d06344 mysql]# yum search libaio
# 执行安装
[root@b9f018d06344 mysql]# yum install libaio -y

再次尝试初始化MySQL数据库,再次出现如下错误:

[root@b9f018d06344 mysql]# bin/mysqld --initialize --user=mysql
bin/mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory
[root@b9f018d06344 mysql]#

失败的原因,缺少libnuma库文件,使用yum命令来安装对应的库文件。

[root@b9f018d06344 mysql]# yum search libnuma
[root@b9f018d06344 mysql]# yum install numactl-libs.x86_64 -y

再次初始化MySQL数据库,初始化成功,执行过程如下:

Complete!
[root@b9f018d06344 mysql]# bin/mysqld --initialize --user=mysql
2021-01-19T07:42:28.498794Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-01-19T07:42:29.207461Z 0 [Warning] InnoDB: New log files created, LSN=45790
2021-01-19T07:42:29.291581Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2021-01-19T07:42:29.363912Z 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: e1d0a6c5-5a29-11eb-aa62-0242ac110002.
2021-01-19T07:42:29.372530Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2021-01-19T07:42:30.423665Z 0 [Warning] CA certificate ca.pem is self signed.
2021-01-19T07:42:30.487269Z 1 [Note] A temporary password is generated for root@localhost: 4pjsyg8bq_Td
[root@b9f018d06344 mysql]#

可以看到输出的信息中,有生成的root用户的临时密码4pjsyg8bq_Td,在启动MySQL服务之后,使用这个密码,可以登录到MySQL数据库中。这里要将这个密码保存到一个地方,后面第一次登录MySQL数据库的时候会用到。

初始化SSL证书

使用如下命令来初始化MySQL的SSL证书,这个命令的作用是在客户端连接到MySQL服务端的时候,使用SSL加密通讯,提高了MySQL数据库的安全性。但是,在初始化的过程中遇到如下的错误:

[root@b9f018d06344 mysql]# bin/mysql_ssl_rsa_setup
2021-01-19 08:57:03 [ERROR]   Could not find OpenSSL on the system
[root@b9f018d06344 mysql]#

错误原因:缺少OpenSSL库文件。解决方式,使用yum来安装对应的库文件。安装完成后,再次尝试初始化SSL服务,执行成功。

[root@b9f018d06344 mysql]# yum install openssl -y

这里初始化SSL功能的命令,可以根据自己的实际情况来觉得十分启用。启用SSL后,连接通信是加密的,但是这样会导致MySQL的性能有所降低。这个降低的地方主要是建立连接、加密、解密的这些操作。如果是长连接、或使用连接池,性能影响的较少一下。MySQL5.7版本已经默认开启了SSL功能,所以这个步骤可以不执行。

启动MySQL服务

尝试启动MySQL服务器,启动后使用ps命令可以看到有mysqld_safe进程已经在后台启动,此时可以尝试用上面生成的临时密码登录MySQL数据库。

[root@b9f018d06344 mysql]# bin/mysqld_safe --user=mysql &
[1] 532
[root@b9f018d06344 mysql]# Logging to '/usr/local/mysql/data/b9f018d06344.err'.
2021-01-19T09:01:18.978673Z mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data
[root@b9f018d06344 mysql]# ps
  PID TTY          TIME CMD
  423 pts/2    00:00:00 bash
  532 pts/2    00:00:00 mysqld_safe
  642 pts/2    00:00:00 ps

登录MySQL数据库

使用前面生成的root用户的临时密码,尝试登录MySQL数据库又出现如下错误:

[root@b9f018d06344 mysql]# bin/mysql -uroot -p4pjsyg8bq_Td
bin/mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
[root@b9f018d06344 mysql]#

失败原因:缺少库文件libncurses.so.5,解决方式,使用yum安装缺少的包。

[root@b9f018d06344 data]# yum install libncurses.so.5 -y

上述安装命令执行完整之后,再次尝试登录,仍然出现找不到libncurses.so.5的错误提示,索性执行如下语句,把所有关于libncurses的库文件都安装上。

[root@b9f018d06344 data]# yum install libncurses* -y

安装完成后,再次尝试登录MySQL数据库,成功。登录之后,需要先修改root用户的临时密码,然后才可以进行其他操作,否则不能进行任何操作。下面我们把root用户的密码改为root,过程如下所示:

[root@b9f018d06344 mysql]# bin/mysql -uroot -p4pjsyg8bq_Td
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.32

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

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> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
# 修改root用户的密码,使用如下命令
mysql> alter user 'root'@'localhost' identified by 'root';
Query OK, 0 rows affected (0.00 sec)

mysql>

配置systemctl/service命令启动MySQL

经过前面的步骤,我们已经成功安装了MySQL数据库,并且已经登录到MySQL数据库中。为了方便以后的管理,我们配置使用Linux系统服务的管理命令来启动或停止MySQL。把MySQL安装目录下面的mysql.server配置文件复制到/etc/init.d目录下面。

[root@b9f018d06344 mysql]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/
[root@b9f018d06344 mysql]# ls -lstr /etc/init.d/
total 16
 4 -rw-r--r-- 1 root root  1161 Nov 13 23:00 README
12 -rwxr-xr-x 1 root root 10576 Jan 20 07:28 mysql.server
[root@b9f018d06344 mysql]#

此时我们就可以systemctl命令或者service命令来启动或关闭MySQL服务了。systemctl是目前Linux 8版本中的管理系统服务的命令,在以前的版本中是使用service命令来关管理的。

[root@b9f018d06344 mysql]# systemctl start mysqld
[root@b9f018d06344 mysql]# systemctl stop mysqld
[root@b9f018d06344 mysql]# systemctl restart mysqld
[root@b9f018d06344 mysql]# systemctl status mysqld
[root@b9f018d06344 mysql]# service mysqld start
[root@b9f018d06344 mysql]# service mysqld stop
[root@b9f018d06344 mysql]# service mysqld restart
[root@b9f018d06344 mysql]# service mysqld status

总结

使用二进制安装包来安装MySQL数据库,期间需要执行的步骤大概如下:

# 解压安装包到指定目录
tar -zxvf mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz -C /usr/local # 把二进制安装包解压到/usr/local目录下
ln -s /usr/loca/mysql-5.7.32-linux-glibc2.12-x86_64 /usr/local/mysql # 创建软连接,把mysql文件夹连接到解压后的二进制文件夹

# 创建文件目录
cd /usr/local/mysql # 进入到MySQL二进制文件目录
mkdir mysql-files # 创建文件夹,这个文件夹用于导出MySQL数据或导入MySQL数据的时候使用。
chown mysql:mysql mysql-files # 修改文件夹的属主
chmod 750 mysql-files # 修改文件夹的权限

# 添加系统用户和用户组
groupadd mysql # 在MySQL服务器上面,创建一个名称为mysql的用户组
useradd -r -g mysql -s /bin/false mysql # 在MySQL服务器上面创建一个名为mysql的用户,并把它添加到名为mysql的组中,设置这个用户不能登录MySQL服务器。

# 配置系统环境变量
vi /etc/profile # 编辑环境变量配置文件,在PATH环境变量后面增加MySQL的bin目录
export PATH=$PATH:/usr/local/mysql/bin
source /etc/profile # 重新加载环境变量,是上面增加MySQL bin目录生效。

# 初始化MySQL数据库并启动
mysqld --initialize --user=mysql # 初始化MySQL数据库
mysql_ssl_rsa_setup # 初始化SSL,用于连接MySQL服务的时候支持SSL加密通讯,这样连接通信更加安全。
mysqld_safe --user=mysql & # 在后台启动MySQL服务

# 配置操作系统启动脚本
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql.server # 设置MySQL启动脚本到service中,用于使用操作系统服务管理的命令来启动MySQL服务

在安装和初始化期间,可能需要的其他库文件可以通过yum命令来安装。你可能需要的依赖库有如下几个:

yum update
yum install wget
yum install passwd
yum install sudo
yum install libncurses*
yum install ncurses-compat-libs-6.1-7.20180224.el8.i686
yum install openssl
yum install libaio
yum install libnuma
yum install numactl-libs.x86_64
yum install initscripts -y

使用已经编译好的二进制文件安装MySQL的过程就介绍到这里了,后续会分享其他几种MySQL的安装方式。

微信搜索『coder-home』,或者扫一扫右侧的二维码,关注『程序猿集锦』。
了解更多干货分享,还有各类视频教程。
扫描它,带走我。
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页