2核2G Debian12 内网 MySQL8.0 超细优化血泪史:2120 IOPS榨干、阿里云全家桶卸载、异地双备份一键搞定 - 技术宅银魂 - 科技改变生活 - 万事屋 | 生活·动漫·娱乐综合社区-银魂同好聚集地

2核2G Debian12 内网 MySQL8.0 超细优化血泪史:2120 IOPS榨干、阿里云全家桶卸载、异地双备份一键搞定

先说结论:别手抖! 这篇教程把踩坑记录全写出来,照着抄基本能一遍过。关键词:Debian12 MySQL8.0 优化、2120 IOPS 调优、内网数据库服务器、阿里云卸载安骑士、异地双备份脚本,整篇文章关键词密度≈3%,SEO 长尾词也顺手埋了,放心食用。


0x00 前置条件

  • 一台 2C2G 的 Debian12 小鸡:192.168.0.2,系统盘号称有 2120 IOPS(实测 2000 出头,别信宣传)。
  • 内网另一台备份机:192.168.0.3,端口 22102 走 SSH。
  • 本地电脑能 SSH 登录,已把公钥扔服务器。
  • 阿里云安全组已放行 53768/TCP33106/TCP,其余端口全部关死。

吐槽:阿里云“一键安全”其实一键添堵,安骑士、云盾、云助手全是吃内存大户,2G 机器跑个 MySQL 再开这几个货直接 OOM,必须卸!


0x01 SSH 改端口 & 干掉自带防火墙

# 1. 先别急着关防火墙,先开新端口,防止失联
sudo sed -i 's/#Port 22/Port 53768/' /etc/ssh/sshd_config
sudo systemctl restart ssh

# 2. 确认能连上 53768 后,再关防火墙
sudo systemctl stop ufw
sudo systemctl disable ufw
sudo apt purge ufw -y

阿里云安全组已接管,本地防火墙直接卸载,省 10M 内存。


0x02 卸载阿里云全家桶(安骑士/云盾/云助手)

# 一次性卸载,爽!
sudo systemctl stop aliyun.service
sudo systemctl disable aliyun.service
sudo rm -rf /usr/local/aegis* /usr/local/cloudmonitor /etc/init.d/aegis
sudo rm -rf /etc/systemd/system/aliyun*
sudo apt purge aliyun-assist aliyun-cli -y

重启确认:ps aux | grep -E 'aegis|aliyun' 没进程就成功。


0x03 安装 MySQL 8.0(官方 APT 源)

# 官方源比 Debian 自带的新
wget https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.29-1_all.deb   # 选 8.0
sudo apt update
sudo apt install -y mysql-server

安装完先别启动,先把配置写了。


0x04 根据 2120 IOPS 调优 my.cnf

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

把下面整段粘进去,2G 内存千万别乱改!

[mysqld]
# 基础
bind-address = 192.168.0.2
port = 33106
user = mysql
default_authentication_plugin = mysql_native_password

# 2120 IOPS 优化
innodb_buffer_pool_size = 768M          # 内存 35% 左右
innodb_log_file_size = 128M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_io_capacity = 2000
innodb_io_capacity_max = 3000

# 其它省内存
skip_name_resolve = 1
performance_schema = OFF
max_connections = 50
key_buffer_size = 32M
tmp_table_size = 32M
max_heap_table_size = 32M

保存后:

sudo systemctl restart mysql
sudo systemctl enable mysql

0x05 账号权限:只允许 192.168.0.3 来访

sudo mysql -uroot -p
-- root 仅本地
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的超复杂密码';

-- 给业务账号,只允许 192.168.0.3
CREATE USER IF NOT EXISTS 'app'@'192.168.0.3' IDENTIFIED WITH mysql_native_password BY '业务密码';
GRANT ALL PRIVILEGES ON *.* TO 'app'@'192.168.0.3';
FLUSH PRIVILEGES;

退出后用备份机验证:

mysql -h192.168.0.2 -P33106 -uapp -p

0x06 备份脚本 & 异地双留存

6.1 安装依赖

sudo apt install zip mailutils msmtp -y

6.2 备份脚本 /usr/local/bin/mysql_backup.sh

#!/bin/bash
# 变量
BACKUP_DIR="/www/bak/db"
REMOTE_HOST="192.168.0.3"
REMOTE_PORT="22102"
REMOTE_DIR="/www/bak/mysql"
RETAIN_DAYS=3
ZIP_PASS="12345678"
SMTP_TO="123@163.com"

# 创建本地目录
mkdir -p "$BACKUP_DIR"
cd "$BACKUP_DIR"

# 备份每个库
for DB in $(mysql -uroot -p'你的超复杂密码' -e "show databases;" | grep -Ev "(Database|information_schema|performance_schema|mysql|sys)"); do
    DATE=$(date +%F-%H%M%S)
    FILE="${DB}_${DATE}.sql"
    zip -P "$ZIP_PASS" "${FILE}.zip" <(mysqldump -uroot -p'你的超复杂密码' --single-transaction --routines --triggers "$DB")
    rm -f "$FILE"
done

# 发送到远端
rsync -avz -e "ssh -p $REMOTE_PORT" ./* root@$REMOTE_HOST:$REMOTE_DIR/

# 两边各留三天
find "$BACKUP_DIR" -type f -mtime +$RETAIN_DAYS -delete
ssh -p $REMOTE_PORT root@$REMOTE_HOST "find $REMOTE_DIR -type f -mtime +$RETAIN_DAYS -delete"

# 邮件通知
echo "MySQL backup $(date +%F) done" | msmtp "$SMTP_TO"

6.3 给脚本权限并定时

sudo chmod +x /usr/local/bin/mysql_backup.sh
sudo crontab -e
0 1 * * * /usr/local/bin/mysql_backup.sh >>/var/log/mysql_backup.log 2>&1

0x07 msmtp 发邮件配置

sudo nano /etc/msmtprc
defaults
auth on
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile /var/log/msmtp.log

account default
host smtp.163.com
port 465
from 123@163.com
user 123@163.com
password 你的邮箱授权码

测试:

echo "test" | msmtp 123@163.com

0x08 重启验证

sudo reboot
  • 确认端口 53768 能连上。
  • 确认 MySQL 端口 33106 只接受 192.168.0.3。
  • 确认备份脚本第二天凌晨 1 点有文件。

0x09 常见翻车点 & 吐槽

  1. 忘记放行 22102: rsync 报 broken pipe,阿里云安全组 + 备份机防火墙一起查。
  2. 密码带特殊字符: 备份脚本里记得加引号,不然 mysqldump 直接罢工。
  3. msmtp 发不出邮件: 163 邮箱要开 SMTP 授权码,不是登录密码!
  4. innodb_buffer_pool_size 超过 1G: 2G 机器直接 OOM,MySQL 重启比心跳还快。

0x0A 一键总结

2C2G 的小水管想跑 MySQL8.0 还能异地双备份,核心就是删、减、删:删阿里云全家桶、减内存占用、删老旧备份。照着做,稳!

关键词再点一次:Debian12 MySQL8.0 优化、2120 IOPS 调优、内网数据库服务器、阿里云卸载安骑士、异地双备份脚本,SEO 应该够用了。

祝各位永不删库跑路,跑路也别忘了带走备份。

请登录后发表评论

    没有回复内容

万事屋新帖