我正在参加「金石计划」
写在前面
在工作中,我们可能会遇到一些问题,然后通过自己得一顿操作,最终把问题解决了。
可能在一两天之内,我们还是会记得解决这些问题的方法,但是过了一段时间之后,基本上都忘光了。
所以这里,我们应该要养成一个良好的习惯,把每次遇到的问题,如何解决的,都记录下。下次再看文档,这样就想起来了。
<<千与千寻>>有些事情是不可能忘记的,只是一时想不起来
下面,就分享一下,我遇到的一些问题,和相关的解决方法。
可能以前也有分享过一篇,有兴趣的小伙伴,可以查看这里:常用操作合集一、常用操作合集二、常用操作合集三、常用操作合集四、常用操作合集五、常用操作合集六
1.根据进程 PID 找到进程启动目录、二进制、日志位置等信息
bash
#查找进程pid
ps -aux|grep jenkins
#进入到进程目录
cd /proc/2401 #(带上进程pid)
更多详情,可以参考这里:/proc/pid目录详解
2.定时写一个shell脚本,按日期切割nohup.out日志内容
bash
#!/bin/bash
cd /opt/jxbp
# 设置切割文件的前缀和存放目录
NAME=$(basename $(basename "*.out") .out)
PREFIX="/opt/jxbp/*.out"
DATE=$(date +%Y%m%d)
OUTPUT_DIR="/opt/jxbp/log"
LOGFILE="${OUTPUT_DIR}/${NAME}-${DATE}.log"
# 检查目录是否存在,不存在则创建
mkdir -p "$OUTPUT_DIR"
# 将nohup.out的当前内容追加到新的日志文件中
tail -n +1 *.out >> "$LOGFILE"
# 清空.out文件
> ${NAME}.out
# (可选)如果你希望保留一定天数的日志,可以添加删除旧日志的逻辑
# 例如,保留最近7天的日志
find "$OUTPUT_DIR" -name "${NAME}-*.log" -type f -mtime +7 -delete
添加该shell脚本,到定时器任务中:
sh
echo "*/1 * * * * /opt/llxydn/logback.sh" | crontab -
3.vue-devtools下载
4.mysql排序字段重复,导致分页出现重复数据问题
如果多行在 order by 列中具有相同的值,则服务器可以自由地以任何顺序返回这些行,并且可能会根据整体执行计划以不同的方式返回这些行。换句话说,这些行的排序顺序相对于无序列来说是不确定的。
例如:
sql
--对age进行排序
select * from user order by age limit 0,10
--当age出现重复数据的时候,分页后,可能第1页出现的数据,会在第二页重复出现
select * from user order by age limit 10,10
解决方法:
- 方法一:给排序字段添加索引
csharp
create index user_age_idx on user(age);
- 方法二:在order by子句中加入具有唯一性的列
sql
-- asc升序
select * from user order by age,id asc limit 0,10
-- desc降序
select * from user order by age desc ,id limit 0,10
id是自增字段
5.达梦数据库修改字段类型
sql
-- 增加一个新字段
alter table FORM_CUSTOM_QUERY add SQL_1 clob;
-- 将旧字段的数据先更新到新字段中(注:如果你表中没数据,这步可以不用做)
update FORM_CUSTOM_QUERY set SQL_1 = SQL_;
-- 删除旧字段
alter table FORM_CUSTOM_QUERY drop column SQL_;
-- 将新字段改名为旧字段
alter table FORM_CUSTOM_QUERY rename column SQL_1 to SQL_;
6.统计公司网站(nginx)用户城市分布
使用到Maxmind的客户端库, libmaxminddb的github地址, 可以下载源码进行编译安装,用于读取Maxmind数据库文件,将ip解析出对应的地理位置,通过地理位置就可拿到城市等信息。
需要到Maxmind官网下载地理位置数据库文件,GeoLite2-City.mmdb
对nginx的日志文件access.log进行解析。
创建shell脚本文件: nginx_log_geoip.sh
sh
#!/bin/bash
log_file="./access.log"
geoip_file="./GeoLite2-City.mmdb"
result_file="./result.log"
while read LINE; do
ip=$(echo $LINE | awk '{print $1}')
mmdblookup --file $geoip_file --ip "$ip" city names zh-cN 2>/dev/null
| awk -F'"' '{print $2}' >> $result_file
done < $log file
grep -Ev "^$" $result_file | sort | uniq -c | sort -k1 -nr
该shell脚本解析如下:
log_file为 nginx日志文件路径
geoip_file为 Maxmind的地理位置对应城市的数据库文件
result_file为 输出结果文件
while,循环遍历nginx日志文件每一行,进客户端ip提取出来,使用mmdblookup获得ip对应的城市,输出到结果文件
grep,使用grep过滤出非空行的城市,通过sort进行排序,通过uniq -c去重统计次数,再用sort k1对于次数做一个排序
nginx对应访问日志格式如下:
7.基于nginx实现灰度上线系统
1.基于权重的流量切分
nginx将用户流量按比例转发到新版本,一旦新版本验证通过,再将流量切换到新版本。
使用upstream配置权重即可。
nginx
upstream webservers{
server 192.168.0.1 weight=9;
server 192.168.0.2 weight=1;
}
2.基于客户端请求的流量切分
nginx通过获取客户端携带的cookie或者http请求头或者指定的键值对,来去将流量转发到新版本,一旦新版本验证通过,再将流量切换到新版本。
nginx
set $backend "webservers"
#当客户端携带的cookie,包含canary=yes键值对,将backend设置为灰度版本
if($http_cookie ~* "canary=yes"){
set $backend "webservers-canary"
}
location / {
proxy_pass http://$backend; #这里使用动态值
}
好了,以上就是我个人的实操了。可能有些不对,大家伙,轻点喷!!!
个人理解,可能也不够全面,班门弄斧了。
好了,今天就先到这里了!!!^_^
如果觉得有收获的,帮忙点赞、评论、收藏
一下,再走呗!!!