FreeBSD 下的 MySQL 备份方案
生活随笔
收集整理的這篇文章主要介紹了
FreeBSD 下的 MySQL 备份方案
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
作/譯者:葉金榮(Email: ),來(lái)源:http://imysql.cn,轉(zhuǎn)載請(qǐng)注明作/譯者和出處,并且不能用于商業(yè)用途,違者必究。 核心提示:如何在 FreeBSD 下實(shí)現(xiàn) MySQL 的全量及增量備份,確保數(shù)據(jù)的最大可靠性。在這里利用了 MySQL 的復(fù)制以及新版本的 FreeBSD 集成的快照功能。 約定:本備份方案是在 MySQL 的 復(fù)制從服務(wù)器 上執(zhí)行。關(guān)于 MySQL 的復(fù)制設(shè)置方法請(qǐng)看 MySQL 同步(一)。MySQL 安裝在 /usr/local/mysql 下,datadir 則為 /data/mysql,而日志以及 innodb 的 log_file 均保存在 /logs/mysql/ 下。用于保存?zhèn)浞菸募哪夸洖?/backup/mysql/,備份方案分成 每天全量備份 一次以及 每小時(shí)增量備份 一次。因此,如果 MySQL 發(fā)生誤操作以及其他情況導(dǎo)致數(shù)據(jù)丟失,那么在采用本方案的情況下,最壞的情況只會(huì)丟失不到一個(gè)小時(shí)所產(chǎn)生的數(shù)據(jù)。當(dāng)然了,也可以實(shí)現(xiàn)實(shí)時(shí)增量備份,這會(huì)在以后的文章中講到。 一、全量備份
先來(lái)看看全量備份的腳本:#!/bin/sh # # created by yejr,2007/06/03 # # 本腳本用于定期做全量備份,備份的對(duì)象是slave上的全部數(shù)據(jù) # 每次備份之前都先執(zhí)行"STOP SLAVE; FLUSH TABLES;",然后將所有文件拷貝到備份目錄下 # echo "[backupmysql_fullly]" date today=`date +"%Y_%m_%d"` logdir=/logs/mysql datadir=/data/mysql bkdir=/backup/mysql/$today/full_backup expdays=7 if [ ! -d $bkdir/$today ] ; thenmkdir -p $bkdir fi #停止同步,刷新日志,刷新表 echo "stop slave; flush logs; flush tables;" mysqladmin -uroot stop-slave mysqladmin -uroot flush-logs mysqladmin -uroot flush-tables cd $logdir #備份日志文件 echo "backup errro log" cp $logdir/error.log* $bkdir/ echo "backup ib_logfile* master.info relay.info" cp ib_logfile* master.info relay.info $bkdir/ #拷貝所有文件 echo "backup my.cnf" cp /usr/local/mysql/my.cnf $bkdir/ ##如果是老版本的 FreeBSD 不支持快照功能,就拷貝全部數(shù)據(jù)庫(kù)文件 #cd $datadir #cp -rf * $bkdir/ ##如果是新版本的 FreeBSD,則采用其特有的 snapshot 功能,先制作鏡像,而后掛載鏡像,再拷貝數(shù)據(jù)文件 echo "make snapshot of /backup" /sbin/mksnap_ffs /data/ /data/.snap/mysql_snap_$today #執(zhí)行 slave-start; mysqladmin -uroot start-slave #掛載鏡像文件,而后拷貝數(shù)據(jù) /sbin/mdconfig -a -t vnode -f /data/.snap/mysql_snap_$today -u 4 /sbin/mount -r /dev/md4 /backup/.snap cp -rf /backup/.snap/mysql/data/* $bkdir/ /sbin/umount /backup/.snap /sbin/mdconfig -d -u 4 #刪除7天前的過(guò)期文件 find /backup/mysql -type d -mtime +$expdays -maxdepth 1 | xargs rm -rf find /data/.snap -type f -mtime +$expdays -maxdepth 1 | xargs rm -f #修改備份文件的屬主 chown -R nobody:nobody $bkdir echo "[/backupmysql_fullly]" 接下來(lái)就是在 crontab 中增加一條記錄,使得每天都執(zhí)行本備份腳本。0 0 * * * (/bin/sh /backup/mysql/backupmysql_fullly.sh >> /backup/mysql/backupmysql.log) 二、增量備份
下面是增量備份的腳本:#!/bin/sh # # created by yejr,2007/06/03 # # 本腳本用于定期做增量備份,備份的對(duì)象是binlog # 每次備份之前都先執(zhí)行 flush-logs,然后將最近的binlog移動(dòng)到備份目錄下 # echo "[backupmysql_hourly]" date logdir=/logs/mysql bkdir=/backup/mysql now=`date +"%Y_%m_%d_%H"` today=`date +"%Y_%m_%d"` if [ ! -d $bkdir/$today ] ; thenmkdir -p $bkdir/$today fi #執(zhí)行 "flush logs" echo "flush logs; backup error log" mysqladmin -uroot flush-logs #去的 binlog 文件總數(shù),去掉最后一個(gè)以及 binlog.index total=`ls $logdir/logbin.*|wc -l` total=`expr $total - 2` #循環(huán)移動(dòng)所有的 binlog 文件 echo "backup binary logs" for f in `ls $logdir/logbin.*|head -n $total` dobf=`basename $f`mv -if $f $bkdir/$today/$bf done chown -R nobody:nobody $bkdir echo "[/backupmysql_hourly]" 然后在 crontab 中增加一條記錄,使得每小時(shí)都執(zhí)行本備份腳本。0 */` * * * (/bin/sh /backup/mysql/backupmysql_hourly.sh >> /backup/mysql/backupmysql.log) 在 linux 下,也可以采用本備份方案,不過(guò)執(zhí)行的是不支持 snapshot 情況下的備份策略,即拷貝所有文件。或者,也可以利用 linux 自帶的 lvm 功能實(shí)現(xiàn)類似 FreeBSD 的快照功能。
以上腳本在 FreeBSD 6.2 + MySQL 5.0.37 環(huán)境下實(shí)驗(yàn)通過(guò)。 本文出自 “MySQL中文網(wǎng)”博客 http://www.imysql.cn/ 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)
先來(lái)看看全量備份的腳本:#!/bin/sh # # created by yejr,2007/06/03 # # 本腳本用于定期做全量備份,備份的對(duì)象是slave上的全部數(shù)據(jù) # 每次備份之前都先執(zhí)行"STOP SLAVE; FLUSH TABLES;",然后將所有文件拷貝到備份目錄下 # echo "[backupmysql_fullly]" date today=`date +"%Y_%m_%d"` logdir=/logs/mysql datadir=/data/mysql bkdir=/backup/mysql/$today/full_backup expdays=7 if [ ! -d $bkdir/$today ] ; thenmkdir -p $bkdir fi #停止同步,刷新日志,刷新表 echo "stop slave; flush logs; flush tables;" mysqladmin -uroot stop-slave mysqladmin -uroot flush-logs mysqladmin -uroot flush-tables cd $logdir #備份日志文件 echo "backup errro log" cp $logdir/error.log* $bkdir/ echo "backup ib_logfile* master.info relay.info" cp ib_logfile* master.info relay.info $bkdir/ #拷貝所有文件 echo "backup my.cnf" cp /usr/local/mysql/my.cnf $bkdir/ ##如果是老版本的 FreeBSD 不支持快照功能,就拷貝全部數(shù)據(jù)庫(kù)文件 #cd $datadir #cp -rf * $bkdir/ ##如果是新版本的 FreeBSD,則采用其特有的 snapshot 功能,先制作鏡像,而后掛載鏡像,再拷貝數(shù)據(jù)文件 echo "make snapshot of /backup" /sbin/mksnap_ffs /data/ /data/.snap/mysql_snap_$today #執(zhí)行 slave-start; mysqladmin -uroot start-slave #掛載鏡像文件,而后拷貝數(shù)據(jù) /sbin/mdconfig -a -t vnode -f /data/.snap/mysql_snap_$today -u 4 /sbin/mount -r /dev/md4 /backup/.snap cp -rf /backup/.snap/mysql/data/* $bkdir/ /sbin/umount /backup/.snap /sbin/mdconfig -d -u 4 #刪除7天前的過(guò)期文件 find /backup/mysql -type d -mtime +$expdays -maxdepth 1 | xargs rm -rf find /data/.snap -type f -mtime +$expdays -maxdepth 1 | xargs rm -f #修改備份文件的屬主 chown -R nobody:nobody $bkdir echo "[/backupmysql_fullly]" 接下來(lái)就是在 crontab 中增加一條記錄,使得每天都執(zhí)行本備份腳本。0 0 * * * (/bin/sh /backup/mysql/backupmysql_fullly.sh >> /backup/mysql/backupmysql.log) 二、增量備份
下面是增量備份的腳本:#!/bin/sh # # created by yejr,2007/06/03 # # 本腳本用于定期做增量備份,備份的對(duì)象是binlog # 每次備份之前都先執(zhí)行 flush-logs,然后將最近的binlog移動(dòng)到備份目錄下 # echo "[backupmysql_hourly]" date logdir=/logs/mysql bkdir=/backup/mysql now=`date +"%Y_%m_%d_%H"` today=`date +"%Y_%m_%d"` if [ ! -d $bkdir/$today ] ; thenmkdir -p $bkdir/$today fi #執(zhí)行 "flush logs" echo "flush logs; backup error log" mysqladmin -uroot flush-logs #去的 binlog 文件總數(shù),去掉最后一個(gè)以及 binlog.index total=`ls $logdir/logbin.*|wc -l` total=`expr $total - 2` #循環(huán)移動(dòng)所有的 binlog 文件 echo "backup binary logs" for f in `ls $logdir/logbin.*|head -n $total` dobf=`basename $f`mv -if $f $bkdir/$today/$bf done chown -R nobody:nobody $bkdir echo "[/backupmysql_hourly]" 然后在 crontab 中增加一條記錄,使得每小時(shí)都執(zhí)行本備份腳本。0 */` * * * (/bin/sh /backup/mysql/backupmysql_hourly.sh >> /backup/mysql/backupmysql.log) 在 linux 下,也可以采用本備份方案,不過(guò)執(zhí)行的是不支持 snapshot 情況下的備份策略,即拷貝所有文件。或者,也可以利用 linux 自帶的 lvm 功能實(shí)現(xiàn)類似 FreeBSD 的快照功能。
以上腳本在 FreeBSD 6.2 + MySQL 5.0.37 環(huán)境下實(shí)驗(yàn)通過(guò)。 本文出自 “MySQL中文網(wǎng)”博客 http://www.imysql.cn/ 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)
總結(jié)
以上是生活随笔為你收集整理的FreeBSD 下的 MySQL 备份方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: NHibernate for .NET
- 下一篇: 使用SQL语句获取SQL Server数