公司的MySQL服务器定时在凌晨4:00准时开始备份。
结果是会触发报警,net流量增高,cpu增高,磁盘io增高,这个是属于正常的,如何避免触发警报呢?
有4种方法:
一、优化io和cpu,让备份写磁盘的速度降下来,平稳的写入
1nice -n 10 ionice -c2 -n 7 /usr/bin/mysqldump -S /var/lib/mysql/mysql.sock -uroot --single-transaction --quick\
2 --triggers -R --hex-blob --log-error=$db.log --databases $db > $basedir/$backdir/$db.sql
二、加快备份速度,多线程,让报警触发之前就结束备份
1COMMIT_COUNT=0
2COMMIT_LIMIT=10
3for DB in `cat ListOfDatabases.txt`
4do
5 mysqldump -h... -u... -p... --hex-blob --routines --triggers ${DB} | gzip > ${DB}.sql.gz &
6 (( COMMIT_COUNT++ ))
7 if [ ${COMMIT_COUNT} -eq ${COMMIT_LIMIT} ]
8 then
9 COMMIT_COUNT=0
10 wait
11 fi
12done
13if [ ${COMMIT_COUNT} -gt 0 ]
14then
15 wait
16fi
三、用cstream来控制流速
-t = throughput in bytes/sec 1000000是一兆,每秒只允许写一兆
1mysqldump --single-transaction --quick -u <USER> -p<PASS> <Database> | cstream -t 1000000 > backup.sql
四、用pv来控制流速
–rate-limit Limit the transfer to a maximum of RATE bytes per second. 单位可以是:1k 1m 1g 1t
1mysqldump --single-transaction --quick -u -p | pv --rate-limit 1m > db.sql