mysqlhotcopy使用lock tables、flush tables和cp或scp來快速備份數據庫.它是備份數據庫或單個表最快的途徑,徹底屬於物理備份,但只能運行在數據庫目錄所在的機器上.html
與mysqldump備份不一樣,mysqldump屬於邏輯備份,備份時是執行的sql。mysql
[root@localhost ~]# yum install perl-DBD* -y
[root@localhost ~]# /bin/mysqlhotcopy -u root -p '' --addtodest mysqlname /opt/sql_back/
[root@localhost~]# cp -arp /opt/sql_back/mysqlname /var/lib/mysql/ --將備份的數據移到mysql數據根目錄
1.添加定時執行。sql
#每一小時進行mysql的備份 0 * * * * /data/shell/mysql_hotbackup.sh
2. 備份腳本shell
#!/bin/bash HOST="192.168.1.128" USER="root" PASSWORD="root" BACKUP_PARENT_DIR="/data/backup/"; BACKUP_DIR_NAME="mysql_data" CURRENT_DIR=$(pwd) CURRENT_DAY=$(date +%Y%m%d%H) DELETE_DAY=$(date -d "2 days ago" +%Y%m%d) #這裏面有兩個參數,-A、-N,-A的含義是不去預讀所有數據表信息,這樣能夠解決在數據表不少的時候卡死的問題 #-N,很簡單,Don't write column names in results,獲取的數據信息省去列名稱 MYSQL="mysql -h${HOST} -u${USER} -p${PASSWORD} --default-character-set=utf8 -A -N" sql="SHOW DATABASES;" result="$($MYSQL -e "$sql")" #dump_data=./data.user.txt #>$dump_data #echo -e "$result" > $dump_data ##這裏要額外注意,echo -e "$result" > $dump_data的時候必定要加上雙引號,不讓導出的數據會擠在一行 db_name_str=$(echo ${result} | sed 's/ /,/g' | sed 's/\n//g' | sed 's/-/@002d/g') OLD_IFS="$IFS" IFS="," db_name_array=($db_name_str) IFS="$OLD_IFS" echo "Start MySql Hot Backup......"; echo "" echo "" #進入備份目錄 echo "cd ${BACKUP_PARENT_DIR}"; cd ${BACKUP_PARENT_DIR} #建立myql備份目錄 echo "" echo "mkdir MySql backup dir: ${BACKUP_DIR_NAME}" mkdir -p ${BACKUP_DIR_NAME} #備份數據 echo "" echo "" backup_dir=$(cd "${BACKUP_PARENT_DIR}/${BACKUP_DIR_NAME}/"; pwd) for db_name in ${db_name_array[@]} do ###跳過熱備份 if [ "$db_name"x = "information_schema"x ] || [ "$db_name"x = "performance_schema"x ] || [ "$db_name"x = "performance_schema"x ]; then continue fi echo "mysqlhotcopy -h ${HOST} -u ${USER} -p ${PASSWORD} --addtodest ${db_name} ${backup_dir}"; mysqlhotcopy -h ${HOST} -u ${USER} -p ${PASSWORD} --addtodest ${db_name} ${backup_dir} done #壓縮備份 echo "" echo "" echo "Current dir:$(pwd)" echo "" echo "Compress MySql backup data......" echo "tar zcf ./mysql_data_${CURRENT_DAY}.tar.gz ${BACKUP_DIR_NAME}" tar zcf "./mysql_data_${CURRENT_DAY}.tar.gz" ${BACKUP_DIR_NAME} echo "" #刪除以前的備份 delete_file="./mysql_data_${DELETE_DAY}*.tar.gz" echo "Delete MySql backup data of two days ago: ${delete_file}" if [ -d "$delete_file" ]; then echo "不容許刪除目錄" else echo "rm -rf ${delete_file}" rm -rf ${delete_file} fi #回到當前目錄 echo "" echo "Return to source directory:${CURRENT_DIR}"; cd ${CURRENT_DIR} echo "" echo "" echo "MySql Hot Backup is Successfully !"; #https://blog.csdn.net/xfcy1990/article/details/52120581 #https://www.cnblogs.com/kissdodog/p/4174421.html #https://www.cnblogs.com/fire909090/p/7202584.html #https://blog.51cto.com/853056088/1952430 #https://www.cnblogs.com/jiayy/p/3766286.html
PS:數據庫
https://blog.csdn.net/xfcy1990/article/details/52120581
https://www.cnblogs.com/kissdodog/p/4174421.html
https://www.cnblogs.com/fire909090/p/7202584.html
https://blog.51cto.com/853056088/1952430
https://www.cnblogs.com/jiayy/p/3766286.htmlcentos