MySQL在CentOS7上安装

1 MySQL软件包下载

MySQL下载地址:https://www.mysql.com/downloads/

MySQL安装工具:

选择MySQL Community Server其他工具酌情选择安装,需要时再安装即可。

每个工具还需要对应Linux的版本,笔者Linux系统为CentOS7,故本示例选择为:Red Hat Enterprise Linux 7 /Oracle Linux 7 (x86,64-bit)

每个版本下载,又有多个安装包,本示例以选择:RPM Bundle

下载MySQL安装包:wget  'https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.30-1.el7.x86_64.rpm-bundle.tar'

安装包解压缩:tar -xvf mysql-8.0.30-1.el7.x86_64.rpm-bundle.tar

注:解包,需要注意压缩包格式,Linux的压缩包并不完全以后缀标识,有时需要进行测试。

上述解压得到【紫色部分是多数情况下必须安装的工具】:

mysql-community-client-8.0.30-1.el7.x86_64.rpm:MySQL客户端应用程序和工具
mysql-community-client-plugins-8.0.30-1.el7.x86_64.rpm:
mysql-community-common-8.0.30-1.el7.x86_64.rpm:MySQL服务端和客户端的通用库文件
mysql-community-debuginfo-8.0.30-1.el7.x86_64.rpm:
mysql-community-devel-8.0.30-1.el7.x86_64.rpm:MySQL数据库客户端应用程序的开发头文件和库
mysql-community-embedded-compat-8.0.30-1.el7.x86_64.rpm:MySQL server作为一个嵌入式库,与使用该库的18版应用程序兼容
mysql-community-icu-data-files-8.0.30-1.el7.x86_64.rpm:
mysql-community-libs-8.0.30-1.el7.x86_64.rpm:MySQL数据库客户端应用程序的共享库
mysql-community-libs-compat-8.0.30-1.el7.x86_64.rpm:对以前MySQL安装的共享兼容性库
mysql-community-server-8.0.30-1.el7.x86_64.rpm:MySQL数据库服务器和相关工具
mysql-community-server-debug-8.0.30-1.el7.x86_64.rpm:调试服务器和二进制插件
mysql-community-test-8.0.30-1.el7.x86_64.rpm:MySQL服务器的测试套件

MySQL官方注释地址https://dev.mysql.com/doc/refman/8.0/en/linux-installation-rpm.html

2 MySQL 安装

安装前,需要确认MySQL所安装的位置,需考虑MySQL是供哪些用户使用,还是单个用户使用。就MySQL在Linux用户中使用情况,可分为单用户使用安装、多用户使用安装、集群用户使用安装。

MySQL是可以通过yum进行安装,也可用rpm安装,还可通过源码编译安装。本次安装选择rpm安装。

参考资料:https://blog.csdn.net/qq_36408717/article/details/126705287

2.1 下载

wget  'https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.30-1.el7.x86_64.rpm-bundle.tar'

2.2 解压

tar -xvf mysql-8.0.30-1.el7.x86_64.rpm-bundle.tar

2.3 安装

下列方式1是MySQL安装包.rpm依耐项的安装顺序,推荐按此步骤的顺序安装,笔者亲测无误,但可能存在尚未安装的依耐项,笔者CentOS7是配置很长一段时间了,很多依赖项早已经安装完毕,故未出现太多未知的错误安装。笔者推荐此种方式安装,是因安装步骤繁琐,有利于安装者发现依耐关系。

下列方式2笔者未测试验证,大概率是可行的。

2.3.1 安装mysql-community-client-plugins

方式1【推荐】:rpm -ivh mysql-community-client-plugins-8.0.30-1.el7.x86_64.rpm

方式2【忽略依赖关系】:rpm -ivh mysql-community-client-plugins-8.0.30-1.el7.x86_64.rpm  --nodeps

2.3.2 安装mysql-community-common

方式1【推荐】:rpm -ivh mysql-community-common-8.0.30-1.el7.x86_64.rpm

方式2【忽略依赖关系】:rpm -ivh mysql-community-common-8.0.30-1.el7.x86_64.rpm  --nodeps

2.3.3 安装mysql-community-libs

方式1【推荐】:rpm -ivh mysql-community-libs-8.0.30-1.el7.x86_64.rpm

方式2【忽略依赖关系】:rpm -ivh mysql-community-libs-8.0.30-1.el7.x86_64.rpm  --nodeps

2.3.3 安装mysql-community-client

方式1【推荐】:rpm -ivh mysql-community-client-8.0.30-1.el7.x86_64.rpm

方式2【忽略依赖关系】:rpm -ivh mysql-community-client-8.0.30-1.el7.x86_64.rpm  --nodeps

2.3.4 安装mysql-community-icu-data-files

方式1【推荐】:rpm -ivh mysql-community-icu-data-files-8.0.30-1.el7.x86_64.rpm

方式2【忽略依赖关系】:rpm -ivh mysql-community-icu-data-files-8.0.30-1.el7.x86_64.rpm  --nodeps

2.3.5 安装mysql-community-server

方式1【推荐】:rpm -ivh mysql-community-server-8.0.30-1.el7.x86_64.rpm

方式2【忽略依赖关系】:rpm -ivh mysql-community-server-8.0.30-1.el7.x86_64.rpm

2.3.6 安装mysql-community-server-debug

方式1【推荐】:rpm -ivh mysql-community-server-debug-8.0.30-1.el7.x86_64.rpm

方式2【忽略依赖关系】:rpm -ivh mysql-community-server-debug-8.0.30-1.el7.x86_64.rpm  --nodeps

2.3.7 安装mysql-community-libs-compat

方式1【推荐】:rpm -ivh mysql-community-libs-compat-8.0.30-1.el7.x86_64.rpm

方式2【忽略依赖关系】:rpm -ivh mysql-community-libs-compat-8.0.30-1.el7.x86_64.rpm  --nodeps

2.3.8 安装mysql-community-devel

方式1【推荐】:rpm -ivh mysql-community-devel-8.0.30-1.el7.x86_64.rpm

方式2【忽略依赖关系】:rpm -ivh mysql-community-devel-8.0.30-1.el7.x86_64.rpm  --nodeps

2.3.9 安装mysql-community-embedded-compat

方式1【推荐】:rpm -ivh mysql-community-embedded-compat-8.0.30-1.el7.x86_64.rpm

方式2【忽略依赖关系】:rpm -ivh mysql-community-embedded-compat-8.0.30-1.el7.x86_64.rpm  --nodeps

2.3.10 安装mysql-community-debuginfo

方式1【推荐】:rpm -ivh mysql-community-debuginfo-8.0.30-1.el7.x86_64.rpm

方式2【忽略依赖关系】:rpm -ivh mysql-community-debuginfo-8.0.30-1.el7.x86_64.rpm  --nodeps

2.3.11 安装mysql-community-embedded-compat

方式1【推荐】:rpm -ivh mysql-community-embedded-compat-8.0.30-1.el7.x86_64.rpm

方式2【忽略依赖关系】:rpm -ivh mysql-community-embedded-compat-8.0.30-1.el7.x86_64.rpm  --nodeps

2.3.12安装mysql-community-debuginfo

方式1【推荐】:

Step1【必须的依赖项】: yum install perl-JSON

Step2: rpm -ivh mysql-community-test-8.0.30-1.el7.x86_64.rpm

方式2【忽略依赖关系】:rpm -ivh mysql-community-test-8.0.30-1.el7.x86_64.rpm  --nodeps 

3 MySQL环境配置

3.1 MySQL在CentOS7上的用户及用户组配置

3.1.1 创建用户组

命令:groupadd mysql

3.1.2 创建用户

命令:useradd -r mysql -g mysql

3.1.3 创建目录

Step1【创建MySQL basedir 和datadir】:mkdir  -p  /MySQL/DataDir

Step2【切换目录】:cd  /MySQL

Step2【创建其他有关目录】:mkdir  log mysqld  mysql-files  mysql-keyring

3.1.4  修改权限目录

Step1:chown -R  mysql:mysql  /MySQL

3.1.5  修改配置文件/etc/my.cnf

vi /etc/my.cnf

[mysqld]
# basedir=/MySQL
datadir=/MySQL/DataDir
socket=/MySQL/DataDir/mysql.sock
log-error=/MySQL/Log/mysqld.log

pid-file=/MySQL/mysqld/mysqld.pid

3.1.6  初始化MySQL

(一)无初始密码初始化

方式1:mysqld --initialize-insecure --user=mysql

方式2【Windows】:mysqld --initialize-insecure --console

(二)有初始密码初始化

方式1:mysqld --initialize --user=mysql

方式2【Windows】mysqld --initialize --user=mysql --console

3.1.7  启动MySQL服务

查看服务状态:systemctl status mysqld

启动服务:systemctl start mysqld

停止服务:systemctl stop mysqld

重启服务:systemctl restart mysqld

修改SELinux策略模式:

SELinux一共有三种策略模式:enforcing、permissive、disabled

(1)enforcing:强制模式,selinux正在运行中,已经正确开始限制domian/type了。

(2)permissive:宽容模式,selinux正在运行中,不过仅有警告信息,并不会实际限制domian/type的访问。

(3)disabled:关闭selinux模式,即selinux没有实际运行,需要修改/etc/selinux/config文件,并重启Linux系统,selinux配置已经写入了Linux内核中。

操作方法:

(1)getenforce:键入命令取得当前selinux模式:getenforce

(2)修改selinux模式:

  enforcing模式:setenforce 1

  permissive模式setenforce 0

最简单的方式,就是将selinux模式切换到permissive模式下,mysqld就可以正常使用。

方式2,就是配置enforcing的上下文策略,有点小复杂,不在此展示。

3.1.8  登录MySQL

(一)无初始密码登录

方式1:mysql -uroot -p

方式2:mysql -u root --skip-password

(二)有初始密码登录

Step1【查找初始密码】:

命令:grep 'temporary password' /MySQL/log/mysqld.log

2023-01-31T14:48:00.616880Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: tUgelh(ei14M

Step1【初始密码登录】:mysql -uroot -p

(三)登录排错

Step1【问题状态】:

mysql -uroot -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Step2【问题剖析】:修改my.cnf文件后,修改了mysql.sockmysqld.pid的路径,同时又删除了默认路径的文件,因此须重新生成此部分文件。若未删除默认路径的文件,也存在此错误,因此须删除默认文件,然后重新生成此部分文件。生成此文件后,MySQL默认路径依然存在找不到mysql.sock的情况,进而导致无法登录,此时解决方式有两种:其一,将生成的mysql.sock直接链接到默认路径下;其二,直接修改MySQL客户端默认配置路径

Step3【解决方案】:

方案1【链接mysql.sock,需删除以前默认文件】:

命令1:ln -s /MySQL/DataDir/mysql.sock  /var/lib/mysql/mysql.sock

命令2:systemctl restart mysqld

命令3【再次登录验证】:mysql -u root -p

方案2【修改MySQL客户端默认配置路径】:

此方案的实质是,当MySQL服务端mysql.sock修改了所存放的位置后,也应当在修改MySQL客户端默认所指定的位置,否则就会报错。

编辑my.cnf,添加如下内容:

vi /etc/my.cnf

[client]
socket=/MySQL/DataDir/mysql.sock

3.1.9  重置MySQL的root账户密码

登录MySQL,然后重置密码。注:重置密码不同于修改密码,重置密码是MySQL初始登录,必须设置新的密码。

命令:ALTER USER 'root'@'localhost' IDENTIFIED BY 'root-NewPassword';

3.2 MySQL在CentOS7上的目录配置【目录结构布局】

弄清楚MySQL的目录配置,其主要目的是搞清楚MySQL存放数据情况,便于修改配置和进行数据迁移

MySQL官方注释地址【Table 2.12】:https://dev.mysql.com/doc/refman/8.0/en/linux-installation-rpm.html

3.2.1 默认目录与文件

(1)/usr/bin/mysql*与MySQL相关的可执行文件,包括mysql、mysqladmin、mysqlbinlog等。

(2)/usr/sbin/mysqld*:与MySQL相关的可执行文件,主要包括mysqldmysqld-debug

(3)/usr/lib64/mysql:CentOS7系统与MySQL相关的配置库文件,主要C的编译库文件【未确定】。

(4)/usr/include/mysql:CentOS7系统与MySQL相关的头文件,C的编译头文件【未确定】。

(5)/usr/share/mysql:MySQL放置了各种支持文件,主要与语言语系相关的文件,主要命名为“errmsg.sys”二进制文件。

(6)/usr/share/mysql-8.0:同上,主要应与MySQL版本相关的配置文件。

(7)/usr/share/mysql-test:MySQL测试相关的文件,包括了perl可执行脚本和其他配置文件【详细内容尚未知晓】。

(8)/usr/share/man/man1/mysql*:与MySQL相关的Linux帮助文件,可使用man命令进行查看。

(9)/usr/share/doc/mysql*:与MySQL软件相关的文件说明。MySQL手册,Info格式。

(10)/var/lib/mysql:初始安装时,为空文件夹。MySQL默认的数据存放目录,数据库及数据表数据存放之处,可修改此目录,改变MySQL数据的存放路径。数据备份和迁移时,须考虑此目录数据的重要性,考虑备份和迁移。修改目录为: /MySQL/DataDir

(11)/var/lib/mysql-files初始安装时,为空文件夹。该目录用于数据文件的导入和导出(备份与还原),MySQL的备份会产生一个文件XXX.sqlXXX.txt。该目录即是导入和导出时,所指定的默认目录。该位置用于存储secure_file_priv系统变量的值,该变量将导入和导出操作限制特定的目录中。

(12)/var/lib/mysql-keyring初始安装时,为空文件夹。MySQL加密文件存放路径,MySQL社区版支持的keyring_file,支持基于表的数据加密方案,支持整张表加密。

(13)/var/lib/mysql/mysql.sock默认文件和路径,但本文安装修改了此文件的存放位置。该文件的作用是MySQL客户端mysql与服务端mysqlserver处于同一台主机时,发起本地连接时使用。连接MySQL无须定义host的IP,为空或localhost均可。此种情况,即使改变MySQL外部port也不影响连接。在my.ini或my.cnf中改变端口后,mysql.sock是随每次mysqlserver启动生成的,即修改后启动时重新生成。mysql.sock是用于本地服务器的套接字文件,仅只是另一种连接机制。不包含任何数据,但仅用于客户端到本地端进行数据交换。找不到该文件时,使用/etc/rc.d/init.d/mysql restart 或者service mysql restart 重启服务【CentOS7上不存在该目录】。参考资料:https://blog.csdn.net/qq_42533216/article/details/121489614
https://blog.csdn.net/qq_39688201/article/details/122856373

(14)/etc/my.cnf:MySQL最重要的配置文件,须安装者手动配置的文件。一般情况需要修改datadirsocket参数,也可进行特殊参数配置。

(15)/etc/my.cnf.d:MySQL的配置文件目录。

(16)/var/log/mysqld.log:MySQL默认的错误日志文件,即log_error,但本文安装修改了该文件所存放的位置。

(17)/var/log/mysql.log:MySQL的日志文件。

(18)/usr/lib/systemd/system/mysqld.service:MySQL的服务启动文件。

(19)/var/run/mysqld/mysqld.pid:MySQL的pid文件。

(20)PATH:MySQL

3.2.2与mysql相关的可执行文件工具

工具清单:

-/usr/bin/mysql
-/usr/bin/mysqladmin
-/usr/bin/mysqlbinlog
-/usr/bin/mysqlcheck
-/usr/bin/mysql_client_test
-/usr/bin/mysql_config
-/usr/bin/mysql_config-64
-/usr/bin/mysql_config_editor
-/usr/bin/mysqld_pre_systemd
-/usr/bin/mysqld_safe
-/usr/bin/mysqldump
-/usr/bin/mysqldumpslow
-/usr/bin/mysqlimport
-/usr/bin/mysql_keyring_encryption_test
-/usr/bin/mysql_migrate_keyring
-/usr/bin/mysqlpump
-/usr/bin/mysql_secure_installation
-/usr/bin/mysqlshow
-/usr/bin/mysqlslap
-/usr/bin/mysql_ssl_rsa_setup
-/usr/bin/mysqltest
-/usr/bin/mysqltest_safe_process
-/usr/bin/mysql_tzinfo_to_sql
-/usr/bin/mysql_upgrade
-/usr/bin/mysqlxtest
-/usr/sbin/mysqld
-/usr/sbin/mysqld-debug

详细说明:

(一)MySQL的bin路径:

(1)mysql:MySQL软件运行的主程序,使用此工具进入数据库中。

(2)mysqladmin

(3)mysqlbinlog

(4)mysqlcheck

(5)mysql_client_test

(6)mysql_config

(7)mysql_config-64

(8)mysql_config_editor

(9)mysqld_pre_systemd

(10)mysqld_safe

(11)mysqldump

(12)mysqldumpslow

(13)mysqlimport

(14)mysql_keyring_encryption_test

(15)mysql_migrate_keyring

(16)mysqlpump

(17)mysql_secure_installation

(18)mysqlshow

(19)mysqlslap

(20)mysql_ssl_rsa_setup

(21)mysqltest

(22)mysqltest_safe_process

(23)mysql_tzinfo_to_sql

(24)mysql_upgrade

(25)mysqlxtest

(二)MySQL的sbin路径:

(26)mysqld

(27)mysqld-debug

3.2.3 MySQL运行的配置文件my.cnf

该文件一般的存放路径为:/etc/my.cnf

该文件的配置模块有:mysqld、client等。

(一)mysqld:

(1)datadir:此参数设置为MySQL核心数据所存放的位置,以文件形式的存在。所存数据为数据库、表数据等。

参数设置为:datadir=/MySQL/DataDir

(2)socket:此参数设置为MySQL的服务端【server】和客户端【client】支持本地连接的文件,不必指定IP地址即可登录。

参数设置为:socket=/MySQL/DataDir/mysql.sock

(3)log-error:此参数设置为MySQL使用的记录日志,主要记录错误、警告等日志。

参数设置为:log-error=/MySQL/Log/mysqld.log

(4)pid-file:此参数为MySQL指定pid-file的路径

参数设置为:pid-file=/MySQL/Mysqld/mysqld.pid

(5)early-plugin-load:此参数和‘keyring_file_data’需要连用,主要设置MySQL支持整表加密情况。此参数为启动库文件。

参数设置为:early-plugin-load=keyring_file.so

(6)keyring_file_data:此参数为设置加密情况文件所存放的文件及位置。

参数设置为:keyring_file_data=/MySQL/mysql-keyring/keyring

(7)xxx:

(二)client:

(1)socket:此参数设置MySQL客户端的mysql.sock文件路径,须与服务端相同。

参数设置为:socket=/MySQL/DataDir/mysql.sock

(2)xxx:此参数设置MySQL客户端

参数设置为:socket=/MySQL/DataDir/mysql.sock

(三)

 

3.2.4 MySQL

3.2.5 MySQL整表加密解决方案keyring【钥匙环】

MySQL社区版自5.7.11开始支持基于表的数据加密方案,模块名为#keyring_file,支持整张表加密。此种加密方式是基于文件加密,一旦#mysqld读取key启动后,将会解密整张表的数据,在mysql服务内,读取的数据都是解密后的,即对客户端而言都是无感知的,而这个key是本地存放的,mysql服务拥有读写这个key的权限。

此种加密方案,总体看不太安全。其原因是:数据库文件是加密的,但只要能有mysql服务的账户,那么访问数据都是解密后的,对于MySQL本身而言,加密不起作用,不攻自破。而且解密key也是本地存放的,入侵者完全可以一并带走。这种方案仅能确保入侵者只拖走了数据库文件,故无法读取内容。

企业版MySQL额外的三种模块【三种加密方案】:

(1)keyring_encrypted_file:同社区版keyring_file差不多,只是多了一个key,这个key用于加密解密数据库,安全性相似。

(2)keyring_okv:相比于本地存放key,本模块使用KMIP存取key,相对更加安全。

(3)keyring_aws:整合aws的密钥管理服务来管理加解密的key,进一步提高key的管理安全性。

四种加密方案对比:

模块名 可用加密算法 密钥长度限制
keyring_file AES 无限制
DSA 无限制
RSA 无限制
keyring_encrypted_file AES 无限制
DSA 无限制
RSA 无限制
keyring_okv AES 16,24,32
keyring_aws AES 16,24,32

四种方案都是文件加密,内存解密方案,区别在于加解密的key存放方案。推荐使用keyring_okv和keyring_aws,并确保mysql账户的安全性和严格区分账户权限。

参考资料:https://jiuaidu.com/jianzhan/49536/

在MySQL中使用加解密方案:

(1)启用加密模块:INSTALL PLUGIN keyring_file soname 'keyring_file.so';

mysql> INSTALL PLUGIN keyring_file soname 'keyring_file.so';

Query OK, 0 rows affected (0.10 sec)

(2)设置加密key存放路径:set global keyring_file_data='/root/mysql-keyring/keyring';

mysql> set global keyring_file_data='/var/lib/mysql-keyring/keyring';

Query OK, 0 rows affected (0.00 sec)

(3)永久启用设置:上述两个步骤都是临时设置,重启MySQL服务就会失效。永久启用设置,须在配置文件my.cnf中设置,确保重启服务后依然生效。推荐路径采用默认路径,或者设置为:/MySQL/mysql-keyring/keyring

[mysqld]

early-plugin-load=keyring_file.so

keyring_file_data=/MySQL/mysql-keyring/keyring

(4)查看key的存放路径:show global variables like ‘%keyring_file_data%';

mysql> show global variables like '%keyring_file_data%';

+-------------------+--------------------------------+

| Variable_name      | Value               |

+-------------------+--------------------------------+

| keyring_file_data | /MySQL/mysql-keyring/keyring |

+-------------------+--------------------------------+

1 row in set (0.00 sec)

(5)查看启用的模块【查看keyring_file模块是否已经被载入】:show plugins;

mysql> show plugins;
+----------------------------+----------+--------------------+-----------------+---------+
| Name | Status | Type | Library | License |
+----------------------------+----------+--------------------+-----------------+---------+
| binlog | ACTIVE | STORAGE ENGINE | NULL | GPL |
| mysql_native_password | ACTIVE | AUTHENTICATION | NULL | GPL |
| sha256_password | ACTIVE | AUTHENTICATION | NULL | GPL |
| PERFORMANCE_SCHEMA | ACTIVE | STORAGE ENGINE | NULL | GPL |
| CSV | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MyISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
| InnoDB | ACTIVE | STORAGE ENGINE | NULL | GPL |
| INNODB_TRX | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_LOCKS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_LOCK_WAITS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMP | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMP_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
.......(省略N条)
| keyring_file | ACTIVE | KEYRING | keyring_file.so | GPL |
+----------------------------+----------+--------------------+-----------------+---------+
45 rows in set (0.00 sec)

(6)加密现有的表:alter table table_name  encryption='Y';

mysql> create table cc (id int);
Query OK, 0 rows affected (0.01 sec)

mysql> alter table cc encryption='Y';
Query OK, 0 rows affected (0.06 sec)
Records: 0 Duplicates: 0 Warnings: 0

(7)取消加密:alter table table_name encryption='N';

mysql> alter table cc encryption='N';
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0

3.2.6

3.2.7

3.2.8

3.3 MySQL在CentOS7上的使用配置

3.3.1

3.3.2 

4 MySQL在Linux上的调用

当MySQL被多处安装时,在使用时需加以区分,必须确定所使用的MySQL是安装在哪个位置。

不同地方MySQL所存放的数据,可以传递和拷贝,因此需要确定数据流的方向和地址【此种问题非常基础,但又容易被人忽视】。

 

 

posted on 2022-12-12 01:21  LankeHome  阅读(312)  评论(0)    收藏  举报