先说结论:别手抖! 这篇教程把踩坑记录全写出来,照着抄基本能一遍过。关键词: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/TCP
、33106/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 常见翻车点 & 吐槽
- 忘记放行 22102: rsync 报 broken pipe,阿里云安全组 + 备份机防火墙一起查。
- 密码带特殊字符: 备份脚本里记得加引号,不然 mysqldump 直接罢工。
- msmtp 发不出邮件: 163 邮箱要开 SMTP 授权码,不是登录密码!
- innodb_buffer_pool_size 超过 1G: 2G 机器直接 OOM,MySQL 重启比心跳还快。
0x0A 一键总结
2C2G 的小水管想跑 MySQL8.0 还能异地双备份,核心就是删、减、删:删阿里云全家桶、减内存占用、删老旧备份。照着做,稳!
关键词再点一次:Debian12 MySQL8.0 优化、2120 IOPS 调优、内网数据库服务器、阿里云卸载安骑士、异地双备份脚本,SEO 应该够用了。
祝各位永不删库跑路,跑路也别忘了带走备份。
没有回复内容