首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Linux cgroups 限制 MySQL Enterprise Backup I/O 佔用:防備份拖垮線上服務

     編輯:MySQL 資料庫相關知識

場景

MySQL Enterprise Backup (mysqlbackup) 執行時 I/O 暴增,擠佔線上業務資源,導致應用響應緩慢甚至不可用。mysqlbackup 內建 --read-threads/--write-threads/--limit-bytes-per-sec 但效果有限。

方案:blkio cgroup 限流

Linux Control Groups (cgroups) blkio 子系統可精確限制進程組的塊設備 I/O 頻率 (IOPS) 或吞吐 (BPS)。

實戰步驟

1. 掛載 blkio cgroup

mkdir -p /cgroup/blkio
mount -t cgroup -o blkio none /cgroup/blkio

2. 建立 mysqlbackup 控制組

cgcreate -g blkio:/mysqlbackup

3. 確認目標設備 major:minor 號

ls -l /dev/mapper/vgdb01-lvdb01
# lrwxrwxrwx 1 root root 7 Sep 26 14:22 /dev/mapper/vgdb01-lvdb01 -> ../dm-2

ls -l /dev/dm-2
# brw-rw---- 1 root disk 253, 2 Sep 26 14:22 /dev/dm-2
# major=253, minor=2

4. 設定讀寫 IOPS 限制

# 限制讀寫各 20 IOPS
cgset -r blkio.throttle.read_iops_device="253:2 20" mysqlbackup
cgset -r blkio.throttle.write_iops_device="253:2 20" mysqlbackup

5. 將當前 Shell 納入控制組(後續啟動的子進程繼承)

echo $$ > /cgroup/blkio/mysqlbackup/tasks
# 驗證
cat /proc/$$/cgroup
# 1:blkio:/mysqlbackup

6. 執行備份

mysqlbackup --user=root --password=xxxxxx --with-timestamp --backup-dir=/data/backup backup

驗證效果

  • iostat -x 1 觀察目標設備 r/s、w/s 穩定在 20 左右
  • 線上業務響應時間恢復正常
  • 備份時間延長但可接受(以換取業務穩定)

進階配置:吞吐限制 (BPS)

# 限制讀寫各 10 MB/s
cgset -r blkio.throttle.read_bps_device="253:2 10485760" mysqlbackup
cgset -r blkio.throttle.write_bps_device="253:2 10485760" mysqlbackup

systemd 整合(生產環境推薦)

# /etc/systemd/system/mysqlbackup.service
[Unit]
Description=MySQL Enterprise Backup with I/O Throttling
After=network.target

[Service]
Type=oneshot
ExecStartPre=/usr/local/bin/setup_backup_cgroup.sh
ExecStart=/usr/bin/mysqlbackup --user=root --password=xxxxxx --backup-dir=/data/backup backup
ExecStopPost=/usr/local/bin/cleanup_backup_cgroup.sh

[Install]
WantedBy=multi-user.target
#!/bin/bash
# setup_backup_cgroup.sh
CGROUP_PATH="/sys/fs/cgroup/blkio/mysqlbackup"
mkdir -p $CGROUP_PATH
echo "253:2 20" > $CGROUP_PATH/blkio.throttle.read_iops_device
echo "253:2 20" > $CGROUP_PATH/blkio.throttle.write_iops_device
echo $$ > $CGROUP_PATH/tasks

替代方案對比

方案優點缺點推薦場景
cgroups blkio內核級強制限制、精確、無需修改應用需 root、僅限 Linux、不支援網路/NFS 設備物理機/VM 本地盤備份限流
mysqlbackup 內建限速跨平台、無需 root精度低、易被繞過、進程內部排隊簡單場景、無 root 權限
ionice簡單、標準工具需 CFQ 調度器、僅優先級無硬限制舊內核、CFQ 環境
tc/qdisc (網路限速)支援網路存儲複雜、延遲高NFS/iSCSI 備份

注意事項

  1. 設備號會變:重啟後 dm-X 編號可能改變,腳本需動態解析
  2. 多設備:資料、日誌、備份目錄在不同設備需分別限制
  3. 備份一致性:過度限流導致備份極慢,可能超過 InnoDB 歷史版本保留窗口,建議最低 50-100 IOPS
  4. 監控告警:備份耗時超過閾值告警
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved