[按键精灵手机版] 解决丢失UI配置/UI会被重置问题。
[scode type="blue"]
问题描述:
运行之后UI配置丢失,即UI配置无法保存,脚本读取的时候为null[/scode]
[scode type="green"]
[scode type="blue"]
运行之后UI配置丢失,即UI配置无法保存,脚本读取的时候为null[/scode]
[scode type="green"]
匹配条件总结:
匹配条件:源地址
iptables -t filter -I INPUT -s 192.168.0.1,192.168.0.2 -j DROP
指定源地址,一次指定多个
iptables -t filter -I INPUT -s 192.168.0.0/25 -j ACCEPT
指定源地址,指定一个网段
iptables -t filter -I INPUT -s !192.168.0.1 -j ACCEPT
条件取反,只要源ip不是192.168.0.1那么就接受此报文,但是源地址是192.168.0.1时并不代表会被拒绝
匹配条件:目标地址
iptables -t filter -I INPUT -s 192.168.0.1 -d 192.168.5.138 -j DROP
-d 192.168.5.138为目标地址
拒绝源地址为192.168.0.1向192.168.5.138的报文
iptables -t filter -I INPUT -d 192.168.5.138 -j DROP
拒绝所有发送到192.168.5.138的报文
匹配条件:协议类型
iptables -I INPUT -s 192.168.5.1 -d 192.168.5.138 -p tcp -j REJECT
拒绝源地址192.168.5.1向目标地址192.168.5.138的tcp协议报文
匹配类型:扩展匹配条件
iptales -t filter -I INPUT -s 192.168.1.1 -p tcp -m tcp --dport 22 -j REJECT
-p 代表协议
-m tcp 代表对应的扩展模块为tcp
--dport 扩展匹配条件,如果要使用这个扩展匹配条件必须要依靠某个模块来完成,这个就是tcp的扩展模块
拒绝源地址192.168.1.1 访问目标端口 22
iptables -t filter -I INPUT -s 192.168.0.1 -p tcp --sport 22 -j ACCEPT
--sport 22 表示源端口 22
扩展条件是可以取反的: !--sport 22 表示目标端口不是22的报文将会被匹配到
iptables -t filter -I INPUT -s 192.168.1.1 -p tcp -m --dport 22:25 -j REJECT
22:25 指定端口范围(22、23、24、25)
:22 表示0到22端口
80: 表示80开始到65505
multiport模块 --sports 扩展条件可以同时指定多个离散的源端口。
multiport模块 --dports 扩展条件可以同时指定多个离散的目标端口。
ipables -t filter -I INPUT -s 192.168.1.1 -p tcp -m multiport --dports 22,36,38 -j DROP
禁止源地址192.168.1.1访问22,36,38端口
iptables -t filter -I INPUT -s 192.168.0.1 -p tcp *m multiport --dports 22,80:88 -j DROP
22,80:88 表示22端口,80到88端口
multiport扩展只能用于tcp和udp协议,即配合-p tcp 或者 -p udp 使用
匹配条件:匹配报文从哪个网卡流出
iptables -t filter -I OUTPUT -p icmp -o eth4 -j DROP
-o 匹配icmp协议的报文禁止从 eth4 流出
匹配条件只用于匹配报文流出的网卡,所以在INPUT链和PREROUTING链中不能使用此选项。
iprange 扩展模块:
指定一段范围连续的IP地址,用于匹配源地址和目标地址
--src-range 源地址
--dst-range 目标地址
iptables -t filter -I INPUT -m iprange --src-range 192.168.1.1-192.168.1.10 -j DROP
表示源地址在192.168.1.1到192.168.1.10之间,则丢弃报文。ip段的始末用 - 隔开。
也可以使用 ! 取反。
string 扩展模块:
指定要匹配的字符串,如果报文有包含对应的字符串,则符合匹配条件。
iptables -t filter -I INPUT -m string --algo bm --string "123" -j REJECT
如果报文有 123 字符串则匹配成功。
--algo 指定匹配算法,可选的有 bm 和 kmp,必须指定。
--string 用于指定需要匹配的字符串。
time 扩展模块:
根据时间匹配报文,如果报文到达的时间在指定的时间范围内到达,则符合匹配条件。
比如:每天早上的6点到晚上的20点不能看网页。。。。。
iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --timestart 06:00:00 --timestop 20:00:00 -j REJECT
iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --weekday 6,7 -j REJECT
只有周六日不能上网
time --weekday 6,7 表示周六日
iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --timestart 09:00:00 --timestop 20:00:00 --weekdays 6,7 -j REJECT
--timestart 09:00:00 --timestop 20:00:00 --weekdays 6,7
结合使用,表示每周日的9点到20点不能上网。
iptables -t filter -I OUTPOT -p tcp --dport 80 -m time --monthdays 22,23 -j REJECT
--monthdays 22,23
表示每个月的22号23号
iptables -t filter -I OUTPOT -p tcp --dport 80 -m time --weekdays 5 --monthdays 22,23,24,25,26,27,28 -j REJECT
多个条件之间默认存在 与 关系,上述设置表示
匹配的时间必须为星期5,并且这个星期5同时还需要时每个月的22号到28号之间的一天。
iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --datestar 2018-02-02 --datestop 2018-02-23 -j REJECT
--datestart 2018-02-02 --datestop 2018-02-23 指定日期范围。
指定日期范围,--monthdays 与 --weekdays 可以 ! 取反,其他选项不能取反。
connlimit 扩展模块:
可以限制每个IP地址同时链接到server端的链接数量,可以不用指定ip,默认针对“每个客户端IP” ,即对单IP的并发连接数限制。
iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT
--connlimit-above 2
限制每个IP地址最多只能占用两个ssh链接远程到server端。
limit 扩展模块:
limit 模块是对“报文到达速率”进行限制的。
比如:我想限制单位时间内流入的包的数量。
iptables -t filter -I INPUT -p icmp -m limit --limit 10/minute -j ACCEPT
iptables -t filter -A INPUT -p icmp -j REJECT
第一行表示每分钟最多放行10个icmp包,也即是6秒放行一个,第六秒的icmp包才会被上述的第一条规则匹配到。第六秒之前的包则不会被匹配到。
于是被后面的拒绝规则匹配到了。
--limit-burst : 指定“空闲时可放行的包的数量”。
令牌桶算法:--limit 指定多长时间生成一个新令牌, --limit-burst 用于指定“木桶中最多存放几个令牌”
iptables -t filter -I INPUT -p icmp -m limit --limit-burst 3 --limit 10/minute -j ACCEPT
--limit-burst 3 : 表示最多存放3个令牌。
--limit 10/minute : 表示每分钟生成10个令牌。
icmp 扩展:
iptables -t filter -I INPUT -p icmp -j REJECT
禁止所有ping,包括外部ping和内部ping
iptables -t filter -I INPUT -p icmp -m icmp --icmp-type 8 -j REJECT
--icmp-type 8 : icmp扩展类型 8
禁止外部ping,但是内部可以ping通
黑名单白名单:
白名单机制:我们就要把所有人都当做坏人,只放行好人。
当链的默认策略为DROP时,链中的规则对应的动作应该为ACCEPT,表示只有匹配到规则的报文才会被放行,没有被匹配到的报文都会被默认拒绝,这就是白名单机制。
黑名单机制:我们就要把所有人都当做好人,只拒绝坏人。
当链的默认策略为ACCEPT时,链中的规则对应的动作应该为DROP或者REJECT,表示只有匹配到规则的报文才会被放行,没有被规则匹配到的报文都会被默认拒绝,这就是白名单。
白名单似乎更加安全,黑名单机制似乎更加灵活一些。
默认策略设置为DROP的缺点:
在对应的链中没有设置任何规则时,这样使用默认策略为DROP是非常不明智的,因为管理员也会把自己拒之门外,即使对应的链中存在放行规则,当我们不小心使用"iptables -F"清空规则时,放行规则被删除,则所有数据包都无法进入,这个时候就相当于给管理员挖了个坑,所以,我们如果想要使用"白名单"的机制,最好将链的默认策略保持为"ACCEPT",然后将"拒绝所有请求"这条规则放在链的尾部,将"放行规则"放在前面,这样做,既能实现"白名单"机制,又能保证在规则被清空时,管理员还有机会连接到主机,示例如下。
我们只允许22端口和80端口放行:
iptables -t filter -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -j REJECT #在表的最后面追加规则,没有匹配到的一律拒绝
上述设置既将 INPUT 的默认策略设置为了 ACCEPT 同时又使用了白名单机制,因为如果报文符合放行条件,则会被前面的放行规则匹配到,如果报文不符合放行条件,则会被最后一条规则匹配到,此刻,即使我么误操作,执行了 “ iptables -F “ 操作,也能保证管理员能够远程到主机上维护,因为默认策略仍然是 ACCEPT 。
iptables 自定义链:
当默认链的规则太多的时候不方便管理,自定义链方便管理。
自定义链不能直接使用,需要用过默认链的引用才能够使用。
iptables -t filter -N IN_WEB
-N 新建自定义链 IN_WEB
iptables -t filter -I IN_WEB -s 192.168.5.136 -j REJECT
在自定义链中添加规则
默认链引用自定义链:
iptables -t filter -I INPUT -p tcp --dport 80 -j IN_WEB
修改自定义的链名称:
iptables -E IN_WEB WEB
删除自定义链:
需要满足两个条件:
1.自定义链表中没有被任何默认链引用,即自定义链的计数为0。
2.自定义链中没有任何规则,则自定义链为空。
iptabels -X IN_WEB
清空自定义链表:
iptables -filter -F IN_WEB
开启核心转发功能:
临时生效:
1.修改文件:vi /proc/sys/net/ipv4/ip_forward #将里面的 0 修改为 1
2.命令开启:sysctl -w net.ipv4.ip_forward=0
永久生效:
修改文件:centos7 中 配置文件 /usr/lib/sysctl.d/00-system.conf
添加或者修改配置项: net.ipv4.ip_forward = 1 即可
state 扩展模块:
报文的 “连接状态”
NEW:连接中的第一个包,状态都是 NEW ,我们可以理解新连接的第一个包状态为 NEW
ESTABLISHED:我们可以把 NEW 状态包后面的状态理解为 ESTABLISHED ,表示连接已建立。
RELATED:从字面理解 RELATED 译为关系。
INVALID:如果一个包没有办法被识别,或者这个包没有任何状态,那么这个包的状态就是 INVALID ,我们可以主动屏蔽状态为 INVALID 的包。
UNTRACKED :报文的状态为UNTRACKED 时,表示报文未被追踪,当报文的状态为 UNTRACKED 时通常表示无法找到相关的连接。
动作 REJECT :
--reject-with
使用--reject-with选项,可以设置提示信息,当对方被拒绝时,会提示对方为什么会被拒绝
可用值如下:
icmp-net-unreacgable
icmp-host-unreacgable
icmp-port-unreachable
icmp-proto-unreachable
icmp-net-prohibited
icmp-host-pro-hibited
icmp-admin-prohibited
当不设置任何值时,默认值为 icmp-port-unreachable
iptables -I INPUT 1 -j REJECT --reject-with icmp-hots-unreachable
动作LOG:
log动作负责记录匹配到的报文的相关信息,不对报文进行其他处理
iptables -I INPUT -p tcp --dport 22 -j LOG
上述记录 发往22端口的报文相关信息记录在日志中
默认日志文件:/var/log/messages
修改保存日志记录文件位置:/etc/rsyslog.conf,添加 kern.warning /var/log/iptables.log
LOG动作:
--log-level 选项可以指定记录日志的日志级别,可用级别有emerg,alert,crit,warning,notice,info,debug
-log-prefix 选项可以给记录的相关信息添加 “标签” 之类额的信息,以便区分各种记录的报文信息,方便在分析时进行过滤。对应的值不能超过29个字符。
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -j LOG --log-prefix "want-in-from-port-22"
将主动连接22端口的报文的相关信息都记录在日志中。并且把这类记录命名为 want-in-from-port-22
SNAT 动作:
网络内部的主机可以借助 SNAT 隐藏自己的ip地址,同时还能共享合法的公网ip,让局域网的多台主机共享公网的ip地址访问互联网。
相当于NAT功能的设备,iptables的SNAT动作就是达到目的。.
iptables -t nat -A POSTROUTING - s 10.1.0.0/24 -j SNAT --to-source 192.168.5.138
此规则表示将来自于10.1.0.0/24 网段的报文的源地址改为 192.168.5.138 。
-t nat 表示操作 nat 表,filter 表的功能是过滤,nat 表的功能是地址转换。
-A POSTROUTING 表示将 SNAT 规则添加到 POSTROUTING 链的末尾,在centos中,SNAT规则只能存在于POSTROUTING 链和 INPUT 链中,在centos 6中 ,SANT 规则只能存在于 POSTROUTINGl 链中。
-s 10.1.0.1/24 表示报文源自于此网段。
-j SNAT 表示使用 SNAT 动作 ,对匹配到的报文进行处理,对匹配到的报文进行源地址转换。
--to-source 192.168.5.138 表示将匹配到的报文的源地址修改为192.168.5.138 。
动作 DNAT:
iptables -t nat -I PERTOUTING -d 192.168.5.136 -p tcp --dport 3389 -j DNAT --to-destination 10.1.0.5:3389
-t nat -I PREROUTING : 表示在nat表中的PREROUTING 链中配置 DNAT 规则, DNAT 规则只配置在 PERROUTING 链与 OUTPUT 链中。
-d 192.168.5.138 -p tcp --dport 3389 : 表示报文的目标地址为公司的公网ip地址。目标端口为3389端口。
-j DNAT --to-destination 10.1.0.5:3389 表示将符合条件的报文进行 DNAT ,也就是目标地址转换,将符合条件的报文的目标地址与目标端口修改为 10.1.0.5:3389 ,--to-destination 就是动作 DNAT 的常用选项。
如上所述,上图中定义的规则的含义为,当外网主机访问公司公网ip的3389端口时,将报文的目标地址与端口将会被映射到 10.1.0.5:3389 上。
动作 MASQUERADE :
也是源地址转换,MASQUERADE 不用指定明确的ip,会动态的将报文的源地址修改为指定网卡可用得IP地址。(例如拨号上网分配的动态IP)
iptables -t nat -I POSTROUTING -s 10.1.0.0/24 -o eth0 -j MASQUERADE
指定 10.1.0.0/24 网段的报文源地址转换为 eth0 网卡的可用ip
动作 REDIRECT :
可以在本机进行端口映射
比如将本机的80端口映射到本机的 8080 端口上
iptables -t nat -A PREROUTING -p --dort 80 -j REDIRECT --to-ports 8080
filter表:负责过滤功能,防火墙,内核模块:iptables_filter
nat表:network address translation,网络地址转换功能;内核模块:iptables_nat
mangle表:拆解报文,做出修改,并重新封装的功能;内核模块:iptables_mangle
raw表:关闭nat表上启用的连接追踪机制内核模块:iptables_raw
所有规则都在这四张表中
规则匹配:按顺序匹配,顺序很重要。
ACCEPT:接受
DROP:丢弃
REJECT:拒绝
SOURCE:来源地址
destination:目标地址
iptables命令,查看规则命令:
iptables -t 表名 -L
查看对应表的所有规则,-t选项指定要操作的表,省略-t表名时。默认操作filter表。-L表示列出规则
iptables -t 表名 -L
查看指定表的指定链中的规则
iptables -t 表名 -v -L
查看指定表的所有规则,并且显示更详细的信息(更多的字段),-v表示verbose,表示详细的,冗长的,当使用-v选项时,会显示出计数器的信息
iptables -t 表名 -n -L
表示查看表的所有规则,并且在显示规则时,不对规则中的IP或者端口进行名称反解,-n选项表示不解析IP地址
iptables --line-numbers -t 表名 -L
查看表的所有规则, --line-numbers 表示显示规则的序号,可简写为--line
iptables -line -t 表名 -nvxL
显示表更详细的信息
iptables命令,增删改查命令:
新增规则:
iptables -F INPUT
清除filter表INOUT链中的规则
iptables -t filter -I INPUT -s ip地址 -j DROP
-l指明将规则插入哪一个链中,-l表示insert,即插入的意思,即增加的意思。
-s指明匹配条件中的“源地址”,如果报文的源地址属于-s对应的地址。那么报文则满足匹配条件,-s为source之意,表示源地址。
-j 指明“匹配条件”被满足时,所对应的动作,DROP为丢弃,当报文的源地址为该地址时,报文则被DROP丢弃。
iptables -A -t filter INPUT -s ip地址 -j ACCEPT
-A 表示在对应的表的链中追加规则
-j 动作,ACCEPT表示接受
iptables -I -t filter INPUT -s ip地址 -j ACCEPT
-I 表示在filter表的INPUT链的最前面添加新规则
iptables -t filter -I INPUT 2 -s ip地址 -j DROP
-l INPUT 2 表示在INPUT链中新增规则,新增的规则编号为2
删除规则:
1.根据规则的编号去删除规则
iptables -t filter -D INPUT 3
删除第3条规则
2.根据具体的匹配条件与动作删除规则
iptables -D INPUT -s 192.168.1.111 -j ACCEPT
删除符合该规则的规则
3.清除该表所有规则
iptables -t 表名 -F
4.清除指定表中某条链的所有规则
iptables -t 表名 -F 链名
修改规则:
iptables -t filter -R INPUT 1 -s 192.168.0.1 -j REJECT
-R 指定修改的链,使用-R INPUT 1 表示修改INPUT链的第一条规则
-J REJECT 表示将动作修改为REJECT
修改默认策略:
iptables -t filter -P FORWARD DROP
设置filter表的FORWARD链的默认动作为DROP
保存规则:
service iptables save
不执行此命令,重启服务或者重启机器就会没有。
centos 7 配置 iptables :
选择指定列:
select name,age from user; //选择name列和age列
返回不重复的值:
select distinct imgname from bk_img;
where 条件,特殊条件:
1.is null (空值判断)
select * from database where name is null;
2.between and (在 之间的值)
select * from database where sal between 1500 and 3000; //sal列中大于1500小于3000的值,包括1500和3000
3.In
select * from database where sal in (5000,1500,3000) //sal列中等于5000,1500,3000的值
4.like 模糊查询
select * from database where emname like 'M%';
% 表示多个字值
M% 为通配符,正则表达式,表示的意思是模糊查询信息为 M 开头的
%M% 表示查询包含 M 的所有内容
%M_ 表示查询以M在倒数第二位的所有内容
%a' //以a结尾的数据
'a%' //以a开头的数据
'%a%' //含有a的数据
'_a_' //三位且中间字母是a的
'_a' //两位且结尾字母是a的
'a_' //两位且开头字母是a的
5.不带比较运算符的 WHERE 子句:
WHERE 子句并不一定带比较运算符,当不带运算符时,会执行一个隐式转换。当 0 时转化为 false,1 转化为 true。例如:
SELECT studentNO FROM student WHERE 0
则会返回一个空集,因为每一行记录 WHERE 都返回 false。
SELECT studentNO FROM student WHERE 1
返回 student 表所有行中 studentNO 列的值。因为每一行记录 WHERE 都返回 true。
order by 关键字排序:
select * from database order by time desc; //按照 time 进行降序排序,desc 降序,asc升序;
order by 多列:
select * from database order by create_time,updata_time desc; // 多列排序
指定多列排序的排序顺序:
order by A,B 这个时候都是默认按升序排列
order by A desc,B 这个时候 A 降序,B 升序排列
order by A ,B desc 这个时候 A 升序,B 降序排列
inert into 插入数据:
insert into select 和select into from 的区别:
insert into scorebak select * from socre where neza='neza' --插入一行,要求表scorebak 必须存在
select * into scorebak from score where neza='neza' --也是插入一行,要求表scorebak 不存在
update 语句:
update bk_admin set username = 'test123' where username = 'test'; //修改username 等于 test 为 test123(Where语句为必须语句,否则更新整个表!!!)
执行没有 WHERE 子句的 UPDATE 要慎重,再慎重。
在 MySQL 中可以通过设置 sql_safe_updates 这个自带的参数来解决,当该参数开启的情况下,你必须在update 语句后携带 where 条件,否则就会报错。
set sql_safe_updates=1; 表示开启该参数
delete 语句:
delete from bk_admin where username = 'test123'; //删除 username = test123的行
SQL关于删除的三个语句:DROP、TRUNCATE、 DELETE 的区别。
DROP:
DROP test;
删除表test,并释放空间,将test删除的一干二净。
TRUNCATE:
TRUNCATE test;
删除表test里的内容,并释放空间,但不删除表的定义,表的结构还在。
DELETE:
1、删除指定数据
删除表test中年龄等于30的且国家为US的数据
DELETE FROM test WHERE age=30 AND country='US';
2、删除整个表
仅删除表test内的所有内容,保留表的定义,不释放空间。
DELETE FROM test 或者 DELETE FROM test;
DELETE FROM test 或者 DELETE FROM test;
LIMIT 选择指定数量行数:
select * from bk_img limit 10; //选择10行
select * from bk_img limit 5,10; //第5行开始,到第10行结束
通配符:
% 通配符:
SELECT * FROM Websites WHERE url LIKE
'https%'; //以某个字符串开头的记录
'%https%'; //包含https的记录
_ 通配符:
下面的 SQL 语句选取 name 以一个任意字符开始,然后是 "oogle" 的所有客户:
SELECT * FROM Websites
WHERE name LIKE '_oogle';
_ 号表示一个任意字符,可以这样使用:'_o_g_le'
[charlist]通配符(正则表达式):
Mysql使用 REGEXP 或 NOT REGEXP 运算符来操作正则表达式
select * from Websites where name REGEXP '^[GFS]'; //查询以G、F、s 开头的记录
SQL别名:
创建别名是为了让列名称可读性更强。
列的 SQL 别名语法:
SELECT column_name AS alias_name FROM table_name;
表的 SQL 别名语法:
SELECT column_name(s) FROM table_name AS alias_name;
JOIN 连接:
select Websites.id, Websites.name, access_log.count, access_log.date
from Websites
INNER JOIN access_log
ON Websites.id = access_log.site_id;
INNER JOIN:如果表中有至少一个匹配,则返回行
LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
FULL OUTER JOIN:只要其中一个表中存在匹配,则返回行
UNION 操作符:
用于合并两个或者多个select语句的结果集,select 语句必须要有相同列和相似的数据类型,同时,每个select语句的列的顺序必须相同。
select country from Websites
UNION
select country from apps
order by country; //以上语句返回不同的值,会过滤重复的值。
UNION ALL 操作符:
同上UNION操作符,不同的是会返回所有的值,包括重复的值。
select country from Websites
UNION ALL
select country from apps
order by country; //以上语句返回所有的值,不会过滤重复的值。
INSERT INTO SELECT 语句:
从一个表复制数据,然后把数据复制到一个已经存在的表中,目标表的数据不收影响。
insert into Websites (name, country)
select app_name, country from apps; //复制 apps 中的 app_name 列到 Websies表中
insert into Websites (name, country)
select app_name, country from apps
where id = 1; //只复制id为一的列
CREATE语句:
CREATE DATABASE dbname; //创建一个名字为 dbname 的数据库;
CREATE TABLE userinfo
(
Id int,
username varchar(255),
password varchar(255),
address varchar(255)
); //新建一个数据表
CREATE TABLE 约束:
NO NULL:不能为空 //id int NO NULL
UNIQUE:唯一性。
Mysql写法:
CREATE TABLE tb2(
id int no null,
name varchar(255) no null,
UNIQUE(id)
);
PRIMARY KEY 主键:
每一个表都应该有主键,并且每个表只能有一个主键。
新建表时创建主键:
CREATE TABLE tb2
(
id int NOT NULL,
username varchar(255),
password varchar(255),
PRIMARY KEY (id) //设置id为主键
);
当表已经创建时创建主键:
ALTER TABLE tb2
ADD PRIMARY KEY (id);
撤销主键:
Mysql:
ALTER TABLE tb2
DROP PRIMARY KEY;
FOREIGN KEY 约束:
外键约束。防止非法插入数据。
新建表时设置外键:
CREATE TABLE order
(
O_id int NOT NULL,
orderno int NOT NULL,
P_id int,
PRIMARY KEY (O_id), // O_id 为主键键
FOREIGN KEY (P_id) REFERENCES persons(P_id) // P_id 为 persons 表的P_id
);
当表已经存在时设置外键:
ALER TABLE order
ADD FOREIGN KEY (P_id)
REFERENCES persons (P_id);
撤销 FOREIGN KEY 约束:
Mysql:
ALTER TABLE Order
DROP FOREIGN KEY persons;
CHECK 约束:
用于限制列中的值得范围。
如果对单个列定义CHECK约束,那么该列只允许特定的值。
表定义 ,那么此约束会基于行中其他列的值在特定的列中对值进行限制。
新建表时 CHECK 约束:
CREATE TABLE user
(
id int NOT NULL,
username varchar(255),
password varchar(255),
CHECK (username > 0) //限制 username字段 大于 0
)
多个列的 CHECK 约束:
CHECK (username > 1 AND password > 0); 限制 username 字段大于1 和 password 字段大于0
当表已经存在时 CHECK 约束:
Mysql:
ALTER TABLE user
ADD CHECK (username > 0);
撤销 CHECK 约束:
ALTER TABLE user
DROP CONSTRAINT username;
DEFAULT 约束:
用于向列中插入默认值,设置默认值。
新建表时设置默认值:
CREATE TABLE user
(
id int NOT NULL,
username varchar(255) NOT NULL,
password varchar(255) DEFAULT '123456' //设置 passwdord 字段的默认值为 123456
);
当表已经创建的时候设置默认值:
ALTER TABLE testdb
ALTER username SET DEFALT '123456'; //设置username字段默认值
Nginx 是 C语言 开发,建议在 Linux 上运行,当然,也可以安装 Windows 版本,本篇则使用 centos 7 作为安装环境。
安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:
yum install -y gcc-c++
PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。nginx也需要此库。命令:
yum install -y pcre pcre-devel
zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要在 Centos 上安装 zlib 库。
yum install -y zlib zlib-devel
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。
nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要在 Centos 安装 OpenSSL 库。
yum install -y openssl openssl-devel
1.直接下载.tar.gz安装包,地址:https://nginx.org/en/download.html
2.使用wget命令下载(推荐)。确保系统已经安装了wget,如果没有安装,执行 yum install wget 安装。
wget -c https://nginx.org/download/nginx-1.15.8.tar.gz
解压
依然是直接命令:
tar -zxvf nginx-1.15.8 .tar.gz
cd nginx-1.15.8
配置
其实在 nginx-1.12.0 版本中你就不需要去配置相关东西,默认就可以了。当然,如果你要自己配置目录也是可以的。
./configure
./configure \
--prefix=/usr/local/nginx \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--pid-path=/usr/local/nginx/conf/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
注:将临时文件目录指定为/var/temp/nginx,需要在/var下创建temp及nginx目录
make
make install
whereis nginx
启动、停止nginx
cd /usr/local/nginx/sbin/ #切换目录
./nginx #启动 Nginx
./nginx -s stop #停止 Nginx
./nginx -s quit #停止 Nginx
./nginx -s reload #重启 Nginx
./nginx -s quit:此方式停止步骤是待nginx进程处理任务完毕进行停止。
./nginx -s stop:此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程。
ps aux|grep nginx
1.先停止再启动(推荐):
对 nginx 进行重启相当于先停止再启动,即先执行停止命令再执行启动命令。如下:
./nginx -s quit
./nginx
2.重新加载配置文件:
当 ngin x的配置文件 nginx.conf 修改后,要想让配置生效需要重启 nginx,使用-s reload不用先停止 ngin x再启动 nginx 即可将配置信息在 nginx 中生效,如下:
./nginx -s reload
-----------------------------------------------分割线--------------------------------------------------
service firewalld status
service firewaddl stop
systemctl disable firewalld.service
firewall-cmd --zone=public --add-port=80/tcp --permanent
-----------------------------------------------分割线--------------------------------------------------
即在rc.local增加启动代码就可以了。
vi /etc/rc.local
增加一行 /usr/local/nginx/sbin/nginx
chmod 755 rc.local
参考文章: