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.sock和mysqld.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相关的可执行文件,主要包括mysqld和mysqld-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.sql或XXX.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最重要的配置文件,须安装者手动配置的文件。一般情况需要修改datadir和socket参数,也可进行特殊参数配置。
(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所存放的数据,可以传递和拷贝,因此需要确定数据流的方向和地址【此种问题非常基础,但又容易被人忽视】。
浙公网安备 33010602011771号