数据库安装与管理
MySQL/MariaDB数据库
1. MySQL安装
Ubuntu/Debian系统
# 更新包列表
sudo apt update
# 安装MySQL服务器
sudo apt install mysql-server -y
# 安全配置
sudo mysql_secure_installation
# 启动并启用MySQL
sudo systemctl start mysql
sudo systemctl enable mysql
CentOS/RHEL系统
# CentOS 8+ 安装MySQL
sudo dnf install mysql-server -y
# 或安装MariaDB (MySQL的开源替代)
sudo dnf install mariadb-server -y
# 启动并启用服务
sudo systemctl start mysqld # MySQL
sudo systemctl start mariadb # MariaDB
sudo systemctl enable mysqld
sudo systemctl enable mariadb
# 安全配置
sudo mysql_secure_installation
2. MySQL基本配置
配置文件位置
# 主配置文件
/etc/mysql/mysql.conf.d/mysqld.cnf # Ubuntu/Debian
/etc/my.cnf # CentOS/RHEL
# 数据目录
/var/lib/mysql/
# 日志文件
/var/log/mysql/error.log # Ubuntu/Debian
/var/log/mysqld.log # CentOS/RHEL
基本配置示例
# /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
# 基本设置
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
datadir = /var/lib/mysql
# 字符集设置
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 连接设置
max_connections = 200
max_connect_errors = 10
table_open_cache = 2000
max_allowed_packet = 16M
# 缓冲区设置
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_log_buffer_size = 8M
# 日志设置
log_error = /var/log/mysql/error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
# 安全设置
bind-address = 127.0.0.1
skip-networking = 0
3. MySQL用户管理
连接MySQL
# 使用root用户连接
sudo mysql -u root -p
# 连接到特定数据库
mysql -u username -p database_name
# 连接到远程MySQL
mysql -h hostname -u username -p
用户管理命令
-- 创建用户
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
CREATE USER 'webuser'@'%' IDENTIFIED BY 'strongpassword';
-- 授权
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost';
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'webuser'@'%';
-- 查看用户权限
SHOW GRANTS FOR 'newuser'@'localhost';
-- 撤销权限
REVOKE INSERT ON mydb.* FROM 'webuser'@'%';
-- 删除用户
DROP USER 'olduser'@'localhost';
-- 刷新权限
FLUSH PRIVILEGES;
4. 数据库操作
数据库管理
-- 显示所有数据库
SHOW DATABASES;
-- 创建数据库
CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 使用数据库
USE myapp;
-- 显示表
SHOW TABLES;
-- 删除数据库
DROP DATABASE olddb;
-- 查看数据库大小
SELECT
table_schema AS 'Database',
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)'
FROM information_schema.tables
GROUP BY table_schema;
表操作示例
-- 创建表
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- 查看表结构
DESCRIBE users;
SHOW CREATE TABLE users;
-- 修改表结构
ALTER TABLE users ADD COLUMN phone VARCHAR(20);
ALTER TABLE users MODIFY COLUMN email VARCHAR(150);
ALTER TABLE users DROP COLUMN phone;
-- 创建索引
CREATE INDEX idx_username ON users(username);
CREATE INDEX idx_email ON users(email);
PostgreSQL数据库
1. PostgreSQL安装
Ubuntu/Debian系统
# 安装PostgreSQL
sudo apt update
sudo apt install postgresql postgresql-contrib -y
# 启动并启用服务
sudo systemctl start postgresql
sudo systemctl enable postgresql
# 检查状态
sudo systemctl status postgresql
CentOS/RHEL系统
# 安装PostgreSQL
sudo dnf install postgresql-server postgresql-contrib -y
# 初始化数据库
sudo postgresql-setup --initdb
# 启动并启用服务
sudo systemctl start postgresql
sudo systemctl enable postgresql
2. PostgreSQL配置
配置文件位置
# 主配置文件
/etc/postgresql/14/main/postgresql.conf # Ubuntu/Debian
/var/lib/pgsql/data/postgresql.conf # CentOS/RHEL
# 访问控制文件
/etc/postgresql/14/main/pg_hba.conf # Ubuntu/Debian
/var/lib/pgsql/data/pg_hba.conf # CentOS/RHEL
# 数据目录
/var/lib/postgresql/14/main/ # Ubuntu/Debian
/var/lib/pgsql/data/ # CentOS/RHEL
基本配置
# 编辑postgresql.conf
sudo nano /etc/postgresql/14/main/postgresql.conf
# 重要配置项
listen_addresses = 'localhost'
port = 5432
max_connections = 100
shared_buffers = 256MB
effective_cache_size = 1GB
work_mem = 4MB
maintenance_work_mem = 64MB
# 日志配置
logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_statement = 'all'
访问控制配置
# 编辑pg_hba.conf
sudo nano /etc/postgresql/14/main/pg_hba.conf
# 配置示例
# TYPE DATABASE USER ADDRESS METHOD
local all postgres peer
local all all md5
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
host mydb webuser 192.168.1.0/24 md5
3. PostgreSQL用户管理
连接PostgreSQL
# 切换到postgres用户
sudo -u postgres psql
# 连接到特定数据库
psql -U username -d database_name
# 连接到远程PostgreSQL
psql -h hostname -U username -d database_name
用户管理
-- 创建用户
CREATE USER newuser WITH PASSWORD 'password';
CREATE USER webuser WITH PASSWORD 'strongpassword' CREATEDB;
-- 创建角色
CREATE ROLE admin WITH LOGIN PASSWORD 'adminpass' SUPERUSER;
-- 修改用户权限
ALTER USER webuser CREATEDB;
ALTER USER webuser WITH SUPERUSER;
-- 查看用户
\du
-- 删除用户
DROP USER olduser;
4. PostgreSQL数据库操作
数据库管理
-- 显示所有数据库
\l
-- 创建数据库
CREATE DATABASE myapp OWNER webuser ENCODING 'UTF8';
-- 连接数据库
\c myapp
-- 显示表
\dt
-- 删除数据库
DROP DATABASE olddb;
-- 查看数据库大小
SELECT
datname AS database_name,
pg_size_pretty(pg_database_size(datname)) AS size
FROM pg_database
WHERE datistemplate = false;
Redis缓存数据库
1. Redis安装
Ubuntu/Debian系统
# 安装Redis
sudo apt update
sudo apt install redis-server -y
# 启动并启用Redis
sudo systemctl start redis-server
sudo systemctl enable redis-server
# 测试Redis
redis-cli ping
CentOS/RHEL系统
# 安装Redis
sudo dnf install redis -y
# 启动并启用Redis
sudo systemctl start redis
sudo systemctl enable redis
# 配置防火墙
sudo firewall-cmd --permanent --add-port=6379/tcp
sudo firewall-cmd --reload
2. Redis配置
配置文件
# 编辑Redis配置
sudo nano /etc/redis/redis.conf
# 重要配置项
bind 127.0.0.1 # 绑定地址
port 6379 # 端口
requirepass strongpassword # 设置密码
maxmemory 1gb # 最大内存
maxmemory-policy allkeys-lru # 内存策略
# 持久化配置
save 900 1 # 900秒内至少1个key变化时保存
save 300 10 # 300秒内至少10个key变化时保存
save 60 10000 # 60秒内至少10000个key变化时保存
# 重启Redis应用配置
sudo systemctl restart redis-server
Redis基本操作
# 连接Redis
redis-cli
redis-cli -a password
# 基本命令
SET key value # 设置键值
GET key # 获取值
DEL key # 删除键
EXISTS key # 检查键是否存在
KEYS * # 列出所有键
FLUSHALL # 清空所有数据
# 查看信息
INFO # 服务器信息
INFO memory # 内存信息
CONFIG GET * # 配置信息
数据库备份与恢复
1. MySQL备份恢复
备份数据库
# 备份单个数据库
mysqldump -u root -p database_name > backup.sql
# 备份所有数据库
mysqldump -u root -p --all-databases > all_databases.sql
# 备份特定表
mysqldump -u root -p database_name table_name > table_backup.sql
# 压缩备份
mysqldump -u root -p database_name | gzip > backup.sql.gz
# 自动化备份脚本
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
mysqldump -u root -p$MYSQL_PASSWORD myapp > /backup/myapp_$DATE.sql
gzip /backup/myapp_$DATE.sql
find /backup -name "myapp_*.sql.gz" -mtime +7 -delete
恢复数据库
# 恢复数据库
mysql -u root -p database_name < backup.sql
# 恢复压缩备份
gunzip < backup.sql.gz | mysql -u root -p database_name
# 创建数据库并恢复
mysql -u root -p -e "CREATE DATABASE newdb;"
mysql -u root -p newdb < backup.sql
2. PostgreSQL备份恢复
备份数据库
# 备份单个数据库
pg_dump -U postgres database_name > backup.sql
# 备份所有数据库
pg_dumpall -U postgres > all_databases.sql
# 压缩备份
pg_dump -U postgres database_name | gzip > backup.sql.gz
# 二进制格式备份
pg_dump -U postgres -Fc database_name > backup.dump
恢复数据库
# 恢复SQL格式备份
psql -U postgres database_name < backup.sql
# 恢复二进制格式备份
pg_restore -U postgres -d database_name backup.dump
# 恢复压缩备份
gunzip < backup.sql.gz | psql -U postgres database_name
3. Redis备份恢复
Redis备份
# 手动保存
redis-cli BGSAVE
# 复制RDB文件
sudo cp /var/lib/redis/dump.rdb /backup/redis_backup_$(date +%Y%m%d).rdb
# 导出数据
redis-cli --rdb backup.rdb
# 备份脚本
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
redis-cli BGSAVE
sleep 5
cp /var/lib/redis/dump.rdb /backup/redis_$DATE.rdb
Redis恢复
# 停止Redis服务
sudo systemctl stop redis-server
# 替换RDB文件
sudo cp /backup/redis_backup.rdb /var/lib/redis/dump.rdb
sudo chown redis:redis /var/lib/redis/dump.rdb
# 启动Redis服务
sudo systemctl start redis-server
数据库性能优化
1. MySQL性能优化
配置优化
# my.cnf优化配置
[mysqld]
# InnoDB优化
innodb_buffer_pool_size = 1G # 设置为内存的70-80%
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table = 1
# 查询缓存
query_cache_type = 1
query_cache_size = 128M
# 连接优化
max_connections = 200
thread_cache_size = 16
table_open_cache = 2000
# 临时表优化
tmp_table_size = 64M
max_heap_table_size = 64M
索引优化
-- 查看慢查询
SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'long_query_time';
-- 分析查询
EXPLAIN SELECT * FROM users WHERE email = 'user@example.com';
-- 创建索引
CREATE INDEX idx_email ON users(email);
CREATE INDEX idx_name_email ON users(name, email);
-- 查看索引使用情况
SHOW INDEX FROM users;
2. PostgreSQL性能优化
配置优化
# postgresql.conf优化
shared_buffers = 256MB # 设置为内存的25%
effective_cache_size = 1GB # 设置为内存的75%
work_mem = 4MB
maintenance_work_mem = 64MB
checkpoint_completion_target = 0.9
wal_buffers = 16MB
default_statistics_target = 100
查询优化
-- 分析查询计划
EXPLAIN ANALYZE SELECT * FROM users WHERE email = 'user@example.com';
-- 创建索引
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_users_name_email ON users(name, email);
-- 更新统计信息
ANALYZE users;
-- 查看索引使用情况
SELECT schemaname, tablename, indexname, idx_scan, idx_tup_read, idx_tup_fetch
FROM pg_stat_user_indexes;
数据库安全
1. 访问控制
MySQL安全配置
-- 删除匿名用户
DELETE FROM mysql.user WHERE User='';
-- 删除测试数据库
DROP DATABASE IF EXISTS test;
-- 禁用远程root登录
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
-- 设置强密码策略
INSTALL PLUGIN validate_password SONAME 'validate_password.so';
SET GLOBAL validate_password.policy = STRONG;
PostgreSQL安全配置
# 修改默认端口
port = 5433
# 限制连接
listen_addresses = 'localhost'
max_connections = 50
# SSL配置
ssl = on
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'
2. 数据加密
传输加密
# MySQL SSL配置
[mysqld]
ssl-ca=/etc/mysql/ssl/ca-cert.pem
ssl-cert=/etc/mysql/ssl/server-cert.pem
ssl-key=/etc/mysql/ssl/server-key.pem
# PostgreSQL SSL配置
ssl = on
ssl_cert_file = '/etc/ssl/certs/server.crt'
ssl_key_file = '/etc/ssl/private/server.key'
总结
数据库管理要点:
- 数据库选择:根据应用需求选择合适的数据库系统
- 安装配置:正确安装和配置数据库服务
- 用户管理:合理设置用户权限,遵循最小权限原则
- 备份策略:建立定期备份机制,确保数据安全
- 性能优化:调整配置参数,优化查询性能
- 安全加固:实施访问控制和数据加密措施
下一课预告
在下一课中,我们将学习Linux安全配置,包括:
- 系统安全加固
- 防火墙配置
- 入侵检测
- 安全审计
💡 小贴士:数据库是应用系统的核心组件。建议定期备份数据,监控数据库性能,及时应用安全补丁,确保数据库稳定可靠运行。
📚 文章对你有帮助?请关注我的公众号,万分感谢!
获取更多优质技术文章,第一时间掌握最新技术动态

关注公众号
第一时间获取最新技术文章

添加微信
技术交流 · 问题答疑 · 学习指导
评论讨论
欢迎留下你的想法和建议