一:前期准備
至少需要兩台主機
192.168.175.200 vip
192.168.175.250 node1
做密鑰否則不能拷貝過去
命令:[root@vip ~]#cd /root/.ssh
命令:[root@vip ~]#ssh-keygen
#
命令:[root@vip .ssh]#ssh-copy-id 192.168.175.250
測試一下,命令:[root@vip .ssh]# ssh 192.168.175.250 #不需要密碼直接連接
1.另一台主機最好提前創建一個數據存放地
命令:[root@node1 ~]# mkdir -p /data/rsyncdata/databak/
2..備份腳本內容
命令:[root@vip ~]# vim databak.sh
#!/bin/bash
date=$(date +%Y%m%d%H%M%S) #設置時間變量,括號內是設置時間的格式
mysqldump -uroot -p'123456' -A > /root/$date-192.168.175.200.sql #MySQL所有數據導出復制到/root/$date-192.168.175.200.sql文件中 注意:yum安裝最好是用命令mysqldump的絕對路徑而用tar包安裝,可以不用
if [ $? -eq 0 ];then #判斷上次執行命令是否正確,正確為0,不正確非0
echo "數據備份完成" #正確執行,輸出結果
scp /root/$date-192.168.175.200.sql 192.168.175.250:/data/rsyncdata/databak/ #將導出的文件遠程復制到192.168.175.250主機上的/data/rsyncdata/databak/文件中
sleep 4 #睡眠4秒
echo "遠程備份完成" #輸出結果
rm -rf /root/$date-192.168.175.200.sql #刪除本地主機導出的數據
fi #結束
3.設置執行計划任務
(1)先將腳本加執行權限(x)
命令:[root@vip ~]# chmod +x databak.sh
(2)周期性任務要用的命令是crontab,那么這里有個選項-e(edit)表示編輯輸入
命令:[root@vip ~]# crontab -e
0 * * * * sh /root/databak.sh #分時日月周的順序,這是每小時執行一次腳本
(3)編寫完這個計划任務以后,還是要檢查一下這個任務是否在啟動
命令:[root@vip ~]# ps -le | grep cron
S表示確實是啟動的,如果沒有啟動可以輸入命令:/etc/rc.d/init.d/cron start就可以了
XTRABAKUP工具 在線熱備備份過程中不鎖庫表
主要含兩個插件:
rpm -ivh libev-4.15-1.el6.rf.x86_64rpm
yum -y install percona-xtrabackup-24-2.4.7-1.e17.x86_64.rpm
--redo-only 日志合並 --apply-log 准備恢復數據
--copy-back 拷貝數據 --incremental 增量備份
--incremental-basedir 增量備份時指定上一次備份數據存儲的目錄名 --incremental-dir 准備恢復數據時指定增量備份數據存儲的目錄名
--export 導出表信息 import 導入表空間
--host 主機名 --user 用戶名
--port 端口號 --password 密碼
--databases 數據庫名 --no-timestamp 不用日期命名備份文件存儲的子目錄名
完全備份 用戶名 密碼 備份目錄名
例:innobackupex -user root -password 123456 /book --no-timestamp 完全備份
完全恢復
例: 先 innobackupex --apply-log /book 准備恢復數據
后 innobackupex --copy-back /book 恢復數據
恢復完后/var/lib/mysql目錄要改歸屬人如: chown -R mysql:mysql /var/lib/mysql
恢復單張表
innobackupex -user root -password 123456 --databases="db5" /book --no-timestamp 這是備份db5庫的文件
數據庫里打這個命令: alter table db5.b discard tablespace 刪除表空間數據
innobackupex --apply-log --export /book 導出表信息
cp /book/db5/b.{cfg,exp,idb} /var/lib/mysql/db5/ 拷貝表信息到db5庫下
chown mysql:mysql /var/lib/mysql/db5/b.* 改所有者和所屬組
alter table db5.b import tablespace 導入表空間數據庫
rm -rf /var/lib/mysql/db5/b.cfg b.exp 刪除這兩個文件
增量備份與恢復
innobackupex -user root -password 123456 /lock --no-timestamp 完全備份
增量備份 存放目錄 增量備份時指定上一次備份數據存儲的目錄名 不用日期命名備份文件存儲的子目錄名
innobackupex -user root -password 123456 --incremental /book --incremental-basedir=/lock --no-timestamp 注: 用--incremental-basedir=/lock這個命令就可以使這次備份的數據只備份上次沒備份過的數據
日志合並
scp /book 192.168.17.11:/opt scp /lock 192.168.17.11:/opt 把兩個文件拷貝到准備恢復的電腦上
systemctl stop mysql 關閉數據庫
innobackupex --apply-log --redo-only /opt/lock 准備恢復數據
innobackupex --apply-log --redo-only /opt/lock --incremental-dir=/opt/book //合並日志
innobackupex --copy-back /opt/lock 恢復文件
chown -R mysql:mysql /var/lib/mysql //修改所有者與組用戶
systemctl start mysqld //啟動服務
登陸mysql查看是否恢復