- 建立挂载的数据卷
- 虚拟机 3307 端口和容器里的3306端口对应,虚拟机路径和容器里路径
- 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
docker容器部署方式
**
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 <
zcDATE=%0Amkdir%20-p%20%2Fopt%2Fmysqlbackup%2Fbackup%2F#card=math&code=%28date%20%2B%25Y%25m%25d%29%0Amkdir%20-p%20%2Fopt%2Fmysqlbackup%2Fbackup%2F)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! >> BakDir/$base
if(test -e $dest)
then
echo $base exist! >> $LogFile
else
cp 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
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服务
