InnoDB是MySQL數據庫中一種非常流行的存儲引擎,對于大規模高并發的應用場景,使用InnoDB是非常合適的。InnoDB有一種自動增量備份功能,可以實現在數據庫運行期間的24小時持續的增量備份。下面,我們將詳細介紹如何使用MySQL的增量時時備份功能。
首先,我們需要開啟MySQL的自動二進制日志功能(binary logging)。我們打開MySQL的配置文件(my.cnf或my.ini),并在[mysqld]下面加入以下配置:
log-bin=mysql-bin binlog-format=mixed server-id=1
其中,log-bin=mysql-bin配置了二進制日志文件的前綴,MySQL會自動創建以這個前綴為前綴的二進制日志文件;binlog-format=mixed配置了日志格式為“mixed”(混合格式),可以同時保存語句和行級別的改變信息;server-id=1配置了MySQL的服務器ID。
接下來,我們進入MySQL命令行界面,輸入以下命令:
mysql>flush logs; # 刷新日志,新建一個二進制日志文件 mysql>show master status; # 查看當前二進制日志文件的名字和位置
通過show master status命令,我們可以查看到當前的二進制日志文件的名字和位置,例如,我們可以看到以下信息:
+------------------+-----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+-----------+--------------+------------------+ | mysql-bin.000003 | 506055532 | | | +------------------+-----------+--------------+------------------+
其中,File列顯示了當前的二進制日志文件名字,Position列顯示了當前二進制日志文件的位置。
現在,我們可以通過類似以下的備份腳本實現增量備份:
#!/bin/bash DATE=`date +%Y%m%d%H%M` BACKUP_DIR="/data/backup/mysql" MYSQL_USER="root" MYSQL_PWD="123456" MYSQL_DB="mydb" BINLOG_FILE=`mysql -u$MYSQL_USER -p$MYSQL_PWD -e "show master status;" | awk 'NR>1{print $1}'` BINLOG_POS=`mysql -u$MYSQL_USER -p$MYSQL_PWD -e "show master status;" | awk 'NR>1{print $2}'` mkdir -p $BACKUP_DIR/$DATE mysqldump -u$MYSQL_USER -p$MYSQL_PWD $MYSQL_DB >$BACKUP_DIR/$DATE/$MYSQL_DB.sql mysqlbinlog --start-position=$BINLOG_POS --stop-position=`expr $BINLOG_POS + 1000000` mysql-bin.000003 >>$BACKUP_DIR/$DATE/$MYSQL_DB.sql
備份腳本的第1行獲取當前日期,創建備份目錄時使用;第2行指定備份目錄;第3行指定MySQL的用戶名;第4行指定MySQL的密碼;第5行指定MySQL要備份的數據庫名;第6行獲取當前二進制日志文件名字;第7行獲取當前二進制日志文件的位置,即備份時的起點;第9行使用mysqldump備份MySQL數據庫;第10行使用mysqlbinlog備份二進制日志文件。
至此,我們已經成功實現了MySQL的增量時時備份。在實際生產環境中,我們可以將備份腳本放在定時任務中執行,實現自動備份。