微信搜索『coder-home』,或者扫一扫右侧的二维码,关注『程序猿集锦』。 了解更多干货分享,还有各类视频教程。 扫描它,带走我。 |
MySQL的安装有很多种方式,基于不同的平台又有不同的安装方式。接下来几篇文章,我们来盘点一些在Linux系统下常用的安装方式。这篇文章我们先来看一下基于已经编译好的二进制文件如何安装MySQL数据库。
推荐安装General Availability(GA)版本,也称为生产或者稳定版本。当然,如果想尝试新鲜的功能,可以尝试安装开发版本,这样的版本有新的功能,但是不一定稳定。在我们的生产环境中不要使用这样的版本,要使用稳定版本。
MySQL版本的命名规则,拿5.7.32举例说明。5是大版本,7是中间版本,32是小版本好。其中大版本+总结版本,这两个值可以确定一个稳定发行版本。小版本号主要是用来迭代修复某一个稳定版本的bug,每修复一些bug,重新发布就会把小版本号加一。
如果之前已经安装过MySQL,通过yum
或者apt-get
的方式安装的,在使用二进制包安装之前,需要把之前安装的MySQL彻底卸载掉。卸载的方式也需要通过yum
或者apt-get
命令来卸载。卸载完成之后,需要查看/etc/my.cnf
和/etc/mysql/my.cnf
目录下面是否还有MySQL相关的文件或者目录,如果存在的话,删除它们。
如果是通过其他方式安装的,可以把对应的安装目录删除,环境变量删除即可。
要使用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
命令来修改。visudo
和vi
没有什么区别,命令的使用规则一样。具体增加的配置内容如下所示:
[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
针对上述解压出来的文件和目录,挑选比较重要的简单说明一下:
$PATH
环境变量中,便于以后在任何目录都可以直接执行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 data
、selct ... 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 data
和select ... into outfile
这样的语句时候会使用到这个文件夹目录,这个文件夹需要配合MySQL中的参数secure_file_priv
一起使用。如果我们不需要执行load data
、select ... 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数据库的初始化操作,初始化的时候出现的错误:
[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数据库的时候会用到。
使用如下命令来初始化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服务器,启动后使用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
使用前面生成的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>
经过前面的步骤,我们已经成功安装了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』,或者扫一扫右侧的二维码,关注『程序猿集锦』。 了解更多干货分享,还有各类视频教程。 扫描它,带走我。 |