当前位置:首页 > 随笔 > 正文内容

MySQL与Redis核心配置及实战应用指南

访客 随笔 2026年7月12日 1

数据库系统部署与优化

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

数据目录迁移注意事项

当需要变更数据存储路径时,需注意以下关键点:

  1. 确保目标目录归属mysql用户:
    chown -R mysql:mysql /new/data/path
  2. SELinux环境下的上下文设置:
    semanage fcontext -a -t mysqld_db_t "/new/data/path(/.*)?"
    restorecon -R /new/data/path
  3. 更新配置文件中的datadir参数
  4. 重启服务验证状态

主从复制架构

主服务器配置(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"

相关文章

可以按小时收费的VPS

很多 VPS 提供商都支持 按小时计费(hourly billing),想短期试用 / 临时搭建节点、测试网络、短期项目等场景非常合适。下面是当前最主流且靠谱的按小时 VPS 选项,分别按不同需求场景整理: 1. Vultr(全球节点,包括日本) 按小时计费 可选机房:东京 / 大阪 / 洛杉矶 / 法兰克福 / 伦敦 … 支持 PayPal(部分情况),但更常用信用卡/PayPal+卡价格参考$...

在 iPhone 上下载国外App

地区/国家限制App Store 会根据 Apple ID 的国家或地区限制应用下载。如果你的 Apple ID 绑定的是中国大陆,就可能无法下载 OpenAI 官方的 ChatGPT 应用,因为它在大陆 App Store 不上架。解决办法:换成美国、加拿大、香港等地区的 Apple ID。或者在现有 Apple ID 上更改地区。注册一个国外 Apple ID(推荐)比如注册 美国区 Appl...

Node.js 中的异步编程:回调与 Promise

Node.js 是一个基于 JavaScript 构建的单线程、非阻塞运行环境,它通过异步编程机制来高效处理多个操作。在执行如文件读取、API 请求或数据库查询等任务时,Node.js 不会等待这些操作完成,而是使用回调函数和 Promise 来避免阻塞主线程。 回调方式实现异步 那么当异步操作完成后,Node.js 如何知道接下来要做什么呢?这就要用到 回调函数(callback)。 回调本质上...

MariaDB Galera集群故障快速恢复指南

OpenStack控制节点采用三节点MariaDB Galera集群架构。当数据库集群因故障重启时,有时会出现Galera集群无法正常启动的问题。虽然有多种方法可以恢复数据库服务,但如何实现快速启动同时确保数据完整性呢? 通过分析日志发现,MariaDB Galera集群节点宕机时会在日志中输出以下信息: [Note] WSREP: 新集群视图:全局状态: 874d8e7e-5980-11e8-8...

Android 中 EventBus 的通信机制与实现原理深度解析

EventBus 核心设计思想 EventBus 是一个基于观察者模式的事件总线框架,广泛应用于 Android 平台以实现组件解耦。它通过中心化的消息分发机制,使不同层级、不同线程的对象能够以"发布-订阅"方式通信,避免了传统接口回调或广播带来的强依赖问题。 核心角色说明 事件(Event):任意 Java 对象,作为数据载体,如网络状态变更通知、用户登录信息等。 发布者(Publi...

二叉树基础操作实现(C语言)

二叉树基础操作实现(C语言)

二叉树遍历方法 以下为二叉树结构示例 前序访问实现: void traversePreOrder(TreeNode* node) { if (node == NULL) { printf("N "); return; } printf("%d ", node->value); trave...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。