Linux DBMS 管理全攻略
在 Linux 环境下管理数据库管理系统(DBMS),涉及多个关键方面,包括系统管理、性能管理和进程管理等。下面将详细介绍这些方面的相关知识和操作方法。
系统管理
管理 Linux 数据库在很大程度上等同于管理 Linux 系统本身。系统管理主要涵盖以下六个类别:
1. 备份
2. 性能管理
3. 进程管理
4. 用户管理
5. 文件系统管理
6. 杂项或间歇性任务
备份
备份是系统管理中的重要环节,下面介绍两个常用的 Linux 归档命令:
tar
和
cpio
。
tar
命令
tar
(tape archive 的缩写)是 Linux 和 UNIX 中经典的备份命令,它不仅可以在磁带上创建归档文件,还能在任何存储介质上使用。其通用语法如下:
tar task mode file/device file−names
tar
命令的参数及作用如下表所示:
| 参数 | 作用 |
| ---- | ---- |
|
task (any of c, r, t, x)
| 创建、追加到、显示内容列表或从归档文件中提取文件 |
|
mode (any of v, w, u)
| 分别以详细模式(显示每个处理文件的名称)、确认模式(等待对每个操作的确认)、将
tar
命令执行者的用户和组 ID 分配给提取的文件 |
|
file/device, or f
| 指定
tar
应该创建或提取文件的设备或文件 |
|
Filenames
| 标识要放入或从归档文件中提取的文件 |
以下是
tar
命令的一些常见操作示例:
-
创建归档文件
:将当前目录下的所有文件放入
/backup
目录下名为
tar_fil
的归档文件中,使用以下命令:
ls | tar c > /backup/tar_lib
-
从归档文件中提取文件
:将
/backup目录下tar_fil归档文件中所有以.hal结尾的文件恢复到当前目录,使用以下命令:
tar xf /backup/tar_fil *.hal
-
显示归档文件内容列表
:显示
/backup目录下tar_fil归档文件中每个文件的名称,使用以下命令:
tar t /backup/tar_fil
-
显示追加到归档文件的项目
:将所有以
.ncc结尾的文件追加到/backup/tar_fil归档文件的末尾,并在追加时显示处理的文件名,使用以下命令:
tar rvf /backup/big_lib *.log
cpio
命令
cpio
命令和
tar
命令一样,可以创建和管理归档文件,但它们之间存在一些差异。例如,
cpio
使用的内部格式与
tar
不兼容,并且在存储介质上的空间分配方式也不同。
tar
会为一个 5 字节的文件分配整个 512 或 1024 字节的存储单元,而
cpio
则更加节省空间,只使用 5 字节的存储空间。因此,
tar
无法识别
cpio
创建的归档文件。
cpio
命令的参数及作用如下表所示:
| 参数 | 作用 |
| ---- | ---- |
|
-o (out)
或
-I (in)
| 将文件列表复制到归档文件或从归档文件中提取文件,或者在不创建归档文件的情况下将文件从一个目录复制到另一个目录 |
|
with out, a
| 重置复制出的文件的访问时间 |
|
with out or in, B
| 在复制文件时使用非默认的 5120 字节块大小 |
|
with out or in, v
| 使用详细模式,显示每个处理文件的名称 |
|
with in, d
| 在需要时创建目录 |
|
with in, m
| 保留文件的原始修改时间 |
|
with out or in, c
| 使用更旧但更具可移植性的归档格式 |
|
with in, u
| 无条件复制,即从归档文件中用旧版本的文件替换新版本的文件,无需确认 |
以下是
cpio
命令的一些常见操作示例:
-
创建归档文件
:将当前目录下所有以
.txt
结尾的文件放入
/backup
目录下名为
txt_stuf
的归档文件中,使用以下命令:
ls *.txt | cpio -o > /backup/txt_stuf
-
重命名归档文件中的文件
:重命名
/backup目录下txt_stuf归档文件中的所有文件,使用以下命令:
cpio -ir < /backup/txt_stuf
-
从归档文件中提取文件
:将
/backup目录下txt_stuf归档文件中的所有文件恢复到当前目录,使用以下命令:
cpio -i < /backup/txt_stuf
-
归档目录
:将当前目录下的所有文件和子目录放入
/backup目录下名为big_lib的归档文件中,使用以下命令:
find . -print | cpio -o > /backup/big_lib
-
显示归档文件内容列表
:显示
/backup目录下big_lib归档文件中所有目录、子目录和文件的名称,使用以下命令:
cpio -it < /backup/big_lib
自动化备份
通过 Linux 的批处理作业调度器
cron
自动化常见任务对管理员来说非常有价值,备份就是其中之一。
自动化
tar
备份
以下是一个定期运行的实际示例,它会在本地磁带驱动器上创建
/backup
目录下所有以
.txt
结尾的文件的
tar
归档文件:
0 1 * * 2−0 tar cvf /dev/rt/0m /backup/*.txt
该命令的详细解析如下表所示:
| 命令部分 | 作用 |
| ---- | ---- |
|
0 1 * * 2−0
| 告诉
cron
在每天凌晨 1 点(0 分钟),每月的每一天,每年的每个月,从周二到周日运行
tar
命令 |
|
tar cvf
| 创建一个
tar
归档文件,以详细模式工作,指定设备为
/dev/rt/0m
|
|
/backup/*.txt
| 表示
/backup
目录下所有以
.txt
结尾的文件 |
自动化
cpio
备份
以下是一个基于贝尔实验室在 UNIX 下使用的示例脚本,在 Linux 中同样可以用于在网络中移动文件:
cd $DB
find . -name *.db -print | cpio -ocB | rsh elsewhere `cd $DB
cpio -icB`
该脚本的详细解析如下表所示:
| 命令部分 | 作用 |
| ---- | ---- |
|
cd $DB
| 切换到由环境变量
$DB
指定的目录 |
|
find . -name *.db -print
| 查找该目录下所有以
.db
结尾的文件 |
|
| cpio -ocB
| 将文件列表传递给
cpio
,将指定文件复制到归档文件中,使用更具可移植性的格式和非标准的 5120 字节块大小 |
|
cd $DB ; cpio -icB
| 切换到远程机器的数据库目录并复制
cpio
输出的内容 |
性能管理
性能管理主要涉及两个命令:
top
和
netstat
。
top
命令
top
是一个操作系统命令,它可以实时显示 CPU 活动的快照。例如,使用以下命令可以获取 10 次快照,然后返回 shell 提示符:
top -d 10
top
命令的参数及作用如下表所示:
| 参数 | 作用 |
| ---- | ---- |
|
-s some integer
| 设置
top
显示的刷新时间间隔(秒) |
|
-d some integer
| 只显示指定次数的信息,然后退出 |
|
-u
| 在
top
输出中显示用户 ID 号而不是用户名 |
|
-n some integer
| 每个屏幕只显示指定数量的进程 |
top
命令可以显示以下性能参数的实时信息:
- 最近时间段内 CPU 的平均负载
- 当前 CPU 正在处理的进程数量以及处于不同状态(如睡眠、等待、运行、启动或停止)的进程数量
- 自上次报告以来,CPU 在不同状态(如空闲、中断和交换)下所花费的时间百分比。在多处理器系统中,
top
会为每个 CPU 提供这些信息
要终止
top
命令并返回操作系统提示符,只需使用
Ctrl+C
组合键或输入小写字母
q
。
netstat
命令
netstat
命令可以用于监控 Linux 服务器的网络状态。其语法如下:
netstat some_argument
netstat
命令的参数及作用如下表所示:
| 参数 | 作用 |
| ---- | ---- |
|
-I
| 仅显示特定网络接口的信息 |
|
interface
| 指定要获取统计信息的网络接口名称 |
|
-M
| 仅显示多播路由表 |
|
-n
| 以数字形式显示网络地址 |
|
-r
| 显示所有路由表 |
|
-s
| 显示所有协议的统计信息 |
|
-p
| 显示特定协议的统计信息 |
netstat
命令的接口导向输出会显示诸如数据包传输和数据包冲突(TCP 协议)等累积统计信息,而协议导向输出则会提供关于 TCP 的详细信息。需要注意的是,
netstat
可以识别所有重要的协议,如
arp
、
ip
、
tcp
和
udp
。
进程管理
数据库本质上是磁盘密集型应用程序,在分布式处理环境中运行时,还可能会在网络上产生大量流量。因此,监控与数据库相关的进程对于有效利用服务器资源至关重要。下面介绍三个在监控和管理进程方面非常有用的 Linux 命令:
ps
、
nice
和
kill
。
ps
命令
ps
(process status 的缩写)用于提供当前正在运行的各个作业的状态信息,它通过进程 ID(PID)来跟踪这些进程。
ps
命令有很多参数,以下是一些常见的用法示例:
ps -e # 获取所有进程的统计信息
ps -u root # 获取由特定用户(这里是 root)启动的所有进程的统计信息
ps -tp7 # 获取从特定终端(这里是 p7)启动的所有进程的统计信息
ps
命令的重要参数及作用如下表所示:
| 参数 | 作用 |
| ---- | ---- |
|
-a
| 显示所有进程的信息,无论系统还是用户启动的 |
|
-e
| 显示从任何终端运行的所有进程的信息 |
|
-l
| 显示详细的进程信息列表 |
|
-t
| 显示从指定终端运行的所有进程的信息 |
|
-u
| 显示由指定用户启动的进程列表 |
ps -l
命令的输出非常详细,包含以下信息:
- 任务在内存中的地址
- 任务使用的内存量(以块为单位)
- 任务的累计运行时间
- PID 参数代表的命令名称
- 任务所需的 CPU 资源百分比
- 作业运行的优先级(以整数表示,数值越小优先级越高)
- 进程 ID 号
- 当前任务的父进程 ID 号
- 进程状态(如
S
表示睡眠、
W
表示等待、
T
表示终止、
R
表示运行)
- 任务运行的终端
- 启动任务的用户 ID
通过这些详细的信息,有经验的 DBMS 管理员可以更好地控制与数据库相关的进程。
例如,要监控某个用户的进程活动,可以使用以下命令:
ps -u zealot
输出示例如下:
PID TTY TIME COMMAND
15654 ttyp1 0:00 telnet
15977 ttyp1 0:00 sh
15994 ttyp1 0:00 ps
16203 ttyp1 0:57 /usr/local/mysql/bin/mysql
16391 ttyp1 0:32 /usr/local/mysql/bin/mysql employee_db < address_script.sql > em
16422 ttyp1 0:29 /usr/local/mysql/bin/mysql employee_db < evaluation_script.sql >
16534 ttyp1 0:19 /usr/local/mysql/bin/mysql employee_db < education_script.sql >
16606 ttyp1 0:15 /usr/local/mysql/bin/mysql employee_db < vacation_script.sql > e
16824 ttyp1 0:11 /usr/local/mysql/bin/mysql employee_db < training_script.sql > e
16929 ttyp1 0:07 /usr/local/mysql/bin/mysql employee_db < overtime_script.sql > e
各列分别表示进程 ID 号、控制进程的终端、进程的累计执行时间和进程的命令名称。
要了解特定终端当前 shell 会话运行的进程,可以使用以下命令:
ps -t p0
需要将
p0
替换为
/dev
目录中相应的设备名称。
nice
命令
要在 Linux 中有效地使用
nice
命令来调整进程优先级,首先需要了解操作系统如何分配这些优先级。
Linux 进程以两种模式运行:用户模式和内核模式。当进程执行自己的代码时,它处于用户模式,在这种模式下,进程无法进行 I/O 操作、进程间通信和网络通信等活动,这些活动只能由操作系统内核发起。操作系统的系统调用接口充当了用户模式和内核模式之间的桥梁。
每个进程的生命周期始于
fork
系统调用从现有父进程创建新进程。新进程在创建时会占用一部分内存并开始执行。如果没有足够的空闲内存,进程可能需要等待 I/O 操作完成,甚至可能被暂时交换到磁盘的交换空间中。即使克服了这些延迟,进程还需要等待 CPU 调度器分配 CPU 时间,因此 CPU 在进程之间切换的效率会对服务器的整体性能产生关键影响。
在默认情况下,Linux CPU 会让每个进程运行一个预设的时间间隔(量子或时间片),大多数 Linux 版本的默认时间片为 100 毫秒,但可以通过重新配置和编译操作系统内核来修改这个参数。这种默认的调度方式涉及大量的上下文切换,可能会带来较大的开销。重新编译内核以减小时间片参数可能会导致更大的开销,而增大时间片则可能会阻止许多用户和应用程序访问 CPU。
每个 Linux 进程在创建时都会被分配一个优先级,并且在执行过程中大约每 40 毫秒会动态调整一次优先级。通常,进程分为实时、系统和用户三个优先级类别,只有实时进程才能获得最高优先级,并且可能会阻止其他进程访问 CPU。
在 Linux 和 UNIX 中,
nice
值用于表示进程的优先级,默认值通常为 20。要使进程以较低优先级运行,需要给它一个较高的
nice
值;要使进程以较高优先级运行,则需要给它一个较低的
nice
值。需要注意的是,只有超级用户才能降低
nice
值,即提高进程的优先级。
nice
命令的语法如下:
nice some_integer PID_for_command_whose_priority_will_be_altered
例如,以下命令将一个 Linux DBMS 查询的优先级从常见的默认值 10 提高到 1:
nice 1 3572
在使用
nice
命令之前,需要先确定要调整优先级的任务的进程 ID。通常,在 Linux 中可以提供给
nice
命令的整数范围从 20(最高优先级)到 19(最低优先级)。
kill
命令
kill
命令用于终止正在运行的进程,其参数及作用如下表所示:
| 参数 | 作用 |
| ---- | ---- |
|
signal number
| 发送指定的数字信号来终止进程。
9
确保进程终止,但可能不会优雅地结束;
15
虽然终止速度较慢,但允许进程进行一些清理工作,如关闭文件 |
|
process ID number
| 通过 PID 指定要终止的作业 |
信号参数的一些非默认值及其含义如下:
-
1 (SIGHUP)
:表示终止任务
-
3 (SIGQUIT)
:表示在进行核心转储后终止任务
-
9 (SIGKILL)
:表示强制终止任务,无法被忽略
-
24 (SIGSTOP)
:表示暂停任务,而不是终止它
例如,如果你使用
ps
命令发现一个正在测试的小 SQL 脚本即使在后台运行也占用了过多的 CPU 时间,可以使用
kill
命令来终止它:
kill -9 1234 # 假设进程 ID 为 1234
综上所述,在 Linux 环境下管理数据库管理系统需要掌握多个方面的知识和技能,包括系统管理、性能管理和进程管理等。通过合理使用
tar
、
cpio
、
top
、
netstat
、
ps
、
nice
和
kill
等命令,可以有效地管理数据库,提高服务器的性能和稳定性。
Linux DBMS 管理全攻略
用户管理
用户管理在 Linux DBMS 管理中是保障系统安全和资源合理分配的关键环节。在 Linux 系统中,不同用户对数据库的操作权限和资源使用情况需要进行精细控制。以下是用户管理的主要方面及操作方法:
创建用户
在 Linux 中,可以使用
useradd
命令创建新用户,例如创建一个名为
dbuser
的用户:
useradd dbuser
创建用户后,还需要为其设置密码:
passwd dbuser
分配权限
对于 Linux DBMS 用户,需要根据其工作需求分配相应的数据库操作权限。以 MySQL 数据库为例,可以使用以下 SQL 语句为
dbuser
用户分配对
employee_db
数据库的查询和插入权限:
GRANT SELECT, INSERT ON employee_db.* TO 'dbuser'@'localhost' IDENTIFIED BY 'password';
这里的
password
是
dbuser
用户的数据库密码。
删除用户
如果某个用户不再需要访问数据库,可以使用
userdel
命令删除该用户:
userdel dbuser
同时,还需要在数据库中撤销该用户的权限:
REVOKE ALL PRIVILEGES ON employee_db.* FROM 'dbuser'@'localhost';
DROP USER 'dbuser'@'localhost';
文件系统管理
文件系统管理对于 Linux DBMS 至关重要,因为数据库的数据文件和日志文件都存储在文件系统中。合理的文件系统管理可以提高数据库的性能和可靠性。
挂载文件系统
在 Linux 中,可以使用
mount
命令将外部存储设备挂载到文件系统中。例如,将一个新的硬盘挂载到
/data
目录:
mount /dev/sdb1 /data
这里的
/dev/sdb1
是硬盘分区的设备名称。
调整文件系统参数
为了提高数据库性能,可以调整文件系统的一些参数。例如,对于 ext4 文件系统,可以通过修改
/etc/fstab
文件来调整挂载选项:
/dev/sdb1 /data ext4 defaults,noatime 0 0
noatime
选项可以禁止更新文件的访问时间,从而减少 I/O 操作。
监控文件系统使用情况
可以使用
df
命令监控文件系统的使用情况:
df -h
该命令会以人类可读的格式显示文件系统的使用情况,包括总容量、已使用容量和可用容量等信息。
杂项或间歇性任务
除了上述主要的管理任务外,还存在一些杂项或间歇性任务,这些任务虽然不经常执行,但对于系统的正常运行也非常重要。
系统更新
定期进行系统更新可以修复安全漏洞和提高系统性能。在 Linux 中,可以使用
yum
或
apt-get
等包管理工具进行系统更新:
yum update # 对于 CentOS 等系统
apt-get update && apt-get upgrade # 对于 Debian 或 Ubuntu 等系统
日志清理
数据库和系统的日志文件会随着时间的推移不断增大,占用大量的磁盘空间。因此,需要定期清理日志文件。例如,对于 MySQL 数据库的错误日志文件,可以使用以下命令清理:
echo "" > /var/log/mysql/error.log
安全与灾难恢复
在 Linux DBMS 管理中,安全和灾难恢复是不可忽视的重要方面。
安全措施
-
防火墙配置
:使用
iptables或firewalld等防火墙工具限制对数据库服务器的访问。例如,只允许特定 IP 地址的主机访问 MySQL 服务:
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 3306 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j DROP
- 用户认证 :使用强密码和多因素认证等方式加强用户认证的安全性。
- 数据加密 :对敏感数据进行加密存储,例如使用 MySQL 的加密功能对表中的数据进行加密。
灾难恢复
-
备份恢复测试
:定期进行备份恢复测试,确保在发生灾难时能够及时恢复数据。可以使用之前介绍的
tar或cpio命令进行备份恢复测试。 - 异地容灾 :将备份数据存储在异地的数据中心,以防止本地灾难导致数据丢失。
现代数据库部署
随着技术的发展,现代数据库部署方式也在不断变化。以下是一些常见的现代数据库部署方式:
容器化部署
使用 Docker 等容器技术可以将数据库打包成容器,实现快速部署和迁移。例如,使用 Docker 部署 MySQL 数据库:
docker run -d --name mysql-container -e MYSQL_ROOT_PASSWORD=password -p 3306:3306 mysql:latest
云数据库部署
将数据库部署到云服务提供商(如阿里云、腾讯云等)的云数据库服务中,可以享受云服务提供商提供的高可用性、高性能和安全保障。
Linux DBMS 管理流程图
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([开始管理 Linux DBMS]):::startend --> B(系统管理):::process
B --> B1(备份):::process
B1 --> B11(tar 命令):::process
B1 --> B12(cpio 命令):::process
B --> B2(性能管理):::process
B2 --> B21(top 命令):::process
B2 --> B22(netstat 命令):::process
B --> B3(进程管理):::process
B3 --> B31(ps 命令):::process
B3 --> B32(nice 命令):::process
B3 --> B33(kill 命令):::process
B --> B4(用户管理):::process
B4 --> B41(创建用户):::process
B4 --> B42(分配权限):::process
B4 --> B43(删除用户):::process
B --> B5(文件系统管理):::process
B5 --> B51(挂载文件系统):::process
B5 --> B52(调整参数):::process
B5 --> B53(监控使用情况):::process
B --> B6(杂项或间歇性任务):::process
B6 --> B61(系统更新):::process
B6 --> B62(日志清理):::process
A --> C(安全与灾难恢复):::process
C --> C1(安全措施):::process
C1 --> C11(防火墙配置):::process
C1 --> C12(用户认证):::process
C1 --> C13(数据加密):::process
C --> C2(灾难恢复):::process
C2 --> C21(备份恢复测试):::process
C2 --> C22(异地容灾):::process
A --> D(现代数据库部署):::process
D --> D1(容器化部署):::process
D --> D2(云数据库部署):::process
B --> E{是否需要调整管理策略}:::decision
E -->|是| F(重新评估管理需求):::process
F --> B
E -->|否| G([结束管理]):::startend
通过以上对 Linux DBMS 管理的各个方面的介绍,我们可以看到,要实现高效、稳定和安全的数据库管理,需要综合运用多种技术和工具,并且不断根据实际情况进行调整和优化。无论是系统管理、性能管理、进程管理,还是安全与灾难恢复、现代数据库部署,每个环节都相互关联,共同构成了一个完整的数据库管理体系。希望这些知识和方法能够帮助你更好地管理 Linux 环境下的数据库管理系统。
超级会员免费看
2574

被折叠的 条评论
为什么被折叠?



