第108集:数据库服务

教学目标

  • 理解数据库服务的基本概念和工作原理
  • 掌握MySQL数据库的安装和配置方法
  • 掌握PostgreSQL数据库的安装和配置方法
  • 了解其他数据库管理系统的配置方法
  • 能够独立配置和管理数据库服务
  • 能够排查数据库服务的常见故障

主要知识点

  • 数据库服务的概念和工作原理
  • MySQL数据库的安装和配置
  • PostgreSQL数据库的安装和配置
  • 其他数据库管理系统的配置
  • 数据库用户和权限管理
  • 数据库备份和恢复
  • 数据库性能优化
  • 数据库故障排查

核心知识点讲解

数据库服务的概念和工作原理

数据库服务简介

数据库服务是一种用于存储、管理和检索数据的服务,它基于数据库管理系统(DBMS)提供数据存储和管理功能。

常见数据库管理系统

  • 关系型数据库

    • MySQL:开源、轻量级的关系型数据库
    • PostgreSQL:功能强大、开源的关系型数据库
    • Oracle:企业级关系型数据库
    • SQL Server:Microsoft的关系型数据库
    • SQLite:嵌入式关系型数据库
  • 非关系型数据库

    • MongoDB:文档型数据库
    • Redis:键值对数据库
    • Cassandra:列族数据库
    • Elasticsearch:搜索引擎数据库
    • RabbitMQ:消息队列数据库

数据库服务的工作原理

  1. 客户端连接:客户端通过网络连接到数据库服务器
  2. 认证授权:数据库服务器验证客户端身份并检查权限
  3. SQL执行:数据库服务器解析并执行SQL语句
  4. 数据操作:数据库服务器执行数据的增删改查操作
  5. 结果返回:数据库服务器将操作结果返回给客户端
  6. 连接管理:数据库服务器管理客户端连接的生命周期

MySQL数据库的安装和配置

MySQL简介

MySQL是一种开源的关系型数据库管理系统,由Oracle公司开发和维护,广泛应用于Web应用和中小型企业。

MySQL的版本

  • MySQL Community Edition:社区版,免费开源
  • MySQL Enterprise Edition:企业版,收费,提供更多功能和支持
  • MySQL Cluster:集群版,高可用解决方案

安装MySQL

Ubuntu/Debian
# 安装MySQL服务器
apt update
apt install mysql-server

# 安装MySQL客户端
apt install mysql-client

# 安装MySQL开发库
apt install libmysqlclient-dev
CentOS/RHEL
# 安装MySQL服务器
yum install mysql-server

# 安装MySQL客户端
yum install mysql

# 安装MySQL开发库
yum install mysql-devel
Arch Linux
# 安装MySQL服务器
pacman -S mysql

# 初始化MySQL数据库
mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql

# 启动MySQL服务并设置自启
systemctl start mysqld
systemctl enable mysqld

配置MySQL

基本配置
  1. 编辑MySQL配置文件

    # Ubuntu/Debian
    vim /etc/mysql/mysql.conf.d/mysqld.cnf
    
    # CentOS/RHEL
    vim /etc/my.cnf
    
    # Arch Linux
    vim /etc/my.cnf
  2. 基本配置选项

    [mysqld]
    # 数据库目录
    datadir = /var/lib/mysql
    
    # 套接字文件
    socket = /var/run/mysqld/mysqld.sock
    
    # 端口
    port = 3306
    
    # 绑定地址
    bind-address = 127.0.0.1
    
    # 字符集
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    
    # 最大连接数
    max_connections = 151
    
    # 日志配置
    log-error = /var/log/mysql/error.log
    pid-file = /var/run/mysqld/mysqld.pid
  3. 重启MySQL服务

    systemctl restart mysql
    # 或
    systemctl restart mysqld
安全配置
  1. 运行安全脚本

    # Ubuntu/Debian
    mysql_secure_installation
    
    # CentOS/RHEL
    mysql_secure_installation
  2. 设置root密码

    # 登录MySQL
    mysql -u root
    
    # 设置密码
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
    FLUSH PRIVILEGES;
    exit;
  3. 限制远程访问

    # 编辑MySQL配置文件
    vim /etc/mysql/mysql.conf.d/mysqld.cnf
    
    # 修改绑定地址
    bind-address = 127.0.0.1

管理MySQL服务

启动和停止服务
# 启动MySQL服务
systemctl start mysql
# 或
systemctl start mysqld

# 停止MySQL服务
systemctl stop mysql
# 或
systemctl stop mysqld

# 重启MySQL服务
systemctl restart mysql
# 或
systemctl restart mysqld

# 查看MySQL服务状态
systemctl status mysql
# 或
systemctl status mysqld

# 设置MySQL服务自启
systemctl enable mysql
# 或
systemctl enable mysqld
登录MySQL
# 本地登录
mysql -u root -p

# 远程登录
mysql -u username -h host_ip -p

# 使用命令文件登录
mysql -u root -p < script.sql

# 使用管道登录
echo "SELECT * FROM database.table;" | mysql -u root -p

PostgreSQL数据库的安装和配置

PostgreSQL简介

PostgreSQL是一种功能强大的开源关系型数据库管理系统,由PostgreSQL Global Development Group开发和维护,支持复杂的数据类型和查询。

PostgreSQL的版本

  • PostgreSQL Community Edition:社区版,免费开源
  • EnterpriseDB:企业版,基于PostgreSQL,提供更多功能和支持

安装PostgreSQL

Ubuntu/Debian
# 安装PostgreSQL服务器
apt update
apt install postgresql postgresql-contrib

# 安装PostgreSQL客户端
apt install postgresql-client

# 安装PostgreSQL开发库
apt install libpq-dev
CentOS/RHEL
# 安装PostgreSQL服务器
yum install postgresql-server postgresql-contrib

# 初始化数据库
postgresql-setup --initdb

# 启动PostgreSQL服务并设置自启
systemctl start postgresql
systemctl enable postgresql
Arch Linux
# 安装PostgreSQL
pacman -S postgresql

# 初始化数据库
initdb -D /var/lib/postgres/data

# 启动PostgreSQL服务并设置自启
systemctl start postgresql
systemctl enable postgresql

配置PostgreSQL

基本配置
  1. 编辑PostgreSQL配置文件

    # Ubuntu/Debian
    vim /etc/postgresql/14/main/postgresql.conf
    
    # CentOS/RHEL
    vim /var/lib/pgsql/data/postgresql.conf
    
    # Arch Linux
    vim /var/lib/postgres/data/postgresql.conf
  2. 基本配置选项

    # 数据库目录
    data_directory = '/var/lib/postgresql/14/main'
    
    # 监听地址
    listen_addresses = 'localhost'
    
    # 端口
    port = 5432
    
    # 最大连接数
    max_connections = 100
    
    # 共享缓冲区
    shared_buffers = 128MB
    
    # 日志配置
    log_directory = 'log'
    log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
    log_truncate_on_rotation = on
    log_rotation_age = 1d
    log_rotation_size = 10MB
  3. 重启PostgreSQL服务

    systemctl restart postgresql
访问控制配置
  1. 编辑pg_hba.conf文件

    # Ubuntu/Debian
    vim /etc/postgresql/14/main/pg_hba.conf
    
    # CentOS/RHEL
    vim /var/lib/pgsql/data/pg_hba.conf
    
    # Arch Linux
    vim /var/lib/postgres/data/pg_hba.conf
  2. 基本访问控制配置

    # 本地连接
    local   all             all                                     peer
    
    # IPv4连接
    host    all             all             127.0.0.1/32            md5
    
    # IPv6连接
    host    all             all             ::1/128                 md5
  3. 重启PostgreSQL服务

    systemctl restart postgresql

管理PostgreSQL服务

启动和停止服务
# 启动PostgreSQL服务
systemctl start postgresql

# 停止PostgreSQL服务
systemctl stop postgresql

# 重启PostgreSQL服务
systemctl restart postgresql

# 查看PostgreSQL服务状态
systemctl status postgresql

# 设置PostgreSQL服务自启
systemctl enable postgresql
登录PostgreSQL
# 切换到postgres用户
su - postgres

# 登录PostgreSQL
psql

# 创建用户
CREATE USER username WITH PASSWORD 'password';

# 创建数据库
CREATE DATABASE database_name OWNER username;

# 退出PostgreSQL\q

# 直接登录指定数据库
psql -U username -d database_name

其他数据库管理系统的配置

MongoDB

MongoDB是一种开源的文档型非关系型数据库,由MongoDB Inc.开发和维护,支持灵活的数据模型。

安装和配置MongoDB
# Ubuntu/Debian
wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-5.0.list
apt update
apt install -y mongodb-org

# 启动MongoDB服务并设置自启
systemctl start mongod
systemctl enable mongod

# 配置MongoDB
vim /etc/mongod.conf

# 基本配置
storage:
  dbPath: /var/lib/mongodb
  journal:
    enabled: true
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log
net:
  port: 27017
  bindIp: 127.0.0.1

# 重启MongoDB服务
systemctl restart mongod

Redis

Redis是一种开源的键值对非关系型数据库,由Redis Labs开发和维护,支持多种数据结构。

安装和配置Redis
# Ubuntu/Debian
apt update
apt install redis-server

# CentOS/RHEL
yum install epel-release
yum install redis

# 启动Redis服务并设置自启
systemctl start redis
systemctl enable redis

# 配置Redis
vim /etc/redis/redis.conf

# 基本配置
bind 127.0.0.1
port 6379
dir /var/lib/redis
logfile /var/log/redis/redis-server.log
dbfilename dump.rdb

# 重启Redis服务
systemctl restart redis

SQLite

SQLite是一种开源的嵌入式关系型数据库,由D. Richard Hipp开发和维护,无需单独的服务器进程。

安装和使用SQLite
# Ubuntu/Debian
apt update
apt install sqlite3

# CentOS/RHEL
yum install sqlite

# 使用SQLite
# 创建数据库
sqlite3 test.db

# 执行SQL语句
CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, email TEXT);
INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com');
SELECT * FROM users;

# 退出SQLite\q

数据库用户和权限管理

MySQL用户和权限管理

创建用户
-- 创建用户
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

-- 创建远程用户
CREATE USER 'username'@'%' IDENTIFIED BY 'password';

-- 修改用户密码
ALTER USER 'username'@'localhost' IDENTIFIED BY 'new_password';

-- 删除用户
DROP USER 'username'@'localhost';
授予权限
-- 授予所有权限
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;

-- 授予特定数据库权限
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';

-- 授予特定表权限
GRANT SELECT, INSERT, UPDATE ON database_name.table_name TO 'username'@'localhost';

-- 撤销权限
REVOKE ALL PRIVILEGES ON database_name.* FROM 'username'@'localhost';

-- 刷新权限
FLUSH PRIVILEGES;
查看权限
-- 查看用户权限
SHOW GRANTS FOR 'username'@'localhost';

-- 查看所有用户
SELECT user, host FROM mysql.user;

PostgreSQL用户和权限管理

创建用户
-- 创建用户
CREATE USER username WITH PASSWORD 'password';

-- 创建超级用户
CREATE USER username WITH SUPERUSER PASSWORD 'password';

-- 修改用户密码
ALTER USER username WITH PASSWORD 'new_password';

-- 删除用户
DROP USER username;
授予权限
-- 授予数据库权限
GRANT ALL PRIVILEGES ON DATABASE database_name TO username;

-- 授予表权限
GRANT SELECT, INSERT, UPDATE ON TABLE table_name TO username;

-- 授予模式权限
GRANT ALL PRIVILEGES ON SCHEMA public TO username;

-- 撤销权限
REVOKE ALL PRIVILEGES ON DATABASE database_name FROM username;
查看权限
-- 查看用户权限
\dp

-- 查看所有用户\du

数据库备份和恢复

MySQL备份和恢复

备份数据库
# 备份所有数据库
mysqldump -u root -p --all-databases > all_databases.sql

# 备份特定数据库
mysqldump -u root -p database_name > database_name.sql

# 备份特定表
mysqldump -u root -p database_name table_name > table_name.sql

# 备份数据库结构
mysqldump -u root -p --no-data database_name > database_structure.sql
恢复数据库
# 恢复所有数据库
mysql -u root -p < all_databases.sql

# 恢复特定数据库
mysql -u root -p database_name < database_name.sql

# 从备份文件创建数据库
mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS database_name;"
mysql -u root -p database_name < database_name.sql

PostgreSQL备份和恢复

备份数据库
# 备份数据库
pg_dump -U postgres database_name > database_name.sql

# 备份所有数据库
pg_dumpall -U postgres > all_databases.sql

# 备份数据库结构
pg_dump -U postgres --schema-only database_name > database_structure.sql

# 备份数据库数据
pg_dump -U postgres --data-only database_name > database_data.sql
恢复数据库
# 恢复数据库
psql -U postgres database_name < database_name.sql

# 从备份文件创建数据库
psql -U postgres -c "CREATE DATABASE IF NOT EXISTS database_name;"
psql -U postgres database_name < database_name.sql

# 恢复所有数据库
psql -U postgres < all_databases.sql

数据库性能优化

MySQL性能优化

配置优化
  1. 调整内存参数

    # 编辑MySQL配置文件
    vim /etc/mysql/mysql.conf.d/mysqld.cnf
    
    # 添加以下配置
    [mysqld]
    # 缓冲区大小
    key_buffer_size = 256M
    innodb_buffer_pool_size = 1G
    
    # 查询缓存
    query_cache_size = 64M
    query_cache_type = 1
    
    # 排序缓冲区
    sort_buffer_size = 4M
    read_buffer_size = 4M
    read_rnd_buffer_size = 8M
  2. 调整存储引擎

    # 编辑MySQL配置文件
    vim /etc/mysql/mysql.conf.d/mysqld.cnf
    
    # 设置默认存储引擎
    [mysqld]
    default_storage_engine = InnoDB
SQL优化
  1. 使用索引

    -- 创建索引
    CREATE INDEX idx_name ON users(name);
    
    -- 创建唯一索引
    CREATE UNIQUE INDEX idx_email ON users(email);
    
    -- 创建复合索引
    CREATE INDEX idx_name_email ON users(name, email);
  2. 优化查询

    -- 使用LIMIT限制结果集
    SELECT * FROM users LIMIT 10;
    
    -- 使用WHERE条件过滤
    SELECT * FROM users WHERE age > 18;
    
    -- 避免SELECT *
    SELECT id, name FROM users;
    
    -- 使用JOIN替代子查询
    SELECT u.name, o.order_id FROM users u JOIN orders o ON u.id = o.user_id;

PostgreSQL性能优化

配置优化
  1. 调整内存参数

    # 编辑PostgreSQL配置文件
    vim /etc/postgresql/14/main/postgresql.conf
    
    # 添加以下配置
    # 共享缓冲区
    shared_buffers = 256MB
    
    # 工作内存
    work_mem = 16MB
    
    # 维护工作内存
    maintenance_work_mem = 128MB
    
    # 有效缓存大小
    effective_cache_size = 768MB
  2. 调整查询优化

    # 编辑PostgreSQL配置文件
    vim /etc/postgresql/14/main/postgresql.conf
    
    # 添加以下配置
    # 随机页面成本
    random_page_cost = 4.0
    
    # 顺序页面成本
    seq_page_cost = 1.0
SQL优化
  1. 使用索引

    -- 创建索引
    CREATE INDEX idx_name ON users(name);
    
    -- 创建唯一索引
    CREATE UNIQUE INDEX idx_email ON users(email);
    
    -- 创建复合索引
    CREATE INDEX idx_name_email ON users(name, email);
  2. 优化查询

    -- 使用LIMIT限制结果集
    SELECT * FROM users LIMIT 10;
    
    -- 使用WHERE条件过滤
    SELECT * FROM users WHERE age > 18;
    
    -- 避免SELECT *
    SELECT id, name FROM users;
    
    -- 使用JOIN替代子查询
    SELECT u.name, o.order_id FROM users u JOIN orders o ON u.id = o.user_id;

数据库故障排查

MySQL故障排查

常见问题及解决方案
  • MySQL服务启动失败:检查配置文件语法,检查端口占用,检查数据库目录权限
  • 连接被拒绝:检查用户权限,检查绑定地址,检查防火墙设置
  • 查询执行缓慢:检查索引,优化SQL语句,调整配置参数
  • 数据库崩溃:检查日志文件,使用mysqlcheck修复表,恢复备份
  • 磁盘空间不足:清理日志文件,优化数据存储,增加磁盘空间
诊断工具
  • mysqladmin:MySQL管理工具

    # 查看服务器状态
    mysqladmin -u root -p status
    
    # 查看进程列表
    mysqladmin -u root -p processlist
    
    # 刷新权限
    mysqladmin -u root -p flush-privileges
  • mysqldumpslow:分析慢查询日志

    # 分析慢查询日志
    mysqldumpslow /var/log/mysql/mysql-slow.log
  • mysqlcheck:检查和修复表

    # 检查所有表
    mysqlcheck -u root -p --all-databases
    
    # 修复表
    mysqlcheck -u root -p --repair database_name

PostgreSQL故障排查

常见问题及解决方案
  • PostgreSQL服务启动失败:检查配置文件语法,检查端口占用,检查数据库目录权限
  • 连接被拒绝:检查用户权限,检查监听地址,检查防火墙设置
  • 查询执行缓慢:检查索引,优化SQL语句,调整配置参数
  • 数据库崩溃:检查日志文件,使用pg_dump备份,恢复备份
  • 磁盘空间不足:清理日志文件,优化数据存储,增加磁盘空间
诊断工具
  • psql:PostgreSQL客户端工具

    # 查看服务器状态
    psql -U postgres -c "SELECT version();"
    
    # 查看进程列表
    psql -U postgres -c "SELECT * FROM pg_stat_activity;"
    
    # 查看数据库大小
    psql -U postgres -c "SELECT pg_size_pretty(pg_database_size('database_name'));"
  • pg_dump:PostgreSQL备份工具

    # 备份数据库
    pg_dump -U postgres database_name > backup.sql
  • pg_restore:PostgreSQL恢复工具

    # 恢复数据库
    pg_restore -U postgres -d database_name backup.sql

实用案例分析

案例1:配置MySQL数据库服务

配置步骤

  1. 安装MySQL
# 在Ubuntu/Debian上安装
apt update
apt install mysql-server mysql-client

# 在CentOS/RHEL上安装
yum install mysql-server mysql

# 启动MySQL服务并设置自启
systemctl start mysql
# 或
systemctl start mysqld
systemctl enable mysql
# 或
systemctl enable mysqld

# 查看MySQL服务状态
systemctl status mysql
# 或
systemctl status mysqld
  1. 安全配置
# 运行安全脚本
mysql_secure_installation

# 按照提示设置:
# 1. 设置root密码
# 2. 移除匿名用户
# 3. 禁用root远程登录
# 4. 移除测试数据库
# 5. 重新加载权限表
  1. 创建数据库和用户
# 登录MySQL
mysql -u root -p

# 创建数据库
CREATE DATABASE example_db;

# 创建用户
CREATE USER 'example_user'@'localhost' IDENTIFIED BY 'password';

# 授予权限
GRANT ALL PRIVILEGES ON example_db.* TO 'example_user'@'localhost';

# 刷新权限
FLUSH PRIVILEGES;

# 退出MySQL\q
  1. 测试MySQL
# 使用新用户登录
mysql -u example_user -p

# 选择数据库
USE example_db;

# 创建表
CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  email VARCHAR(100) NOT NULL UNIQUE,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

# 插入数据
INSERT INTO users (name, email) VALUES
('John Doe', 'john@example.com'),
('Jane Smith', 'jane@example.com');

# 查询数据
SELECT * FROM users;

# 退出MySQL\q

案例2:配置PostgreSQL数据库服务

配置步骤

  1. 安装PostgreSQL
# 在Ubuntu/Debian上安装
apt update
apt install postgresql postgresql-contrib postgresql-client

# 在CentOS/RHEL上安装
yum install postgresql-server postgresql-contrib

# 初始化数据库
postgresql-setup --initdb

# 启动PostgreSQL服务并设置自启
systemctl start postgresql
systemctl enable postgresql

# 查看PostgreSQL服务状态
systemctl status postgresql
  1. 配置PostgreSQL
# 切换到postgres用户
su - postgres

# 登录PostgreSQL
psql

# 创建用户
CREATE USER example_user WITH PASSWORD 'password';

# 创建数据库
CREATE DATABASE example_db OWNER example_user;

# 退出PostgreSQL\q

# 退出postgres用户
exit
  1. 测试PostgreSQL
# 登录PostgreSQL
psql -U example_user -d example_db

# 创建表
CREATE TABLE users (
  id SERIAL PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  email VARCHAR(100) NOT NULL UNIQUE,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

# 插入数据
INSERT INTO users (name, email) VALUES
('John Doe', 'john@example.com'),
('Jane Smith', 'jane@example.com');

# 查询数据
SELECT * FROM users;

# 退出PostgreSQL\q

案例3:数据库备份和恢复

配置步骤

  1. MySQL备份和恢复
# 备份数据库
mysqldump -u root -p example_db > example_db_backup.sql

# 恢复数据库
# 创建新数据库
mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS example_db_restored;"

# 恢复数据
mysql -u root -p example_db_restored < example_db_backup.sql

# 验证恢复
mysql -u root -p -e "SELECT * FROM example_db_restored.users;"
  1. PostgreSQL备份和恢复
# 备份数据库
pg_dump -U postgres example_db > example_db_backup.sql

# 恢复数据库
# 创建新数据库
psql -U postgres -c "CREATE DATABASE example_db_restored OWNER example_user;"

# 恢复数据
psql -U postgres -d example_db_restored < example_db_backup.sql

# 验证恢复
psql -U example_user -d example_db_restored -c "SELECT * FROM users;"

案例4:数据库性能优化

配置步骤

  1. MySQL性能优化
# 编辑MySQL配置文件
vim /etc/mysql/mysql.conf.d/mysqld.cnf

# 添加以下配置
[mysqld]
# 缓冲区大小
key_buffer_size = 256M
innodb_buffer_pool_size = 1G

# 查询缓存
query_cache_size = 64M
query_cache_type = 1

# 排序缓冲区
sort_buffer_size = 4M
read_buffer_size = 4M
read_rnd_buffer_size = 8M

# 最大连接数
max_connections = 150

# 存储引擎
default_storage_engine = InnoDB

# 重启MySQL服务
systemctl restart mysql
  1. PostgreSQL性能优化
# 编辑PostgreSQL配置文件
vim /etc/postgresql/14/main/postgresql.conf

# 添加以下配置
# 共享缓冲区
shared_buffers = 256MB

# 工作内存
work_mem = 16MB

# 维护工作内存
maintenance_work_mem = 128MB

# 有效缓存大小
effective_cache_size = 768MB

# 最大连接数
max_connections = 150

# 随机页面成本
random_page_cost = 4.0

# 顺序页面成本
seq_page_cost = 1.0

# 重启PostgreSQL服务
systemctl restart postgresql

案例5:数据库故障排查

排查步骤

  1. MySQL故障排查
# 检查MySQL服务状态
systemctl status mysql

# 查看MySQL错误日志
tail -f /var/log/mysql/error.log

# 检查MySQL进程
ps aux | grep mysql

# 检查MySQL端口
netstat -tuln | grep 3306

# 检查数据库连接
mysql -u root -p -e "SELECT 1;"

# 检查数据库大小
mysql -u root -p -e "SELECT table_schema AS 'Database', SUM(data_length + index_length) / 1024 / 1024 AS 'Size (MB)' FROM information_schema.TABLES GROUP BY table_schema;"

# 检查慢查询
mysql -u root -p -e "SHOW VARIABLES LIKE '%slow_query%';"
  1. PostgreSQL故障排查
# 检查PostgreSQL服务状态
systemctl status postgresql

# 查看PostgreSQL错误日志
tail -f /var/log/postgresql/postgresql-14-main.log

# 检查PostgreSQL进程
ps aux | grep postgres

# 检查PostgreSQL端口
netstat -tuln | grep 5432

# 检查数据库连接
psql -U postgres -c "SELECT 1;"

# 检查数据库大小
psql -U postgres -c "SELECT pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname)) AS size FROM pg_database;"

# 检查活动连接
psql -U postgres -c "SELECT * FROM pg_stat_activity;"

课后练习

  1. 配置MySQL数据库服务

    • 步骤:安装MySQL → 安全配置 → 创建数据库和用户 → 测试数据库
    • 验证:能够成功连接MySQL并执行SQL操作
  2. 配置PostgreSQL数据库服务

    • 步骤:安装PostgreSQL → 初始化数据库 → 创建数据库和用户 → 测试数据库
    • 验证:能够成功连接PostgreSQL并执行SQL操作
  3. 配置MongoDB数据库服务

    • 步骤:安装MongoDB → 配置MongoDB → 启动服务 → 测试数据库
    • 验证:能够成功连接MongoDB并执行操作
  4. 数据库备份和恢复

    • 步骤:创建测试数据 → 备份数据库 → 恢复数据库 → 验证恢复
    • 验证:恢复后的数据库与原数据库一致
  5. 数据库性能优化

    • 步骤:分析数据库性能 → 调整配置参数 → 优化SQL语句 → 验证性能改善
    • 验证:数据库查询性能得到明显改善
  6. 数据库故障排查

    • 步骤:模拟数据库故障 → 使用排查工具定位问题 → 修复问题 → 验证服务恢复
    • 验证:数据库服务能够正常工作,连接和查询成功

总结

本集详细介绍了Linux系统中数据库服务的配置方法,包括:

  • 数据库服务的概念和工作原理
  • MySQL数据库的安装和配置
  • PostgreSQL数据库的安装和配置
  • 其他数据库管理系统的配置(MongoDB、Redis、SQLite)
  • 数据库用户和权限管理
  • 数据库备份和恢复
  • 数据库性能优化
  • 数据库故障排查

通过本集的学习,读者应该能够理解不同数据库管理系统的特点和适用场景,并能够独立配置和管理这些服务。数据库服务是企业和个人应用中的重要组成部分,掌握它的配置和管理技巧对于系统管理员来说非常重要。

在实际应用中,需要根据具体的需求和环境,选择合适的数据库管理系统,并采取适当的安全措施,确保数据库的安全性和可靠性。同时,还需要定期备份和优化数据库,及时发现和解决问题,确保服务的正常运行。

« 上一篇 文件共享服务 下一篇 » 代理服务配置