MySQL与Redis核心配置及实战应用指南
数据库系统部署与优化
MySQL/MariaDB安装配置
在Linux环境下推荐使用官方YUM源进行MariaDB安装,避免因镜像源版本过旧导致功能缺失。创建专属的仓库配置文件:
sudo vi /etc/yum.repos.d/mariadb.repo
添加如下配置内容:
[mariadb]
name=MariaDB Server
baseurl=https://downloads.mariadb.org/mariadb/repositories/mariadb-10.6/centos7-amd64
gpgkey=https://downloads.mariadb.org/mariadb/RPM-GPG-KEY-MariaDB
gpgcheck=1
enabled=1
执行安装命令:
sudo yum install MariaDB-server MariaDB-client -y
服务管理指令:
# 启动服务
sudo systemctl start mariadb
# 设置开机自启
sudo systemctl enable mariadb
# 重启服务
sudo systemctl restart mariadb
安全初始化配置
首次安装后应立即执行安全向导:
mysql_secure_installation
该命令将引导完成以下操作:
- 设置root账户密码
- 移除匿名用户访问权限
- 禁止远程root登录
- 删除测试数据库
- 刷新权限表
用户权限管理
权限分配遵循最小必要原则,基本语法结构为:
GRANT 权限类型 ON 数据库对象 TO '用户名'@'客户端地址' IDENTIFIED BY '密码';
常见授权示例:
-- 授予特定数据库全部权限
GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'192.168.1.%';
-- 只读权限分配
GRANT SELECT ON reportdb.* TO 'reporter'@'%';
-- 远程管理账号
GRANT RELOAD,PROCESS ON *.* TO 'admin'@'10.0.0.%';
权限修改后需执行:
FLUSH PRIVILEGES;
数据备份与恢复
使用mysqldump工具进行逻辑备份:
# 全库备份
mysqldump -u root -p --all-databases > full_backup.sql
# 单库备份
mysqldump -u root -p myapp > myapp.sql
# 恢复数据
mysql -u root -p < backup.sql
字符集配置
编辑/etc/my.cnf文件,在对应段落添加:
[client]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init-connect='SET NAMES utf8mb4'
[mysql]
default-character-set=utf8mb4
数据目录迁移注意事项
当需要变更数据存储路径时,需注意以下关键点:
- 确保目标目录归属mysql用户:
chown -R mysql:mysql /new/data/path - SELinux环境下的上下文设置:
semanage fcontext -a -t mysqld_db_t "/new/data/path(/.*)?"
restorecon -R /new/data/path - 更新配置文件中的datadir参数
- 重启服务验证状态
主从复制架构
主服务器配置(my.cnf):
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-format=row
expire_logs_days=7
从服务器配置:
[mysqld]
server-id=2
relay-log=relay-bin
read-only=1
主库创建同步账号:
CREATE USER 'repl'@'%' IDENTIFIED BY 'StrongPass123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
从库启动复制:
CHANGE MASTER TO
MASTER_HOST='master_ip',
MASTER_USER='repl',
MASTER_PASSWORD='StrongPass123!',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
START SLAVE;
NoSQL缓存系统
Redis部署方案
通过编译方式安装最新稳定版:
wget http://download.redis.io/releases/redis-7.0.12.tar.gz
tar xzf redis-7.0.12.tar.gz
cd redis-7.0.12
make && sudo make install
核心配置参数
主要可执行程序:
- redis-server:服务守护进程
- redis-cli:命令行客户端
- redis-sentinel:高可用监控
典型配置文件(redis.conf):
# 网络绑定
bind 0.0.0.0
port 6379
# 安全设置
requirepass YourStrongPassword123!
protected-mode yes
# 持久化策略
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfsync everysec
# 内存管理
maxmemory 2gb
maxmemory-policy allkeys-lru
# 日志与进程
daemonize yes
pidfile /var/run/redis_6379.pid
logfile /var/log/redis/redis-server.log
dir /var/lib/redis
数据类型与操作
五种基础数据结构:
| 类型 | 描述 | 典型应用场景 |
|---|---|---|
| String | 二进制安全字符串 | 缓存、计数器 |
| Hash | 键值对集合 | 对象存储 |
| List | 有序字符串列表 | 消息队列 |
| Set | 无序唯一元素集合 | 标签系统 |
| ZSet | 有序集合 | 排行榜 |
高级特性应用
分布式锁实现:
import redis
import time
def acquire_lock(conn, lock_name, acquire_timeout=10):
identifier = str(uuid.uuid4())
end = time.time() + acquire_timeout
while time.time() < end:
if conn.set(lock_name, identifier, nx=True, ex=10):
return identifier
time.sleep(0.001)
return False
延时任务队列:
def add_delayed_task(conn, queue_name, task_data, delay_seconds):
execute_time = time.time() + delay_seconds
conn.zadd(queue_name, {json.dumps(task_data): execute_time})
def process_delayed_tasks(conn, queue_name):
while True:
tasks = conn.zrangebyscore(
queue_name, 0, time.time(), start=0, num=1
)
if not tasks:
time.sleep(1)
continue
task_json = tasks[0]
if conn.zrem(queue_name, task_json):
process_task(json.loads(task_json))
Django集成配置:
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://:password@localhost:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"CONNECTION_POOL_KWARGS": {"max_connections": 50}
}
}
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"
