Bugzill 备份

Bugzill 是以mysql作为后台的数据库,所有的数据都存储在mysql中,所以bugzilla的备份最重要的就是对mysql的备份。所以我们先要看一下mysql的备份方法。
 
1. mysqldump
   Myssql 提供了一个 mysqldump 备份命令,这个是安装 mysql 时一起装进系统的,不要另外安装。 具体使用方法:
 
# 对所有的数据库进行备份:
mysqldump �C-all-databases �C-opt  > db.sql
 
# 仅对mydb数据库进行备份:
mysqldump �C-databases �C-opt mydb  > db.sql
 
Mysqldump 具体参数可以参考 man mysqldump
 
# 恢复备份:
mysql �Cu root �Cppassword
 
# 进入 mysql 命令模式
 
mysql>source db.sql
 
 
2. mysql 增量备份:
    Mysql 提供了一种基于log的增量备份机制,要启动log系统(mysql默认是不启动的)
修改 /etc/my.cnf:, 增加一下内容:
 [mysqld]
 server-id=1
 log-bin= /opt/mysql_backup/date_backup  # 可以自己指定
 log-bin-index= /opt/mysql_backup/date_backup .index
 
重启 mysql:
 /etc/init.d/mysqld restart
 
这样在/opt/mysql_backup目录下会多出两个文件,一个是date-backup.000001,这个是对mysql进行的所有操作都会纪录在这里,随着log会不断的变大,会产生很多文件(比如 date_backup.000002,date_backup.0000003…..,还有一个文件就是date_backup.index,这个是date_backup.00000x的索引文件.
 
所以增量备份其实就是备份那些date_backup.000000x文件。因为这些文件是二进制的,需要用mysqlbinlog命令来查看。
每次做增量备份前都要做如下动作,来锁定log.
mysql �Cu root �Cppassword �Ce “flush logs”
然后就可以把 date_backup .000000x 文件作备份了。
 
恢复时要用到 mysqlbinlog 命令:
m ysqlbinlog date_backup .000001 | mysql �Cu root -ppassword
 
3.mysqlhotcopy.
  Mysql 还提供一种更为快速的备份方法,就是用mysqlhotcopy,功能和mysqldump的功能一样,但是速度更快,因为mysqldump是把数据库转换成文件,而mysqlhotcopy是直接复制数据库目录,中间不做任何转换,所以速度非常快
mysqlhotcopy -u=root -p=password �C-addtodest dbname /home/mysql_backup/
 
 
  恢复时只要把目录再copy回去就可以了
cp -rf /home/mysql_backup/dbname /var/lib/mysql/
chown �CR mysql:mysql /var/lib/mysql/dbname
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
现在我们就开始实际操作了。
1 .我们先要修改mysql的设置。
   修改/etc/my.cnf,添加下面的内容。
  [mysqld]
 server-id=1
 log-bin= /opt/mysql_backup/date_backup
 log-bin-index= /opt/mysql_backup/date_backup .index
   创建所需的目录,然后重启mysql
mkdir -pv /opt/mysql_backup  
chown mysql /opt/mysql_backup
mkdir �Cpv /home/mysql_backup/{1..12}
/etc/init.d/mysqld restart
 
2. 备份策略:
    每个月的第一天做一个全备份,其余时间做增量备份。数据保留6个月。
 
3. 备份的脚本。
   把下面的脚本在cron中设置,每天晚上2230执行。
 
#!/bin/bash
MY_PASS='12Nm34'
ORIG_DIR='/opt/mysql_backup/'
INDEX_FILE="${ORIG_DIR}/date_backup.index"
BACKUP_DIR='/home/mysql_backup'
DATE=`date +%F`
CURRENT_DAY=`date +%d`
CURRENT_MONTH=`date +%m`
DB="cacti"
 
 
if [ "$CURRENT_DAY" = "01" ]
then
       
   mysqldump -p${MY_PASS} -F -x --databases ${DB} > ${BACKUP_DIR}/${CURRENT_MONTH}/Full_backup_${DATE}  
 
else
 
        LOG_FILE=`find "${ORIG_DIR}" -name "*log*" -type f -cmin -1439`
        echo "$LOG_FILE" > /tmp/mysql.index
      mysql -p${MY_PASS} -e "flush logs" 
        count=0 
        for file in $LOG_FILE
          do
cp $file ${BACKUP_DIR}/${CURRENT_MONTH}/date_backup-${DATE}_${count}
                count=$((count+1))
           done
fi

你可能感兴趣的:(职场,休闲)