综合架构备份服务

2023-11-06

备份服务器完成rsync守护进程模式搭建


rsync服务端配置步骤

第一个历程:下载安装软件

检查rsync软件是否安装
rpm -qa|grep rsync
在这里插入图片描述
这个是3.1.2-4版本的,可以重新下载一下
yum install rsync -y
在这里插入图片描述
升级到了3.1.2-10版本

第二个历程:编写配置文件

配置文件如下/etc/rsyncd.conf:

##created by HQ at 2020
###rsyncd.conf start##
uid = rsync
gid = rsync
port = 873
#fake super = yes
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = “backup dir”
path = /backup

配置文件参数解释

##created by HQ at 2020
###rsyncd.conf start##
uid = rsync # 指定管理备份目录的用户
gid = rsync # 指定管理备份目录的用户组
port = 873 # 定义rsync备份服务的网络端口号
#fake super = yes # 伪装超级管理员
use chroot = no # 和安全相关的配置
max connections = 200 # 最大连接数 同时只能有200个客户端连接到备份服务器
timeout = 300 # 超时时间(单位秒)
pid file = /var/run/rsyncd.pid # 记录进程号码信息 1.让程序快速停止进程 2.判断一个服务是否运行
lock file = /var/run/rsync.lock # 锁文件
log file = /var/log/rsyncd.log # rsync服务的日志文件 用于排错分析问题
ignore errors # 忽略传输中的简单错误
read only = false # 指定备份目录是可读可写
list = false # 使客户端可以查看服务端的模块信息
hosts allow = 172.16.1.0/24 # 允许传输备份数据的主机(白名单)
hosts deny = 0.0.0.0/32 # 禁止传输备份数据的主机(黑名单)
auth users = rsync_backup # 指定认证用户
secrets file = /etc/rsync.password # 指定认证用户密码文件 用户名称:密码信息
[backup] # 模块信息
comment = “backup dir”
path = /backup # 指定备份目录

第三个历程:创建rsync服务的虚拟用户

创建虚拟用户,作用是管理备份目录。
useradd rsync -M -s /sbin/nologin
在这里插入图片描述

第四个历程:创建备份服务认证密码文件

echo "rsync_backup:123456" > /etc/rsync.password
在这里插入图片描述
修改文件权限
在这里插入图片描述

第五个历程:创建备份文件目录

创建目录
mkdir /backup
目录创建好了之后,修改目录的属主和属组信息
chown rsync.rsync /backup/
在这里插入图片描述

第六个历程:启动备份服务

systemctl start rsyncd
systemctl enable rsyncd
systemctl status rsyncd
在这里插入图片描述

rsync守护进程语法

客户端做拉的操作: 恢复数据
Pull: rsync [OPTION…] [USER@]HOST::SRC… [DEST]
客户端做推的操作: 备份数据
Push: rsync [OPTION…] SRC… [USER@]HOST::DEST
src: 要推送备份数据信息
[USER@]: 指定认证用户信息(rsync_backup)
HOST: 指定远程主机的IP地址或者主机名称(172.16.1.41)
::DEST: 备份服务器的模块信息(backup)

客户端传输数据到备份服务器

rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
在这里插入图片描述
想要解决问题,只需要把rsync配置文件的#fake super = yes注释去掉。
fake super = yes伪装超级管理员,这样服务端中的rsync平民用户才能操作root管理的文件。
在这里插入图片描述
如图,报错已经没有了

rsync守护进程客户端免交互配置

第一个历程:创建一个密码文件并修改该文件权限

echo 123456 > /etc/rsync.password
chmod 600 /etc/rsync.password

第二个历程:进程免交互传输数据测试

rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
在这里插入图片描述

rsync备份传输数据原理

在客户端中是用root用户传输的,权限至高无上。
但是通过认证进入服务端中,root皇帝用户就转变成了平民用户rsync,当平民用户rsync要操作root用户管理的文件时就会报错。
在这里插入图片描述

rsync命令的常用参数

rsync命令参数选项及说明

参数选项 解释说明
-a 归档参数,包含 rogpDl
-v 详细模式输出,传输时的进度等信息
-z 压缩数据传输
-r 递归复制传输数据
-t 保持文件时间信息不变(修改时间)
-o 保持文件属主信息不变
-g 保持文件属组信息不变
-p 保持文件的权限信息不变
-D 保持设备文件信息不变
-l 保持链接文件属性不变
-L 保持链接文件数据信息不变
-P 显示同步的过程及传输时的进度等信息
-n 测试选项,模拟执行
–delete 使目标目录内容和源目录保持一致,删除不同的文件
–exclude=PATTERN 排除指定数据不被传输
–exclude-from=file 排除指定数据不被传输(批量排除)
–bwlimit=RATE 限制传输的速率

rsync服务企业应用

1.多模块功能配置

首先在配置文件中填写多个模块信息
在这里插入图片描述
然后创建模块信息中的目录,并且修改目录的属主和属组为rsync虚拟用户
在这里插入图片描述
在这里插入图片描述
最后在客户端上备份数据(比如你是开发人员,那么就填写dev模块信息)
rsync -avz /etc/hosts rsync_backup@192.168.0.41::dev --password-file=/etc/rsync.password
在这里插入图片描述

2.服务的排除功能

准备环境
在这里插入图片描述
要求1:将/test目录下面a目录数据全部备份,b目录不要备份1.txt文件,c目录不做备份
绝对路径方式:
rsync -avz /test --exclude=/test/b/1.txt --exclude=/test/c rsync_backup@192.168.0.41::backup --password-file=/etc/rsync.password
在这里插入图片描述
相对路径方式:
rsync -avz /test --exclude=b/1.txt --exclude=c/ rsync_backup@192.168.0.41::backup --password-file=/etc/rsync.password
在这里插入图片描述
要求2 将/test目录下面a目录数据全部备份,b目录不要备份1.txt文件,c目录不要备份1.txt和3.txt文件
首先编辑一个排除文件
在这里插入图片描述
然后实现批量排除功能
rsync -avz /test --exclude-from=/test/exclude.txt rsync_backup@192.168.0.41::backup --password-file=/etc/rsync.password
在这里插入图片描述

3.服务的备份目录创建

客户端可以在模块信息 后面跟上一个目录,然后将备份的文件放在该目录下,方便备份文件的管理
rsync -avz /etc/hosts rsync_backup@192.168.0.41::backup/192.168.0.31/ --password-file=/etc/rsync.password
在这里插入图片描述
注意:客户端无法再服务端创建多级目录

4.服务的安全策略

可以在配置文件中设置白名单和黑名单功能
建议只使用一种名单

5.服务的列表功能

服务端配置文件list默认为false,改为true开启列表功能并重启rsync服务
在这里插入图片描述
在客户端上输入如下命令,即可查看当前备份服务器上的所有模块名称
rsync rsync_backup@192.168.0.41::
在这里插入图片描述
客户端知道了模块名称,则可以在任意模块目录下备份数据,但是不安全(如果运维人员对开发人员不满意,然后获取到了开发人员的模块信息,然后使用无差异同步把开发人员的备份目录下的内容全部清空)。建议不要开启列表功能。

6.服务的无差异同步

在客户端上建议一个null目录
在这里插入图片描述
然后输入以下命令
rsync -avz /null/ --delete rsync_backup@192.168.0.41::dev --password-file=/etc/rsync.password
在这里插入图片描述
服务端查看备份文件
同步之前
在这里插入图片描述
同步之后
在这里插入图片描述

企业项目:全网备份项目

基本备份要求
已知3台服务器主机名分别为web01、backup、nfs01,主机信息见下表:

服务器说明 外网 内网 主机名称
Nginx web 192.168.0.7 172.16.1.7 Web01
NFS存储服务器 192.168.0.31 172.16.1.31 Nfs01
Rsync备份服务器 192.168.0.41 172.16.1.41 Rsync01

要求每天晚上0点整在web服务器上打包备份系统配置文件、网站程序目录及访问日志并通过rsync命令推送备份服务器backup上备份保留(备份思路可以是先在本地按日期打包然后再推到备份服务器上),NFS存储服务器同web服务器,实际工作中就是全部的服务器
具体要求如下:

  1. 所有服务器的备份目录必须都为/backup
  2. 要备份的系统配置文件包括但不限于:
    a. 定时任务服务的配置文件(/var/spool/cron/root)
    b. 开机自启配置文件(/etc/rc.local)
    c. 日常脚本的目录(/server/scripts)
    d. 防火墙iptables的配置文件(/etc/sysconfig/iptables)
    e. 自己思考下还有什么需要备份呢?
  3. web服务器站点目录假定为(/var/html/www)
  4. web服务器访问日志路径假定为(/app/logs)
  5. web服务器及nfs服务器保留打包后的7天备份数据即可(本地留存不能多于7天,因为太多磁盘会满)
  6. 备份服务器上,保留每周一的所有数据副本,其他要保留6个月的数据副本。
  7. 备份服务器上要按照备份数据服务器的内网IP为目录保存备份,备份的文件按照时间名字保存。
  8. 需要确保备份的数据尽量完整正确,在备份服务器上对备份的数据进行检查,把备份的成功及失败的结果信息发给系统管理员邮箱中。

评分标准见表:

ID 分数 项目
1 20分 完成服务端rsync服务搭建
2 10分 完成客户端rsync命令推送到服务端
3 20分 完成客户端本地打包及校验脚本
4 10分 完成客户端定时任务配置
5 15分 完成服务端数据完整性检查及清理脚本
6 10分 完成服务端定时执行脚本
7 15分 实现每日邮件发送结果给管理员
100分

在这里插入图片描述

解答过程

1.在客户端上创建目录
mkdir /backup
在这里插入图片描述

2.数据打包压缩备份

tar zcvf /backup/system_backup.tar.gz /var/spool/cron/root /etc/rc.local / /server/scripts /etc/sysconfig/iptables
打包完成后一定要解压看看是否无误,上面的打包命令如果不检查那么就会给自己埋下了一个坑。因为/etc/rc.local是一个软连接(快捷方式),备份一个快捷方式一点用都没有!!!
在这里插入图片描述
因此要在tar命令里增加一个选项h,一定要写在参数f前面,即zcvhf
tar zcvhf /backup/system_backup.tar.gz /var/spool/cron/root /etc/rc.local /server/scripts /etc/sysconfig/iptables
这时在解压查看,发现rc.local不是软链接了。
在这里插入图片描述
-h:将链接文件所指向的原文件进行保存备份

此时已经解决了打包软链接的问题,但是还有一个小问题,就是每次打包的时候都会报错
tar: Removing leading '/' from member names
在这里插入图片描述
解决的办法是进入根目录下,然后采用相对路径的方式打包
tar zcvhf /backup/system_backup.tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables
在这里插入图片描述
3、4.打包站点目录和日志文件
在这里插入图片描述

5.要求保留7天之内的数据,言外之意是7天以前的删除掉。尴尬的是我们上面打包的时候并没有日期,因此会后一天的包会覆盖前一天的包,因此打包的时候要给包加个当天的日期

tar zcvhf /backup/system_backup_$(date +%F).tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables在这里插入图片描述
这里为了测试,用date命令修改当前时间
今天是9月24号,用date命令修改日期,使其生成以下打包文件
在这里插入图片描述
最后修改的时间定格为 10月4号

在这里插入图片描述
然后用find的命令查找出7天以前的文件
find /backup -type f -mtime +7
在这里插入图片描述
最后把找到的文件要删除操作即可
find /backup -type f -mtime +7|xargs rm
在这里插入图片描述
6.服务端要部署好rsync服务,客户端把备份数据传输到服务端
rsync -avz /backup/ rsync_backup@192.168.0.41::backup/172.16.1.7 --password-file=/etc/rsync.password
在这里插入图片描述
备份服务器上查看
在这里插入图片描述
修改备份服务器上的时间,查找半年以前的数据删除,但是要保留所有周一的数据
如何保留周一的数据?
需要客户端打包数据的时候,把星期的信息也要写到文件名字上面
tar zcvhf /backup/system_backup_$(date +%F_week%w).tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables
在这里插入图片描述
然后传输到服务端
rsync -avz /backup/ rsync_backup@192.168.0.41::backup/172.16.1.7 --password-file=/etc/rsync.password
在这里插入图片描述
服务端上查看
在这里插入图片描述
找出180天以前的数据,但是除了周一的其他的数据删除
find /backup/ -type f -mtime +180 ! -name "*week1*"
在这里插入图片描述
7.备份服务器上要按照备份数据服务器的内网IP为目录保存备份,备份的文件按照时间名字保存
这个要求其实我们无意识的已经完成了

8.需要确保备份的数据尽量完整正确,在备份服务器上对备份的数据进行检查,把备份的成功及失败的结果信息发给系统管理员邮箱中

如何验证数据的完整性???
md5sum 命令
在这里插入图片描述
知道了如何验证数据的完整性,那么在客户端上做完整的操作
首先找到7天以前的数据删除掉
然后找到1天之内的数据做MD5校验并写到指纹文件中,具体命令如下
find /backup/ -type f -mtime -1|xargs md5sum > /backup/finger.txt
在这里插入图片描述
最后数据连同指纹文件一起传输给服务端
rsync -avz /backup/ rsync_backup@192.168.0.41::backup/172.16.1.7/ --password-file=/etc/rsync.password
在这里插入图片描述
服务端接收到了数据
在这里插入图片描述
md5sum -c 指纹文件命令执行原理
第一个历程: 打开一个指纹文件,将信息记录到缓存中
第二个历程: 根据指纹文件的路径信息,生成md5数值信息
第三个历程: 将新生成md5数值和原有指纹文件中的数值进行比较
第四个历程: 如果相同显示结果为ok,如果不同显示failed

这时利用md5校验指纹文件,出现了一堆报错
在这里插入图片描述
原因是因为之前传输数据的时候,写的路径是rsync_backup@192.168.0.41::backup/172.16.1.7/,只是在服务端/backup目录下创建了172.16.1.7的目录,而客户端/backup目录下并没有此目录。因此要在客户端/backup目录下创建172.16.1.7的目录,与服务端保持一致。

在客户端创建172.16.1.7目录,并重新生成指纹文件,因为路径已经变了。
find /backup/ -type f -mtime 1|xargs md5sum > /backup/172.16.1.7/finger.txt
在这里插入图片描述
在这里插入图片描述

最后在传输到服务端,此时模块信息后面就不要跟内网地址目录了!
rsync -avz /backup/ rsync_backup@192.168.0.41::backup --password-file=/etc/rsync.password
在这里插入图片描述
服务端查看接收到的数据
在这里插入图片描述
再次利用md5sum -c校验
在这里插入图片描述
比较坑的是指纹文件也做了验证并报错了,因此客户端查找数据的时候要排除指纹文件!

最终版
客户端
find /backup/ -type f -mtime -1 ! -name "finger*"|xargs md5sum > /backup/172.16.1.7/finger.txt
这时指纹文件的内容只有要校验的数据了
在这里插入图片描述
传输过去
rsync -avz /backup/ rsync_backup@192.168.0.41::backup --password-file=/etc/rsync.password

在这里插入图片描述
服务端
数据及指纹文件已经传过来了
在这里插入图片描述
md5校验,终于成功!
在这里插入图片描述
最后一步发送邮箱
本地虚拟机发送
1.编辑vim /etc/mail.rc

set from=yan1240557686@163.com
set smtp=smtps://smtp.163.com
set smtp-auth-user=yan1240557686@163.com
set smtp-auth-password=VUPCPAFJJTJQDIDA
set smtp-auth=login

2.重启服务
systemctl restart postfix.service
3.测试
echo "邮件发送测试"|mail -s "邮件测试" 33315862@qq.com

阿里云服务器发送
因为阿里云服务器默认禁止了25端口,因此采用465端口发送
1.创建数字证书

mkdir -p /root/.certs/    ###创建目录,用来存放证书
echo -n | openssl s_client -connect smtp.163.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/163.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/163.crt   ###添加一个ssl证书到证书数据库中
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/163.crt  ###添加一个Global证书到证书数据库中
certutil -L -d /root/.certs   ###列出目录下的数字证书

2.配置发件人vim /etc/mail.rc

set from=yan1240557686@163.com 
set smtp=smtps://smtp.163.com:465
set smtp-auth-user=yan1240557686@163.com 
set smtp-auth-password=VUPCPAFJJTJQDIDA
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/root/.certs

3.重启服务
systemctl restart postfix.service
4.测试
echo "邮件发送测试"|mail -s "邮件测试" 33315862@qq.com
接收到邮箱但是报错
Error in certificate: Peer’s certificate issuer is not recognized.
在这里插入图片描述
5.解决证书不被信任问题
cd /root/.certs/
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i 163.crt
在这里插入图片描述
在这里插入图片描述

今天0点0分备份的是前一天的数据

rsync常见错误

1、ERROR: chroot failed
ERROR: chroot failed rsync error: error starting client-server protocol (code 5) at main.c(1503) [receiver=3.0.6]
原因:服务器端的目录不存在或无权限。
解决办法:创建目录并修正权限可解决问题。
2、skipping non-regular file
receiving incremental file list
skipping non-regular file “vendor/bin/doctrine”
skipping non-regular file “vendor/bin/doctrine.php”
sent 1990 bytes received 489209 bytes 327466.00 bytes/sec total size is 182515746 speedup is 371.57
原因:source源文件有软链接。
解决方法:修改为 rsync -va,其中 -a == -rlptgoD (no -H,-A,-X) 或者 rsync -rvltOD 也可以。
解决后:
receiving incremental file list
vendor/bin/doctrine -> …/doctrine/orm/bin/doctrine
vendor/bin/doctrine.php -> …/doctrine/orm/bin/doctrine.php
sent 1998 bytes received 489279 bytes 327518.00 bytes/sec total size is 182515746 speedup is 371.51
3、ERROR: module is read only
sending incremental file list
ERROR: module is read only
rsync error: syntax or usage error (code 1) at main.c(866) [receiver=3.0.6]
rsync: read error: Connection reset by peer (104)
rsync error: error in rsync protocol data stream (code 12) at io.c(759) [sender=3.0.6]
原因:source源服务器端权限设置read为only只读权限。
解决方法:read only = false
4、ERROR: auth failed on module tee
ERROR: auth failed on module tee rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.6]
原因:服务器端该模块(tee)需要验证用户名密码,但客户端未提供正确的用户名密码,认证失败。
解决方法:提供正确的用户名密码解决此问题。
5、ERROR: Unknown module ‘tee_nonexists’
ERROR: Unknown module ‘tee_nonexists’ rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.6]
原因:服务器不存在指定模块。
解决方法:提供正确的模块名或在服务器端修改成你要的模块以解决问题。
6、password file must not be other-accessible
password file must not be other-accessible
continuing without password file
Password:
原因:这是因为rsyncd.pwd rsyncd.secrets的权限不对,应该设置为600。
解决方法:chmod 600 rsyncd.pwd
7、rsync: failed to connect No route to host
rsync: failed to connect to 192.168.1.10: No route to host (113) rsync error: error in socket IO (code 10) at clientserver.c(104) [receiver=3.0.6]
原因:对方没开机、防火墙阻挡、通过的网络上有防火墙阻挡,都有可能。
解决方法:在iptables 中开放该端口,语句如下:
iptables -I INPUT -p tcp –dport 873 -j ACCEPT
rsync默认端口873,其实就是把tcp udp的873端口打开。
8、rsync error: error starting client-server protocol
rsync error: error starting client-server protocol (code 5) at main.c(1524) [Receiver=3.0.6]
原因:/etc/rsyncd.conf配置文件内容有错误。请正确核对配置文件。
9、rsync: chown “” failed: Invalid argument (22)
rsync: chown “” failed: Invalid argument (22)
原因:权限无法复制。去掉同步权限的参数即可。(这种情况多见于Linux向Windows的时候)
10、问题 @ERROR: daemon security issue — contact admin
@ERROR: daemon security issue — contact admin rsync error: error starting client-server protocol (code 5) at main.c(1530) [sender=3.0.6]
原因:同步的目录里面有权限不足的软连接文件,需要服务器端的/etc/rsyncd.conf打开use chroot = yes。
11、 rsync: read error: Connection reset by peer (104)
rsync: read error: Connection reset by peer (104) rsync error: error in rsync protocol data stream (code 12) at io.c(794) [receiver=3.0.6]
解决:很大可能是服务器端没有开启 rsync 服务,开启服务。
12、ERROR: failed to open lock file
@ERROR: failed to open lock file rsync error: error starting client-server protocol (code 5) at main.c(1495) [receiver=3.0.6]
解决:配置文件 rsync.conf 中添加 lock file = rsyncd.lock 即可解决。

全网备份脚本

客户端编写脚本(以web服务器为例 刚开始的方法备份)
mkdir /backup/172.16.1.7 -p
cd /
tar zcvhf /backup/172.16.1.7/system_backup_$(date +%F_weed%w).tar.gz ./etc/hosts
find /backup/ -type f -mtime +7|xargs rm
find /backup/ -type f -mtime -1 ! -name “finger*” > /backup/172.16.1.7/finger.txt
rsync -avz /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

编写脚本

#/bin/bash
Backup_path="/backup"
Inner_ip=$(hostname -i)

mkdir $Backup_path/$Inner_ip -p
cd /
tar zchf $Backup_path/$Inner_ip/system_backup_$(date +%F_weed%w).tar.gz  ./etc/hosts
find $Backup_path/  -type f  -mtime +7|xargs rm 2>/dev/null
find $Backup_path/ -type f -mtime -1 ! -name "finger*"|xargs md5sum  > $Backup_path/$Inner_ip/finger.txt
rsync -az $Backup_path/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
~                                                                                               

服务端脚本

#/bin/bash

find /backup/ -type f -mtime +180 ! -name "*week1.tar.gz"|xargs rm 2>/dev/null
find /backup/ -type f -name "finger*"|xargs md5sum -c > /tmp/check.txt
mail -s "check info"  33315862@qq.com </tmp/check.txt

最后把脚本添加到定时任务即可

客户端定时任务
0 0 * * * /bin/sh /server/scripts/backup.sh &>/dev/null
服务端定时任务
0 5 * * * /bin/sh /server/scripts/backup_server.sh &>/dev/null

以上就完成了全网备份项目。其实看下来,还是很简单的。细心一点并不难。
在最后的最后,思考还有地方需要完善?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

综合架构备份服务 的相关文章

随机推荐

  • 【颜纠日记】win10开启高性能超频模式,你不知道的N种方法。

    颜纠日记 1 启用游戏模式 Win10 中调整游戏性能最简单的方法 就是启用游戏模式 开启游戏模式 可以通过停止 Windows 更新和一些应用程序的后台活动 来提高游戏帧数 如果不确定是否开启了游戏模式 可以转到 Win I 游戏 游戏模
  • 3D游戏(2)——离散仿真引擎基础

    文章目录 1 简答题 解释 游戏对象 GameObjects 和 资源 Assets 的区别与联系 下载几个游戏案例 分别总结资源 对象组织的结构 指资源的目录组织结构与游戏对象树的层次结构 编写一个代码 使用 debug 语句来验证 Mo
  • Android:WebView加载url网页显示不完整解决办法

    WebView基本用法 如果想要在APP里面加载url网页 或者html代码 首先我们会想到WebView 它的基本用法如下 webview layout xml
  • 基于redis实现延时队列(一)

    背景 最近项目中需要对一条数据 在半小时候更改其状态 类似于提交商城订单半小时后未支付的订单需要更改为超时状态 当然这个解决方案有很多 最好的解决方案是用MQ的死信队列 但由于项目中没有引入MQ 故本文采用的是基于redis与定时器实现该需
  • docker error creating overlay mount to invalid argument 解决方法

    问题原因 由于docker的不同版本在centos上产生的mount问题 1 2 x没有出现这个问题 当使用yum install时 安装的最新版本 1 3 x 会导致overlay2的错误 核心解决方案 etc sysconfig doc
  • Spring Security Oauth2 认证(获取token/刷新token)流程(password模式)

    https blog csdn net bluuusea article details 80284458 1 本文介绍的认证流程范围 本文主要对从用户发起获取token的请求 oauth token 到请求结束返回token中间经过的几个
  • easypoi导出word换行处理

    内容包含换行符 n 导出word时换行符失效 会将换行符 n识别为空格 模板 导出结果 maven
  • Android获取当前时间与星期几 .

    public class DataString private static String mYear private static String mMonth private static String mDay private stat
  • js 判断数组元素是否存在重复项

    方法一 定义测试的数组 1个没有重复元素 1个有重复元素 var arr1 new Array 111 333 222 444 var arr2 new Array aa cc bb dd bb function checkSameElem
  • Java实现一个简单的图书管理系统(内有源码)

    简介 哈喽哈喽大家好啊 之前作者也是讲了Java不少的知识点了 为了巩固之前的知识点再为了让我们深入Java面向对象这一基本特性 就让我们完成一个图书管理系统的小项目吧 项目简介 通过管理员和普通用户的两种操作界面 利用其中的方法以及对象之
  • 光流法介绍

    光流场法的基本思想 在空间中 运动可以用运动场描述 而在一个图像平面上 物体的运动往往是通过图像序列中不同图像灰度分布的不同体现的 从而 空间中的运动场转移到图像上就表示为光流场 Optical Flow Field 光流场反映了图像上每一
  • 华为OD机试 - 字符串加密(Java)

    题目描述 给你一串未加密的字符串str 通过对字符串的每一个字母进行改变来实现加密 加密方式是在每一个字母str i 偏移特定数组元素a i 的量 数组a前三位已经赋值 a 0 1 a 1 2 a 2 4 当i gt 3时 数组元素a i
  • 关于问题【Run-Time Check Failure #2 - Stack around the variable 'data' was corrupted.】

    今天在用VS调代码的时候 会出现这个问题 经过查找以及DEBUG 最终发现是由于建立的数组下标溢出造成的 溢出的下标对应的数组的内容会出现乱码 分析 Run Time Check Failure 2 一般是栈被破坏 你的代码可能有缓冲区溢出
  • 靜下心来--重温正则表达式(二)

    在 靜下心来 重温正则表达式 一 这篇文章中 我们重点介绍了正则表达式的一些基础概念 以及在 String RegExp 的原型上涉及到正则表达式常用 4 个的方法 repalce match test exec 最后介绍了正则表达式的两种
  • 23个机器学习最佳入门项目(附源代码)

    导读 本文为你介绍23种机器学习项目创意 以获取有关该增长技术的真实经验 我们都知道 教科书上所学与实际操作还是有出入的 那关于机器学习有什么好的项目可以实操吗 我们为你推荐这篇文章 在本教程中 涵盖面向初学者 中级专家和专家的23种机器学
  • 个位移传感器数据的实时采集与处理(Matlab)

    个位移传感器数据的实时采集与处理 Matlab 概述 本文介绍如何使用Matlab对个位移传感器数据进行实时采集和处理 个位移传感器是一种常用的传感器 用于测量物体的微小位移 通过实时采集和处理传感器数据 我们可以获得有关物体运动和变形的有
  • Spring源码分析(十)依赖注入源码解析3:DefaultListableBeanFactory#doResolveDependency 真正开始解析依赖项

    4 2 真正开始解析依赖项 最核心方法 org springframework beans factory support DefaultListableBeanFactory doResolveDependency public Obje
  • filter()方法筛选出数组中满足条件的元素

    在开发中遇到对复杂数组中筛选出满足条件的数组元素 进行一下总结 语法 array filter function currentValue index arr thisValue 定义和用法 filter 方法创建一个新的数组 新数组中的元
  • 谷歌浏览器静态资源http请求被转为https请求

    加载图片这些静态资源的时候被转成https的 可能是浏览器的设置原因 谷歌浏览器左上角叹号 网站设置 不安全内改为允许
  • 综合架构备份服务

    备份服务器完成rsync守护进程模式搭建 rsync服务端配置步骤 第一个历程 下载安装软件 检查rsync软件是否安装 rpm qa grep rsync 这个是3 1 2 4版本的 可以重新下载一下 yum install rsync