1、創建備份數據庫容器(參考監控相關下面的mysql安裝)
# 建立掛載的數據卷
# 虛擬機 3307 端口和容器裏的3306端口對應,虛擬機路徑和容器里路徑(下圖,來自頭部參考地址)對應
docker run -p 3307:3306 --restart="always" --name iptv-mysqlbackup -v /opt/mysql/data:/var/lib/mysql \
-v /opt/mysqlbackup/daily:/opt/mysqlbackup/daily -v /opt/mysqlbackup/backup:/opt/mysqlbackup/backup -e MYSQL_ROOT_PASSWORD=123456 -d --privileged=true iptv-mysqlbackup
2、yum安裝包存放在目錄/var/cache/yum/package,將之拷貝到容器裏
docker cp crontabs-1.11-6.20121102git.el7.noarch.rpm mysql:/usr/share/package
進入到容器的當前目錄下通過rpm離線安裝相關軟件
rpm -Uvh --force --nodeps *.rpm
以上方式可通過apt安裝,貌似要聯網
安裝vim apt-get update && apt-get install vim
安裝定時任務 apt-get install cron
安裝yum指令 apt-get install yum
3、新建備份腳本
備份準備工作
創建目錄
mkdir -p /opt/mysqlbackup
touch backup.sh
文件賦權
chmod +x /opt/mysqlbackup/backup.sh
全量備份腳本
cat >/opt/mysqlbackup/backup.sh <<EOF
#!/bin/sh
zcDATE=$(date +%Y%m%d)
mkdir -p /opt/mysqlbackup/backup/$zcDATE
mysqldump -h '192.168.1.36' -uroot -p'123456' --quick --events --databases mysql --flush-logs --delete-master-logs --single-transaction > /opt/mysqlbackup/backup/$zcDATE/mysql.sql
EOF
MySQL上存在兩個數據庫,名稱分別是 db1 和 db2,利用這種方式在硬盤上備份數據。-h表示遠程的服務器IP。-u 和 -p 分別是遠程服務器的用戶名和密碼。這裏不建議使用 mysqldump 的 –-all-database 選項。因爲該選項會把遠程MySQL裏的系統數據庫也備份下來,包括 root 用戶的密碼等內容。如果你要把導出的內容導入到別的機器上,這些系統設置(比如用戶名和密碼)會覆蓋你的機器上原來的設置
增量備份數據庫設置
查看mysql日誌是否開啓show variables like '%log_bin%'
進入到mysql容器 docker exec -ti mysql bash
修改配置文件vim /etc/mysql/mysql.conf.d/mysqld.cnf
加上兩行
log-bin=/var/lib/mysql/mysql-bin
server-id=123454
set global expire_logs_days = 3;
重啓mysql docker restart mysql
增量備份命令sh文件,內容如下
BakDir=/opt/mysqlbackup/daily
BinDir=/var/lib/mysql
BinFile=/var/lib/mysql/mysql-bin.index
mysqladmin -h '192.168.1.36' -uroot -p123456 flush-logs
Counter=`wc -l $BinFile | awk '{print $1}'`
NextNum=0
chomd +x BinDir
for file in `cat $BinFile`
do
base=`basename $file`
NextNum=`expr $NextNum + 1`
if [ $NextNum -eq $Counter ]
then
echo $base skip! >> $LogFile
else
dest=$BakDir/$base
if(test -e $dest)
then
echo $base exist! >> $LogFile
else
cp $BinDir/$base $BakDir
echo $base copying >> $LogFile
fi
fi
done
echo `date +"%Y%m%d %H:%M:%S"` $Next Bakup succ! >> $LogFile
4、設置定時任務
crontab -e
加上如下配置
*/1 * * * * /opt/mysqlbackup/backup.sh (測試設置每分鐘試試)
0 19 * * 1,3,5 /opt/mysqlbackup/backup.sh (線網穩定後設置每週1,3,5執行)
50 1 * * * /opt/mysqlbackup/backup.sh (線網穩定前設置每天執行)
舉例
# Use the hash sign to prefix a comment
# +---------------- minute (0 - 59)
# | +------------- hour (0 - 23)
# | | +---------- day of month (1 - 31)
# | | | +------- month (1 - 12)
# | | | | +---- day of week (0 - 7) (Sunday=0 or 7)
# | | | | |
# * * * * * command to be executed
#--------------------------------------------------------------------------
# Run my cron job every Monday, Wednesady and Friday at 7:00PM
0 19 * * 1,3,5 nohup /home/lathonez/script.sh > /tmp/script.log 2>&1
●30 5 * * * root /sbin/init 6 這樣就將系統配置爲了每天早上5點30自動重新啓動。
● 0 /2 * * /sbin/service httpd restart 意思是每兩個小時重啓一次apache
● 50 1 * * * /sbin/service sshd start 意思是每天1:50開啓ssh服務
● 50 22 * * * /sbin/service sshd stop 意思是每天22:50關閉ssh服務
● 0 0 1,15 * * fsck /home 每月1號和15號檢查/home 磁盤
● 1 * * * * /home/bruce/backup 每小時的第一分執行 /home/bruce/backup這個文件
● 00 03 * * 1-5 find /home “.xxx” -mtime +4 -exec rm {} /; 每週一至週五3點鐘,在目錄/home中,查找文件名爲.xxx的文件,並刪除4天前的文件。
● 30 6 /10 * ls 意思是每月的1、11、21、31日是的6:30執行一次ls命令
5、啓動定時任務
命令: service cron start 開啓服務
命令: service cron stop 關閉服務
命令: service cron restart 重啓服務
命令: service cron reload 重新載入配置
service cron status 查看狀態
由於定時任務依賴於時間,所以還需要對時區進行設置
linux下時區設置:================================
tzselect #設置時區 依次選擇5 9 1 1
export TZ=Asia/Shanghai
docker下時區設置:================================
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
6、想要查看定時任務日誌,需要安裝syslog
安裝syslog apt-get install rsyslog
編輯日誌配置文件 vi /etc/rsyslog.conf
cron.* /var/log/cron.log #將cron前面的註釋符去掉
重啓rsyslog
service rsyslog restart
查看日誌文件
tail -f /var/log/cron.log
7、恢復數據庫導入
按照位置生成恢復日誌
show master status ; 查詢出當前位置和日誌文件
show binlog events in 'mysql-bin.000115'; 查看日誌文件對應的操作
mysqlbinlog --stop-position=514 /opt/mysqlbackup/daily/mysql-bin.000114>backup.sql
按照時間恢復
mysqlbinlog --start-datetime='2019-11-26 16:26:03' --stop-datetime='2019-11-27 10:34:00' /opt/mysqlbackup/daily/mysql-bin.000122 >backup.sql
將sql文件重新執行一遍用作恢復
mysql -uroot -p123456 mysql<backup.sql
8、還原數據太慢解決方法
1.查看變量 innodb_flush_log_at_trx_commit的值
SHOW VARIABLES LIKE 'innodb_flush_log_at_trx_commit' ;
2.查詢結果如果是1的話,將其修改成0
SET GLOBAL innodb_flush_log_at_trx_commit =0;
3.這時候再source,會發現速度快了很多,在結束後記得把這個變量重新設置成1
SET GLOBAL innodb_flush_log_at_trx_commit =1;
速度雖然快了很多,但是不安全,所以導入完之後需要把參數改回去
9、查看系統操作日誌
show variables like 'general_log_file';
進入mysql把日誌拷貝出來
docker cp mysql:/var/lib/mysql/cfedc2a3bf2a.log /opt/mysqlbackup/
10、查看logbin
show binary logs;
show variables like '%log_bin%';
show master status ;
服務器部署的時候記得進入容器啓動cron服務