!/usr/bin/env python3
–– coding:utf-8 ––
import time
import os
import sys
print()
input_num_value = int(input(“请输入转换的天数:”))
time_convert_value = input_num_value * 24 * 60 * 60 #天转秒
time_cur_value = time.time() #当前日期的秒
time_convert_mes = time_cur_value + time_convert_value #求秒+当前秒=和秒
time_day = time.gmtime(time_convert_mes) #转换日期
time_day_format = time.strftime(“%Y-%m-%d %H:%M:%S”,time.gmtime(time_convert_mes))
print()
print(‘天数转换后的年月日: {}’.format(time_day_format))
print()
FastDFS文件同步机制简介
FastDFS文件同步采用binlog异步复制方式。storage server使用binlog文件记录文件上传、删除等操作,根据binlog进行文件同步。binlog中只记录文件ID和操作,不记录文件内容。下面给出几行binlog文件内容示例:
1572660675 C M00/00/00/oYYBAF285cOIHiVCAACI-7zX1qUAAAAVgAACC8AAIkT490.txt
1572660827 c M00/00/00/oYYBAF285luIK8jCAAAJeheau6AAAAAVgABI-cAAAmS021.xml
1572660911 D M00/00/00/oYYBAF285cOIHiVCAACI-7zX1qUAAAAVgAACC8AAIkT490.txt
1572660967 d M00/00/00/oYYBAF285luIK8jCAAAJeheau6AAAAAVgABI-cAAAmS021.xml
从上面可以看到,binlog文件有三列,依次为时间戳、操作类型和文件ID(不带group名称)。
文件操作类型采用单个字母编码,其中源头操作用大写字母表示,被同步的操作为对应的小写字母。文件操作字母含义如下:
C :上传文件(upload)
D:删除文件(delete)
A:追加文件(append)
M:部分文件更新(modify)
U:整个文件更新(set metadata)
T:截断文件(truncate)
L:创建符号链接(文件去重功能,相同内容只保存一份)
同组内的storage server之间是对等的,文件上传、删除等操作可以在任意一台storage server上进行。文件同步只在同组内的storage server之间进行,采用push方式,即源头服务器同步给本组的其他存储服务器。对于同组的其他storage server,一台storage server分别启动一个线程进行文件同步。
文件同步采用增量方式,记录已同步的位置到mark文件中。mark文件存放路径为 $base_path/data/sync/。mark文件内容示例:
binlog_index=3
binlog_offset=382
need_sync_old=1
sync_old_done=1
until_timestamp=1571976211
scan_row_count=2033425
sync_row_count=2033417
采用binlog的异步复制方式,必然存在同步延迟的问题,比如mysql的主从数据同步。下一篇文章将介绍FastDFS是如何解决文件异步复制带来的延迟问题,敬请期待。
最后留给大家一个问题,为什么binlog记录的文件操作类型有大小写的两套呢(如C和c、D和d等)?
awk数字过滤
netstat -lntp|awk {'print $4'}|awk -F ':' '{if ($NF~/^[0-9]$/) print $NF}'|sort|uniq
netstat -lntp|awk '{print $4}'|awk -F ':' '/[0-9]/{print $NF}'|sort|uniq
netstat -lntp|awk {'print $4'}|awk -F ':' '{print $NF}'|egrep "^[0-9]$"|sort|uniq
结果:
22
3306
为什么执行这句无任何显示
netstat -lntp|awk {‘print $4’}|awk -F ‘:’ ‘/^[0-9]*$/{print $1}’|sort|uniq
但在txt文本又能生效
[root@oldboy scripts]# cat test.txt
(only
Local
22
a3306
22
3306
4473f
56789
[root@oldboy scripts]# cat test.txt|awk -F ':' '/[0-9]/{print $1}'|sort|uniq
22
3306
4473f
56789
a3306
[root@oldboy scripts]# cat test.txt|awk -F ':' '/^[0-9]$/{print $1}'|sort|uniq
[root@oldboy scripts]# cat test.txt|awk -F ':' '/^[0-9]*$/{print $1}'|sort|uniq
22
3306
56789
总结:
- netstat 不需要多次匹配
- cat 需要多次匹配
- netstat 是一行处理 cat 是多行处理
Linux的net.ipv4.tcp_timestamps参数
Q1
在家里无法打开公司的网站,经过各种测试,利用ping、dig域名,然后curl,都正常。但是网站依然无法打开。最后,采用抓包的方式,从包中看到syn-ack没有返回,然后就百度。
经过查找net.ipv4.tcp_timestamps=1,启用了时间戳。
原理如下:
tcp三次握手问题,当有一个用户的时间戳大于这个链接发出的syn中的时间戳,服务器上就会忽略掉这个syn,不返会syn-ack消息。用户表现无法正常完成tcp3次握手,从而不能打开web页面。在业务闲时,如果用户nat的端口没有被使用过时,就可以正常打开;业务忙时,nat端口重复使用的频率高,很难分到没有被使用的端口,从而产生这种问题。
解决:
net.ipv4.tcp_timestamps = 0
然后syctlp -p生效即可。
Q2
由于乱序,当发送rst包到对端的时候,连接还是establish的rst后,链接就会断开, 后来使得net.ipv4.tcp_timestamps = 0,问题解决。
mysql 案例
create table student
(
id int(4) not null,
name char(20) not null,
age tinyint(2) not null,
dept varchar(16) not null
);
=====================联表查询====================
create table student(
Sno int(10) not null comment ‘学号’,
Sname varchar(16) not null comment ‘姓名’,
Ssex char(6) not null comment ‘性别’,
Sage tinyint(2) not null default ‘0’ comment ‘学生年龄’,
Sdept varchar(16) default null comment ‘学生所在系别’,
primary key (Sno),
key index_Sname(Sname)
) engine=innodb auto_increment=1 default charset=utf8;
create table course(
Cno int(10) not null comment ‘课程号’,
Cname varchar(64) not null comment ‘课程名’,
Ccredit tinyint(2) not null comment ‘学分’,
primary key (Cno)
) engine=innodb auto_increment=1 default charset=utf8;
create table SC(
SCid int(12) not null auto_increment comment ‘主键’,
Cno int(10) not null comment ‘课程号’,
Sno int(10) not null comment ‘学号’,
Grade tinyint(2) not null comment ‘学生成绩’,
primary key (SCid)
) engine=innodb default charset=utf8;
随便插入学生数据
insert into student values(0001,’hognzhi’,’male’,30,’jisuanji’),(0002,’wammg’,’male’,30,’jisuanji’) ,(0003,’oldboy’,’male’,28,’wuliu’) ,(0004,’ts’,’male’,29,’jisuanji’) ,(0005,’oldgirl’,’female’,30,’jisuanji’) ,(0006,’yuany’,’female’,22,’nurse’);
insert into course values(1001,’Linuxyunwei’,3),(1002,’Linuxyunwei’,5),(1003,’Linuxyunwei’,4),(1004,’Linuxyunwei’,4),(1001,’Linuxyunwei’,3);
insert into SC(Sno,Cno,Grade) values(0001,1001,4);
insert into SC(Sno,Cno,Grade) values(0001,1002,3);
insert into SC(Sno,Cno,Grade) values(0001,1003,1);
insert into SC(Sno,Cno,Grade) values(0001,1003,6);
insert into SC(Sno,Cno,Grade) values(0002,1001,3);
insert into SC(Sno,Cno,Grade) values(0002,1002,2);
insert into SC(Sno,Cno,Grade) values(0002,1003,2);
insert into SC(Sno,Cno,Grade) values(0002,1003,8);
insert into SC(Sno,Cno,Grade) values(0003,1001,4);
insert into SC(Sno,Cno,Grade) values(0003,1002,4);
insert into SC(Sno,Cno,Grade) values(0003,1003,2);
insert into SC(Sno,Cno,Grade) values(0003,1003,8);
insert into SC(Sno,Cno,Grade) values(0004,1001,1);
insert into SC(Sno,Cno,Grade) values(0004,1002,1);
insert into SC(Sno,Cno,Grade) values(0004,1003,2);
insert into SC(Sno,Cno,Grade) values(0004,1003,3);
insert into SC(Sno,Cno,Grade) values(0005,1001,5);
insert into SC(Sno,Cno,Grade) values(0005,1002,3);
insert into SC(Sno,Cno,Grade) values(0005,1003,2);
insert into SC(Sno,Cno,Grade) values(0005,1003,9);
联表查询
select student.Sno,student.Sname,course.Cname,SC.Grade from student, course, SC where student.Sno=SC.Sno and course.Cno=SC.Cno;
select student.Sno,student.Sname,course.Cname,SC.Grade from student, course, SC where student.Sno=SC.Sno and course.Cno=SC.Cno order by Sno;
在where后面建索引
explain 查询select 查询语句执行计划
就是查询这个语句,能不能走索引?
use oldboy;
drop table test;
create table test(
id int(4) not null auto_increment,
name char(20) not null,
primary key (id)
);
insert into test values(1,’oldboy’),(2,’oldgir’),(3,’inca’),(4,’zuma’),(5,’kaka’);
select * from test where name=’oldboy’;
explain select * from test where name=’oldboy’;
explain select * from test where name=’oldboy’\G;
create index index_name on test(name);
建索引和没有建索引的区别
mysql> explain select * from test where name=’oldboy’\G
* 1. row *
id: 1
select_type: SIMPLE
table: test
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 5
Extra: Using where
1 row in set (0.00 sec)
mysql> create index index_name on test(name);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> explain select * from test where name=’oldboy’\G
* 1. row *
id: 1
select_type: SIMPLE
table: test
type: ref
possible_keys: index_name
key: index_name
key_len: 60
ref: const
rows: 1
Extra: Using where; Using index
1 row in set (0.00 sec)
学习故障
排查故障,是上天给你难得的提升机会且珍惜。
1、一般解决故障,先看故障日志;
2、解决不了,再g>b,搜索关键字,尽量唯一;
3、知识点学习,查看软件帮助或者官方手册;
4、看不懂英文,先找中文再来尝试看英文;
centos 6 更新Yum源
国外centos6的镜像停止维护,阿里云源作为新源修复为新的可用地址方法
1、备份原有源mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2、下载阿里云源wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-6.repo 或
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-6.repo
3、替换为阿里云新源地址
sed -i -e ‘s/centos\/\$releasever/centos-vault\/6.10/g’ /etc/yum.repos.d/CentOS-Base.repo
epel源修复:第一步:备份原有源
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup
2、下载阿里云源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
3、替换为阿里云新源地址
sed -i -e ‘s/com\/epel/com\/epel-archive/g’ /etc/yum.repos.d/epel.repo
命令汇总:
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-6.repo
sed -i -e ‘s/centos\/\$releasever/centos-vault\/6.10/g’ /etc/yum.repos.d/CentOS-Base.repo
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
sed -i -e ‘s/com\/epel/com\/epel-archive/g’ /etc/yum.repos.d/epel.repo
参考文章
https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.3e221b117DQxFM
https://developer.aliyun.com/mirror/epel?spm=a2c6h.13651102.0.0.60381b11jAhAqL
https://help.aliyun.com/document_detail/193569.htmlhttps://developer.aliyun.com/article/779734?spm=a2c6h.14164896.0.0.1dc92e6eqpFBjk
官方源、镜像源汇总
(一)、企业站
搜狐:http://mirrors.sohu.com/
网易:http://mirrors.163.com/
阿里云:http://mirrors.aliyun.com/
腾讯:http://android-mirror.bugly.qq.com:8080/(仅针对APP开发的软件,限流,不推荐) 淘宝:http://npm.taobao.org/
(二)、教育站
上海交通大学:http://ftp.sjtu.edu.cn/html/resources.xml(部分移动运营商出口状况不佳,无法访问)
华中科技大学:http://mirror.hust.edu.cn/(当前已用容量估计:4.83T)
清华大学:http://mirrors.tuna.tsinghua.edu.cn/(当前已用容量估计:9.8T)
北京理工大学:http://mirror.bit.edu.cn/web/
兰州大学:http://mirror.lzu.edu.cn/ 中国科技大学:
http://mirrors.ustc.edu.cn/(当前已用容量估计:21.32T)
大连东软信息学院:http://mirrors.neusoft.edu.cn/(当前已用容量估计:2.5T)
东北大学:http://mirror.neu.edu.cn/
大连理工大学:http://mirror.dlut.edu.cn/
哈尔滨工业大学:http://run.hit.edu.cn/html/(部分联通运营商出口状况不佳,无法访问) 北京交通大学:http://mirror.bjtu.edu.cn/cn/
天津大学:http://mirror.tju.edu.cn(无法访问,ping超时) 中国地质大学:http://mirrors.cug.edu.cn/(当前已用容量估计:2.3T)
浙江大学:http://mirrors.zju.edu.cn/
厦门大学:http://mirrors.xmu.edu.cn/
中山大学:http://mirror.sysu.edu.cn/
重庆大学:http://mirrors.cqu.edu.cn/(当前已用容量估计:3.93T)
北京化工大学:http://ubuntu.buct.edu.cn/(Android SDK镜像仅供校内使用,当前已用容量估计:1.72T)
南阳理工学院:http://mirror.nyist.edu.cn/
中国科学院:http://www.opencas.org/mirrors/
电子科技大学:http://ubuntu.uestc.edu.cn/(无法访问,ping超时)
电子科技大学星辰工作室:http://mirrors.stuhome.net/(当前已用容量估计:1.08T)
西北农林科技大学:http://mirrors.nwsuaf.edu.cn/(只做CentOS镜像,当前已用容量估计:140GB)
浙江大学:http://mirrors.zju.edu.cn/
台湾淡江大学: http://ftp.tku.edu.tw/Linux/
软件版
(一)、操作系统类
1.Ubuntu阿里云:http://mirrors.aliyun.com/ubuntu-releases/
网易:http://mirrors.163.com/ubuntu-releases/
搜狐:http://mirrors.sohu.com/ubuntu-releases/(搜狐在12年之后似乎不同步了)
首都在线科技股份有限公司:http://mirrors.yun-idc.com/ubuntu-releases/
2.CentOS网易:http://mirrors.163.com/centos/
搜狐:http://mirrors.sohu.com/centos/
阿里云:http://mirrors.aliyun.com/centos/
top
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。
$top top - 09:14:56 up 264 days, 20:56, 1 user, load average: 0.02, 0.04, 0.00 Tasks: 87 total, 1 running, 86 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.2%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.2%st Mem: 377672k total, 322332k used, 55340k free, 32592k buffers Swap: 397308k total, 67192k used, 330116k free, 71900k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 2856 656 388 S 0.0 0.2 0:49.40 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 7:15.20 ksoftirqd/0 4 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
-
第一行
- 09:14:56 : 系统当前时间
- 264 days, 20:56 : 系统开机到现在经过了多少时间
- 1 users : 当前2用户在线
- load average: 0.02, 0.04, 0.00: 系统1分钟、5分钟、15分钟的CPU负载信息
-
第二行
- Tasks:任务;
- 87 total:很好理解,就是当前有87个任务,也就是87个进程。
- 1 running:1个进程正在运行
- 86 sleeping:86个进程睡眠
- 0 stopped:停止的进程数
- 0 zombie:僵死的进程数
-
第三行
- Cpu(s):表示这一行显示CPU总体信息
- 0.0%us:用户态进程占用CPU时间百分比,不包含renice值为负的任务占用的CPU的时间。
- 0.7%sy:内核占用CPU时间百分比
- 0.0%ni:改变过优先级的进程占用CPU的百分比
- 99.3%id:空闲CPU时间百分比
- 0.0%wa:等待I/O的CPU时间百分比
- 0.0%hi:CPU硬中断时间百分比
- 0.0%si:CPU软中断时间百分比
- 注:这里显示数据是所有cpu的平均值,如果想看每一个cpu的处理情况,按1即可;折叠,再次按1;
-
第四行
- Men:内存的意思
- 8175320kk total:物理内存总量
- 8058868k used:使用的物理内存量
- 116452k free:空闲的物理内存量
- 283084k buffers:用作内核缓存的物理内存量
-
第五行
- Swap:交换空间
- 6881272k total:交换区总量
- 4010444k used:使用的交换区量
- 2870828k free:空闲的交换区量
- 4336992k cached:缓冲交换区总量
-
进程信息
- 再下面就是进程信息:
- PID:进程的ID
- USER:进程所有者
- PR:进程的优先级别,越小越优先被执行
- NInice:值
- VIRT:进程占用的虚拟内存
- RES:进程占用的物理内存
- SHR:进程使用的共享内存
- S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数
- %CPU:进程占用CPU的使用率
- %MEM:进程使用的物理内存和总内存的百分比
- TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。
- COMMAND:进程启动命令名称
实例
实例1:多核CPU监控
在top基本视图中,按键盘数字“1”,可监控每个逻辑CPU的状况;
[rdtfr@bl685cb4-t ^]$ top top - 09:10:44 up 20 days, 16:51, 4 users, load average: 3.82, 4.40, 4.40 Tasks: 1201 total, 10 running, 1189 sleeping, 0 stopped, 2 zombie Cpu0 : 1.3%us, 2.3%sy, 0.0%ni, 96.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu1 : 1.3%us, 2.6%sy, 0.0%ni, 96.1%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu2 : 1.0%us, 2.0%sy, 0.0%ni, 92.5%id, 0.0%wa, 0.0%hi, 4.6%si, 0.0%st Cpu3 : 3.9%us, 7.8%sy, 0.0%ni, 83.2%id, 0.0%wa, 0.0%hi, 5.2%si, 0.0%st Cpu4 : 4.2%us, 10.4%sy, 0.0%ni, 63.8%id, 0.0%wa, 0.0%hi, 21.5%si, 0.0%st Cpu5 : 6.8%us, 12.7%sy, 0.0%ni, 80.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu6 : 2.9%us, 7.2%sy, 0.0%ni, 85.3%id, 0.0%wa, 0.0%hi, 4.6%si, 0.0%st Cpu7 : 6.2%us, 13.0%sy, 0.0%ni, 75.3%id, 0.0%wa, 0.0%hi, 5.5%si, 0.0%st Mem: 32943888k total, 32834216k used, 109672k free, 642704k buffers Swap: 35651576k total, 5761928k used, 29889648k free, 16611500k cached
实例2:高亮显示当前运行进程
在top基本视图中,按键盘“b”(打开/关闭加亮效果);
实例3:显示完整的程序命令
命令:top -c
[rdtfr@bl685cb4-t ^]$ top -c top - 09:14:35 up 20 days, 16:55, 4 users, load average: 5.77, 5.01, 4.64 Tasks: 1200 total, 5 running, 1192 sleeping, 0 stopped, 3 zombie Cpu(s): 4.4%us, 6.0%sy, 0.0%ni, 83.8%id, 0.2%wa, 0.0%hi, 5.5%si, 0.0%st Mem: 32943888k total, 32842896k used, 100992k free, 591484k buffers Swap: 35651576k total, 5761808k used, 29889768k free, 16918824k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2013 apache 18 0 403m 88m 5304 S 25.0 0.3 6:37.44 /usr/sbin/httpd 18335 pubtest 22 0 65576 996 728 R 7.8 0.0 0:00.24 netstat -naltp 16499 rdtfare 15 0 13672 2080 824 R 2.6 0.0 0:00.38 top -c 29684 rdtfare 15 0 1164m 837m 14m S 2.3 2.6 148:47.54 ./autodata data1.txt 12976 pubtest 18 0 238m 9000 1932 S 1.6 0.0 439:28.44 tscagent -s TOEV_P
实例4:显示指定的进程信息
命令:top -p pidid
/opt/app/tdv1/config#top -p 17265 top - 09:17:34 up 455 days, 17:55, 2 users, load average: 3.76, 4.56, 4.46 Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie Cpu(s): 7.8%us, 1.9%sy, 0.0%ni, 89.2%id, 0.0%wa, 0.1%hi, 1.0%si, 0.0%st Mem: 8175452k total, 8103988k used, 71464k free, 268716k buffers Swap: 6881272k total, 4275424k used, 2605848k free, 6338184k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 17265 tdv1 15 0 56504 828 632 S 0.0 0.0 195:53.25 redis-server
指定进程信息有多个时,需要结合其它工具将回车替换为,(-p 支持pid,pid,pid语法)
命令:top -p pgrep MULTI_PROCESS | tr “\n” ”,” | sed ‘s/,$//’
/opt/app/tdv1$top -p `pgrep java | tr "\\n" "," | sed 's/,$//'` top - 14:05:31 up 53 days, 2:43, 9 users, load average: 0.29, 0.34, 0.22 Tasks: 3 total, 0 running, 3 sleeping, 0 stopped, 0 zombie Cpu(s): 5.9%us, 8.2%sy, 0.0%ni, 86.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 66082088k total, 29512860k used, 36569228k free, 756352k buffers Swap: 32767992k total, 1019900k used, 31748092k free, 15710284k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 27855 rdtfare 20 0 4454m 1.3g 5300 S 0.7 2.0 338:31.37 java 2034 jenkins 20 0 18.3g 5.2g 5284 S 0.3 8.2 56:02.38 java
继8月8日开张
继续捣鼓