Xtrabackup是由percona提供的mysql數據庫備份工具,據官方介紹,這也是世界上唯一一款開源的可以對innodb和xtradb數據庫進行熱備的工具。mysql
XtraDB 存儲引擎是由Percona開發的一款MySQL數據庫的高性能存儲引擎,其目的是用來代替InnoDB存儲引擎,可用於須要更高性能的環境。
XtraDB 能夠看做是InnoDB存儲引擎的加強版本,它在InnoDB上進行了大量的修改和patched,它徹底兼容InnoDB,且提供了不少InnoDB不具有的有用的功能。
對於高負載的MySQL應用來講,若是不須要MySQL官方技術支持的話,徹底能夠使用XtraDB來代替InnoDB存儲引擎。sql
InnoDB 有個商業的InnoDB Hotbackup,能夠對InnoDB引擎的表實如今線熱備。而percona出品的Xtrabackup,是InnoDB Hotbackup的一個開源替代品,能夠在線對InnoDB/XtraDB引擎的表進行物理備份。mysqldump支持在線備份,不過是邏輯備份,效率較差。xtrabackup是開源的MySQL備份工具,物理備份,效率較好。數據庫
Xtrabackup有兩個主要的工具:xtrabackup、innobackupex,其中xtrabackup只能備份InnoDB和XtraDB兩種數據表,innobackupex則封裝了xtrabackup,同時能夠備份MyISAM數據表。bash
Xtrabackup屬於物理備份,EPEL源中有安裝包,能夠安裝epel-release後直接安裝。socket
這裏因爲線上環境是CentOS5.4,因此就單獨從官網下載rpm包安裝了。另外,因爲使用yum安裝會依賴libev,這裏直接使用rpm安裝。工具
# wget https://www.percona.com/downloads/XtraBackup/XtraBackup-2.0.0/RPM/rhel5/x86_64/percona-xtrabackup-2.0.0-417.rhel5.x86_64.rpm # rpm -ivh percona-xtrabackup-2.0.0-417.rhel5.x86_64.rpm
設置定時任務性能
# crontab -e 10 0 * * * /root/bin/innobackup.sh
備份腳本code
# cat /root/bin/innobackup.sh #!/bin/bash backup_root='/data/backup' today=$(date +%F) confs=($(ls /etc/my*)) for conf in ${confs[@]} do port=$(basename $conf |sed -e 's/.cnf//' -e 's/my//' -e 's/-//') [[ -z $port ]] && port=3306 [[ $port == 3306 ]] && continue backup_path=$backup_root/$port mkdir -p $backup_path list=($(find $backup_path/ -mindepth 1 -maxdepth 1 -type d)) if [[ $(date +%w) -eq 0 || -z ${list[*]} ]];then echo /usr/bin/innobackupex --defaults-file=$conf --user=root --password='dellXdell' $backup_path/ >> $backup_path/backup.$today.log 2>&1 /usr/bin/innobackupex --defaults-file=$conf --user=root --password='dellXdell' $backup_path/ >> $backup_path/backup.$today.log 2>&1 if [[ $? -eq 0 ]];then rm -rf ${list[@]} fi else last_backup=$(echo ${list[@]} | tr ' ' '\n' |sort |tail -1) echo /usr/bin/innobackupex --defaults-file=$conf --user=root --password='dellXdell' --incremental $backup_path --incremental-basedir=$last_backup/ >> $backup_path/backup.$today.log 2>&1 /usr/bin/innobackupex --defaults-file=$conf --user=root --password='dellXdell' --incremental $backup_path --incremental-basedir=$last_backup/ >> $backup_path/backup.$today.log 2>&1 fi done
這裏設置的是週日全備,其它天增備,事先須要手動作一次全備。crontab
# /usr/bin/innobackupex --defaults-file=/etc/my-3307.cnf --user=root --password='dellXdell' --socket=/nh/mysql3307/mysql-3307.sock --compress /data/backup/3307 >> /data/backup/3307/backup.$(date +%F).log 2>&1