linux中的安装与卸载
# linux中的安装与卸载
# 查看mysql的安装路径
[root@bogon ~]# whereis mysql
mysql: /usr/bin/mysql /usr/lib/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz
2
# 查看mysql的安装包
[root@bogon ~]# rpm -qa|grep mysql
mysql-community-client-5.6.26-2.el6.i686
mysql-community-release-el6-5.noarch
2
3
# 卸载mysql
[root@bogon ~]# yum remove mysql
删除mysql的数据库文件:删除/var/llib/mysql目录
# 手动安装
# 下载安装包
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz
当然你也可以直接去官网下载,然后传到服务器中
# 解压获取安装
tar -xvf mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz
sudo mv mysql-8.0.33-linux-glibc2.12-x86_64 /usr/local/mysql
2
# 创建用户组和用户
为 MySQL 创建一个专用的用户和组
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
2
为什么要为 MySQL 创建一个专用的用户和组(如 mysql
用户和 mysql
组),而不是直接使用 root
用户运行 MySQL 服务,是一个非常重要的安全实践
。
sudo groupadd mysql
:这个命令使用groupadd
工具创建一个新的名为mysql
的用户组。sudo
意味着以超级用户(root)权限执行此命令,因为创建或修改用户组通常需要管理员权限。sudo useradd -r -g mysql -s /bin/false mysql
:这条命令使用useradd
工具创建一个新用户,并设置了几个选项:
-r
参数表示创建一个系统用户,这种类型的用户通常没有过期日期,适用于运行应用程序而不是给人用。-g mysql
指定新用户的主要组为之前创建的mysql
组。-s /bin/false
设置该用户的登录shell为/bin/false
,实际上这禁止了该用户通过shell登录系统,这是一种安全措施,常用于服务账号。- 最后的
mysql
指定了新用户的用户名,这里与组名相同,但这是可选的,不一定非得相同。
理由如下:
# 最小权限原则
- 在 Linux 中,
root
用户拥有系统的最高权限,可以执行任何操作(包括删除关键文件、修改系统配置等)。 - 如果 MySQL 以
root
用户身份运行,一旦 MySQL 被攻击者利用(例如通过 SQL 注入或其他漏洞),攻击者可以直接获得系统的完全控制权。 - 使用专用的低权限用户(如
mysql
用户)运行 MySQL,可以限制其对系统资源的访问范围,降低潜在的安全风险。
# 隔离风险
- 将 MySQL 的运行环境与其他系统服务隔离开来,确保即使 MySQL 遭受攻击,也不会影响系统的其他部分。
- 例如,
mysql
用户只能访问/usr/local/mysql
目录及其子目录,而无法访问其他敏感目录(如/etc
或/var
)。
假设 MySQL 以 root
用户运行:
- 攻击者通过漏洞获取了 MySQL 的控制权。
- 攻击者可以直接修改系统文件(如
/etc/passwd
),甚至可以删除整个文件系统。
# 设置目录权限
将 MySQL 目录的所有权赋予 mysql
用户和组:
sudo chown -R mysql:mysql /usr/local/mysql
chown
chown
是一个用于更改文件或目录的所有者(Owner)和所属组(Group)的命令。- 在 Linux 系统中,每个文件和目录都有一个所有者(用户)和一个所属组。
-R
-R
表示递归操作(Recursive)。- 它会将指定目录下的所有文件和子目录的所有者和所属组都一并更改。
- 如果不加
-R
,则只会更改指定目录本身的所有者和组,而不会影响其内部的内容。
mysql:mysql
- 这里 可以分为两部分:
- 第一个
mysql
表示新的所有者(User)。 - 第二个
mysql
表示新的所属组(Group)。
- 第一个
- 也就是说,这个命令会将目标路径的所有者设置为用户
mysql
,并将所属组设置为mysql
组。
- 这里 可以分为两部分:
/usr/local/mysql
- 这是目标路径,表示要更改权限的目录或文件。
/usr/local/mysql
通常是 MySQL 数据库的安装目录或数据存储目录。
这条命令的作用是:
递归地将 /usr/local/mysql
目录及其所有子目录和文件的所有者更改为用户 mysql
,并将它们的所属组更改为 mysql
组。
# 初始化数据库
cd /usr/local/mysql
sudo bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
2
--user=mysql
- 指定运行
mysqld
进程的用户为mysql
。 - 这是为了确保 MySQL 服务以低权限用户运行,避免潜在的安全风险。
- 在初始化过程中,MySQL 会尝试以该用户的身份创建和修改文件。
初始化过程中会生成一个临时密码,用于首次登录 MySQL。请记下这个密码。
日志输出类似:
[Note] A temporary password is generated for root@localhost: <临时密码>
# 可能的错误
./bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
错误原因
- 系统中没有安装
libaio
库,或者安装的版本不兼容。 mysqld
在启动时会动态加载所需的共享库文件,如果找不到这些文件,就会报错。
- 系统中没有安装
libaio
是什么?libaio
是 Linux 系统中的一个异步 I/O 库(Asynchronous I/O Library)。- MySQL 的
mysqld
进程依赖这个库来实现高效的磁盘 I/O 操作。
解决方案,安装上就是:
rpm -qa | grep libaio
# 启动服务
到此,安装好了,接下来看看是否安装成功
直接启动
# 创建服务
创建并启动命令,在 CentOS 7+ 中,应该使用 systemd
的方式来管理 MySQL 服务。以下是推荐的步骤:
1.将 MySQL 配置为 systemd
服务。创建一个新的服务文件 /etc/systemd/system/mysql.service
:
sudo vi /etc/systemd/system/mysql.service
内容如下:
[Unit]
Description=MySQL Server
After=network.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
2
3
4
5
6
7
8
9
10
11
12
13
14
这是一个标准的 systemd
配置文件,用于定义 MySQL 服务的行为和启动方式。
systemd
服务文件通常分为三个主要部分:[Unit]
、[Service]
和 [Install]
。每个部分都有特定的作用。
下面只介绍其中2个,
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
- 定义启动 MySQL 服务时执行的命令。
/usr/local/mysql/bin/mysqld
是 MySQL 服务器的主程序路径。--defaults-file=/etc/my.cnf
指定 MySQL 的配置文件路径。- 这个字段是
[Service]
的核心部分,告诉systemd
如何启动 MySQL 服务。
ExecReload=/bin/kill -HUP $MAINPID
- 定义重新加载服务时执行的命令。
$MAINPID
是一个变量,表示当前服务的主进程 ID。/bin/kill -HUP $MAINPID
会向 MySQL 主进程发送HUP
信号,触发配置重载。- 注意:对于 MySQL 来说,这种方式可能不常用,因为 MySQL 的配置更改通常需要重启服务。
WantedBy=multi-user.target
- 定义服务的启用目标(Target)。
multi-user.target
表示多用户模式(即非图形界面的正常运行模式)。- 当你运行
systemctl enable mysql
时,systemd
会创建一个符号链接,将 MySQL 服务与multi-user.target
关联起来。这样,MySQL 会在系统进入多用户模式时自动启动。
# 创建服务时的注意点
在手动安装和初始化 MySQL 数据库后,/etc/my.cnf
文件可能不存在,因此建议手动创建并配置
MySQL 会按照一定的顺序搜索配置文件(即
my.cnf
),常见的路径包括:
/etc/my.cnf
/etc/mysql/my.cnf
/usr/local/mysql/etc/my.cnf
~/.my.cnf
如果这些路径中没有找到配置文件,MySQL 会使用内置的默认值运行
# 创建my.cnf
如果你发现 /etc/my.cnf
文件不存在,可以手动创建一个。以下是一个简单的示例配置:
[mysqld]
# 基本配置
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
port=3306
# 字符集设置
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
# 日志设置
log-error=/usr/local/mysql/data/mysql.err
pid-file=/usr/local/mysql/data/mysql.pid
# 性能优化(可选)
max_connections=200
innodb_buffer_pool_size=1G
[client]
# 客户端配置
port=3306
socket=/tmp/mysql.sock
default-character-set=utf8mb4
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
说明:
[mysqld]
部分:用于配置 MySQL 服务器的行为。[client]
部分:用于配置 MySQL 客户端的行为。
# 加载并启动服务
执行以下命令加载并启动服务:
sudo systemctl daemon-reload # 重新加载 systemd 配置
sudo systemctl enable mysql # 设置服务开机自启
sudo systemctl start mysql # 启动 MySQL 服务
sudo systemctl status mysql # 查看服务状态
2
3
4
正确结果,如果看到如下信息,表示启动成功了
mysql.service - MySQL Server
Loaded: loaded (/etc/systemd/system/mysql.service; enabled; preset: disabled)
Active: active (running) since Tue 2025-04-22 22:54:07 CST; 18s ago
Main PID: 3342436 (mysqld)
Tasks: 35 (limit: 23632)
Memory: 440.5M
CPU: 405ms
CGroup: /system.slice/mysql.service
└─3342436 /usr/local/mysql/mysql8.4.5/bin/mysqld --defaults-file=/etc/my.cnf
2
3
4
5
6
7
8
9
10
# 其它重要操作
# 修改密码
输入初始化时生成的临时密码。
登录后,立即修改密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
# 配置远程访问(可选)
如果你需要允许远程访问 MySQL:
- 修改 MySQL 配置文件
/etc/my.cnf
或/usr/local/mysql/my.cnf
,注释掉或删除bind-address
行:
# bind-address = 127.0.0.1
# 或者修改为
bind-address=0.0.0.0 # 允许所有IP访问
2
3
- 授予远程访问权限:
CREATE USER 'root'@'%' IDENTIFIED BY '新密码';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
2
3