Ubuntu 上 MySQL 与其他服务的集成实践
一 基础准备与账户配置
- 安装与初始化
- 更新软件源并安装:sudo apt update && sudo apt install -y mysql-server
- 运行安全初始化:sudo mysql_secure_installation(设置 root 密码、移除匿名用户、禁止远程 root、删除测试库)
- 创建应用专用账户与库
- 登录 MySQL:mysql -u root -p
- 建库与授权(示例账户仅允许应用所在主机访问,生产环境避免使用 % 通配):
- CREATE DATABASE IF NOT EXISTS appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- CREATE USER ‘appuser’@‘192.168.1.10’ IDENTIFIED WITH mysql_native_password BY ‘StrongPass!’;
- GRANT SELECT, INSERT, UPDATE, DELETE ON appdb.* TO ‘appuser’@‘192.168.1.10’;
- FLUSH PRIVILEGES;
- 网络与权限要点
- 配置文件路径:/etc/mysql/mysql.conf.d/mysqld.cnf
- 如需远程访问,将 bind-address 调整为 0.0.0.0,并确保云安全组/防火墙放行 3306;为特定来源主机授权,避免使用 ‘%’ 开放全网。
二 与常见服务的集成方式
- Web/PHP 应用(Apache/PHP)
- 安装组件:sudo apt install -y apache2 php libapache2-mod-php php-mysql
- 重启服务:sudo systemctl restart apache2
- 在 PHP 中使用 mysqli 或 PDO 连接 MySQL(示例 DSN:mysql:host=127.0.0.1;dbname=appdb;charset=utf8mb4)
- 反向代理与负载均衡(Nginx + 应用)
- 安装:sudo apt install -y nginx
- 反向代理示例(/etc/nginx/sites-available/default):
- server { listen 80; server_name your.domain; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
- 重载:sudo systemctl reload nginx
- 缓存层(Redis 读写缓存)
- 安装:sudo apt install -y redis-server
- 建议开启持久化(appendonly yes),并在应用中实现“缓存穿透/击穿/雪崩”策略与 TTL
- 异步任务(Celery 结果后端为 MySQL)
- 安装:pip install celery[mysql]
- 配置示例(result_backend 使用 SQLAlchemy URL):result_backend = ‘db+mysql://appuser:StrongPass!@dbhost:3306/appdb’
- 启动:celery -A tasks worker -l info;定时任务加 celerybeat
- 消息队列(RabbitMQ 解耦写操作)
- 安装:sudo apt install -y rabbitmq-server
- 应用侧将写操作发往队列,消费者写入 MySQL,提升吞吐与可靠性
- 实时数据管道(CDC 变更捕获)
- 以 Debezium + Kafka 捕获 MySQL binlog,写入目标 MySQL 或其他存储,实现异构系统近实时同步。
三 典型集成架构示例
- 三层架构:Nginx → 应用服务(Node.js/Python/Go) → MySQL
- Nginx 负责反向代理与静态资源;应用服务处理业务逻辑与数据访问;MySQL 作为事务型主存储
- 加速与削峰:应用 → Redis 缓存 → MySQL
- 读多写少场景优先命中缓存;缓存失效回源 MySQL 并回填;热点数据设置合理 TTL 与互斥锁
- 异步与解耦:应用 → RabbitMQ/Kafka → 消费者 → MySQL
- 耗时任务(发邮件、生成报表、图片处理)入队;消费者异步写库,缩短接口响应时间
- 实时同步:生产 MySQL → Debezium → Kafka → 目标 MySQL/ES/数据仓
- 低延迟捕获行级变更,支撑搜索索引、实时分析或多活架构。
四 安全与运维要点
- 最小权限与网络隔离
- 应用账户仅授予目标库所需权限;数据库与应用分离部署;仅开放必要端口(如 3306)
- 强认证与加密
- 使用 mysql_native_password 或 caching_sha2_password;开启 SSL/TLS 加密传输(生产建议)
- 安全基线
- 运行 mysql_secure_installation;删除匿名/测试库;限制 root 远程;定期升级补丁
- 备份与恢复
- 逻辑备份:mysqldump -u root -p --databases appdb > backup.sql
- 还原:mysql -u root -p < backup.sql
- 监控与调优
- 监控连接数、慢查询、复制延迟;关键参数示例:innodb_buffer_pool_size(常设为内存的50–70%)、max_connections、合理的索引与 EXPLAIN 分析。