前言:
如今小伙伴们对“mysql二进制安装”都比较重视,你们都想要剖析一些“mysql二进制安装”的相关资讯。那么小编也在网摘上收集了一些有关“mysql二进制安装””的相关文章,希望小伙伴们能喜欢,你们一起来学习一下吧!关注我「程序猿集锦」,获取更多分享。
背景安装前注意事项版本的选择卸载已安装的MySQL配置sudo权限基于二进制安装包安装安装包的下载安装包目录说明解压二进制安装包配置系统环境变量创建文件目录创建操作系统用户初始化MySQL数据库初始化SSL证书启动MySQL服务登录MySQL数据库配置systemctl/service命令启动MySQL总结背景
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/sudoers4 -rw-r----- 1 root root 1786 May 18 2020 /etc/sudo.conf4 -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的官网,进入下载页面。选择我们的二进制安装包。如下图所示:
地址为:
地址为:
地址:
可以直接点击Download按钮,下载到本地,然后再上传到服务器上,这里我们选择复制下载地址,到服务器上面使用wget命令来下载安装包(注:服务上面的网络比本地的网络下载得快很多,这是我选择在服务器上下载安装包的原因),如下所示:
wget安装包目录说明
下载后解压下载后的安装包,解压后的效果如下:
[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]# lsLICENSE README bin docs include lib man share support-files[root@b9f018d06344 mysql-5.7.32-linux-glibc2.12-x86_64]# ls -lstrtotal 276 4 -rw-r--r-- 1 7161 31415 587 Sep 23 12:00 README244 -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/profileexport 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数据库
现在开始执行MySQL数据库的初始化操作,初始化的时候出现的错误:
[root@b9f018d06344 mysql]# bin/mysqld --initialize --user=mysqlbin/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=mysqlbin/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=mysql2021-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=457902021-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_setup2021-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_Tdbin/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_Tdmysql: [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 3Server version: 5.7.32Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.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 README12 -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/binsource /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 updateyum install wgetyum install passwdyum install sudoyum install libncurses*yum install ncurses-compat-libs-6.1-7.20180224.el8.i686yum install opensslyum install libaioyum install libnumayum install numactl-libs.x86_64yum install initscripts -y
使用已经编译好的二进制文件安装MySQL的过程就介绍到这里了,后续会分享其他几种MySQL的安装方式。
标签: #mysql二进制安装