mysql定時全量備份、增量備份
第一步 先建好備份目錄、shell文件
mkdir /var/local/mysqlfullbackup #新建數據全量備份所在目錄
mkdir /var/log/mysqllog #新建數據增量備份所在目錄
#修改目錄所屬組和用戶
chown -R mysql:mysql /var/local/mysqlfullbackup
chown -R mysql:mysql /var/log/mysqllog
touch /usr/local/bin/mysql_data_fullbackup.sh #增加全量備份shell
chmod +x /usr/local/bin/mysql_data_fullbackup.sh #增加腳本的執行權限
touch /usr/local/bin/mysql_binlog_flush.sh #增加增量備份shell
chmod +x /usr/local/bin/mysql_binlog_flush.sh #增加腳本的執行權限
第二步 修改my.cnf
這里只列出了所需要的參數,其它參數,讀者自行添加
[mysqld] # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0
#中間省略
#全量備份目錄 #mysqlbackup=/var/local/mysqlfullbackup #二進制日志文件目錄 log_bin=/var/log/mysqllog/binlog server-id=100 # 安全性考慮 [client] host=localhost user=賬戶 password=密碼 #......省略......
#!includedir /etc/my.cnf.d
修改完之后,重啟服務,使其生效
第三步 寫shell腳本(簡單寫法)
① 全局變量腳本
mysql_data_fullbackup.sh
#!/bin/bash #description: mysql-data automatically backup script # 文件名為100mysql+日期.sql backupDatabase=100mysql fileName=${backupDatabase}`date +"%Y-%m-%d_%H:%M:%S"` # 定義baseDir變量 baseDir=/var/local/mysqlfullbackup/ # 備份數據庫 mysqldump --defaults-extra-file=/etc/my.cnf --all-databases --flush-logs --delete-master-logs --single-transaction -R > ${baseDir}${fileName}.sql # --defaults-extra 會讀取 my.cnf 賬戶和密碼
# --delete-master-logs 刪除前面的二進制備份
# -R 備份存儲過程 # 壓縮 #tar -zcvf ${baseDir}${fileName}.sql.tar.gz ${baseDir}${fileName}.sql # 刪除剛剛備份的sql文件,留下壓縮的 #rm -f ${baseDir}${fileName}.sql; # 刪除7天前備份的數據,只保留一星期內的數據 #find ${baseDir} -mtime +7 -name "${backupDatabase}*.tar.gz" -exec rm -rf {} \;
②增量備份
mysql_binlog_flush.sh
#!/bin/bash #description: mysql-data automatically backup script # 刷新二進制日志 mysqladmin --defaults-extra-file=/etc/my.cnf flush-logs;
③先試着運行一下,看是否成功
./mysql_data_fullbackup.sh
如果執行.sh腳本時,報錯 " /bin/bash^M: 壞的解釋器:沒有那個文件或目錄”,這是因為 .sh文件是從windows拷貝過來的,所以多了\r,執行:
sed -i 's/\r$//' mysql_data_fullbackup.sh
會把 mysql_data_fullbackup.sh 中的\r 替換成空白,再次執行則成功!
如果運行成功沒問題,則操作第四步
第四步 添加定時任務
讀者如不了解Linux的定時任務,可以自行搜索 crontab
crontab -e
0 18 * * 5 /usr/local/bin/mysql_data_fullbackup.sh # 每個禮拜五的晚上六點 運行該腳本,全量備份一次 0 8 * * 1-5 /usr/local/bin/mysql_binlog_flush.sh # 禮拜一到禮拜五,每天早上8點,運行腳本,刷新增量備份
第五步 加載配置
service crond reload //重新載入配置
service crond start //啟動服務
service crond stop //關閉服務
service crond restart //重啟服務
service crond status //查看服務狀態
最后
到時間點后,去對應的目錄,看是否有新的備份文件,有則代表配置成功了
備注
show variables like '%dir%'; -- 查看文件目錄
show variables like 'general%'; -- 查看運行日志
show variables like '%log_bin%'; -- 查看二進制日志