数据库配置指南

MySQL、PostgreSQL安装配置

本指南将帮助您在VPS上安装和配置数据库服务器。

MySQL数据库

安装MySQL

# Ubuntu/Debian
apt update
apt install mysql-server

# CentOS/AlmaLinux
yum install mysql-server
systemctl enable mysqld
systemctl start mysqld

安全配置

# 运行安全配置脚本
mysql_secure_installation

配置选项说明:

  • 设置root密码
  • 删除匿名用户
  • 禁止root远程登录
  • 删除test数据库

基本操作

-- 登录MySQL
mysql -u root -p

-- 创建数据库
CREATE DATABASE mywebsite;

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

-- 授权
GRANT ALL PRIVILEGES ON mywebsite.* TO 'webuser'@'localhost';
FLUSH PRIVILEGES;

-- 查看数据库
SHOW DATABASES;

-- 使用数据库
USE mywebsite;

配置文件优化

# /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
# 基本设置
bind-address = 127.0.0.1
port = 3306

# 性能优化
innodb_buffer_pool_size = 256M
innodb_log_file_size = 64M
max_connections = 100
query_cache_size = 32M

# 字符集
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

PostgreSQL数据库

安装PostgreSQL

# Ubuntu/Debian
apt update
apt install postgresql postgresql-contrib

# CentOS/AlmaLinux
yum install postgresql-server postgresql-contrib
postgresql-setup initdb
systemctl enable postgresql
systemctl start postgresql

PostgreSQL基本操作

# 切换到postgres用户
sudo -u postgres psql

# 创建数据库
CREATE DATABASE mywebsite;

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

# 授权
GRANT ALL PRIVILEGES ON DATABASE mywebsite TO webuser;

# 退出
\q

配置远程访问

# 编辑配置文件
vim /etc/postgresql/14/main/postgresql.conf

# 修改监听地址
listen_addresses = 'localhost'

# 编辑访问控制
vim /etc/postgresql/14/main/pg_hba.conf

# 添加访问规则
local   all             all                                     md5
host    all             all             127.0.0.1/32            md5

数据库备份

MySQL备份

# 备份单个数据库
mysqldump -u root -p mywebsite > mywebsite_backup.sql

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

# 恢复数据库
mysql -u root -p mywebsite < mywebsite_backup.sql

PostgreSQL备份

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

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

# 恢复数据库
psql -U postgres mywebsite < mywebsite_backup.sql

数据库监控

MySQL监控

-- 查看进程列表
SHOW PROCESSLIST;

-- 查看状态
SHOW STATUS;

-- 查看变量
SHOW VARIABLES;

-- 查看慢查询
SHOW VARIABLES LIKE 'slow_query_log';

PostgreSQL监控

-- 查看活动连接
SELECT * FROM pg_stat_activity;

-- 查看数据库大小
SELECT pg_size_pretty(pg_database_size('mywebsite'));

-- 查看表大小
SELECT schemaname,tablename,pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) as size 
FROM pg_tables ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC;

性能优化

MySQL优化

# 内存优化
innodb_buffer_pool_size = 70% of RAM
key_buffer_size = 256M

# 连接优化
max_connections = 100
thread_cache_size = 16

# 查询优化
query_cache_type = 1
query_cache_size = 64M

PostgreSQL优化

# postgresql.conf
shared_buffers = 256MB
effective_cache_size = 1GB
work_mem = 4MB
maintenance_work_mem = 64MB

安全设置

防火墙配置

# 只允许本地连接
ufw deny 3306  # MySQL
ufw deny 5432  # PostgreSQL

用户权限管理

-- MySQL: 创建只读用户
CREATE USER 'readonly'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT ON mywebsite.* TO 'readonly'@'localhost';

-- PostgreSQL: 创建只读用户
CREATE USER readonly WITH PASSWORD 'password';
GRANT CONNECT ON DATABASE mywebsite TO readonly;
GRANT USAGE ON SCHEMA public TO readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;