Rootop 服务器运维与web架构

2021-07-27
发表者 Venus
安装oci8和pdo_oci扩展已关闭评论

安装oci8和pdo_oci扩展

下载依赖:
https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html
oracle-instantclient11.1-devel-11.1.0.7.0-1.x86_64.rpm
oracle-instantclient11.1-basic-11.1.0.7.0-1.x86_64.rpm
把2个rpm包安装上。

php版本7.4.20,去官网下载相同版本源码。

进ext目录:

[root@MiWiFi-RA69-srv ext]# ll -d oci8 pdo_oci
drwxrwxr-x 8 root root 4096 Jul 14 10:01 oci8
drwxrwxr-x 3 root root  175 Jun  1 23:41 pdo_oci

oci8和pdo_oci都是php oracle的扩展。

安装pdo_oci:

[root@MiWiFi-RA69-srv pdo_oci]# /www/server/php/74/bin/phpize 
[root@MiWiFi-RA69-srv pdo_oci]# ./configure  --with-php-config=/www/server/php/74/bin/php-config
checking if that is sane... configure: error: You need to tell me where to find your Oracle Instant Client SDK, or set ORACLE_HOME.

[root@MiWiFi-RA69-srv pdo_oci]# rpm -ql oracle-instantclient11.1-basic-11.1.0.7.0-1.x86_64
/usr/lib/oracle/11.1/client64/bin/adrci
/usr/lib/oracle/11.1/client64/bin/genezi
/usr/lib/oracle/11.1/client64/lib/libclntsh.so.11.1
/usr/lib/oracle/11.1/client64/lib/libnnz11.so
/usr/lib/oracle/11.1/client64/lib/libocci.so.11.1
/usr/lib/oracle/11.1/client64/lib/libociei.so
/usr/lib/oracle/11.1/client64/lib/libocijdbc11.so
/usr/lib/oracle/11.1/client64/lib/ojdbc5.jar
/usr/lib/oracle/11.1/client64/lib/ojdbc6.jar

[root@MiWiFi-RA69-srv pdo_oci]# ./configure --help
  --with-pdo-oci[=DIR]    PDO: Oracle OCI support. DIR defaults to
                          $ORACLE_HOME. Use
                          --with-pdo-oci=instantclient,/path/to/instant/client/lib
[root@MiWiFi-RA69-srv pdo_oci]# ./configure  --with-php-config=/www/server/php/74/bin/php-config --with-pdo-oci=instantclient,/usr/lib/oracle/11.1/client64/lib
[root@MiWiFi-RA69-srv pdo_oci]# make && make install

安装oci8:

[root@MiWiFi-RA69-srv oci8]# /www/server/php/74/bin/phpize 
[root@MiWiFi-RA69-srv pdo_oci]# ./configure  --with-php-config=/www/server/php/74/bin/php-config
[root@MiWiFi-RA69-srv pdo_oci]# make && make install

配置php.ini加载模块:

extension=/www/server/php/74/lib/php/extensions/no-debug-non-zts-20190902/pdo_oci.so
extension=/www/server/php/74/lib/php/extensions/no-debug-non-zts-20190902/oci8.so

重启php。

[root@MiWiFi-RA69-srv ext]# /www/server/php/74/bin/php -m | grep -E "oci|OCI"
oci8
PDO_OCI

2021-07-12
发表者 Venus
游戏代理sk5中转搭建已关闭评论

游戏代理sk5中转搭建

提供游戏代理socks5中转搭建服务(不含服务器)。
中转目的:在源服务器(ccproxy或其它软件)和客户端之间做一次中转,一般用于提高网络稳定性,降低ping值、游戏掉线。
或者是连不上源sk5服务器时用的解决方案。

另有替代ccproxy软件的方案。
支持用户身份认证,支持每用户独享ip、多ip
单ip搭建100元一次,多ip搭建500元一次。物有所值,价格敏感者勿加。

需要的可联系我,提供完整服务端、中转搭建方案。QQ:

2021-07-05
发表者 Venus
nginx中几个性能调整的参数已关闭评论

nginx中几个性能调整的参数

worker_processes 1;
#默认1,可以设置为cpu核心数,或者auto自动配置

worker_rlimit_nofile 1024;
#最大文件打开数,这里指 nginx worker 进程的最大打开数,不是 nginx master 进程。
可以通过 cat /proc/nginx worker进程号/limits | grep open 返回的数值验证生效。

events
{
	use epoll;
	worker_connections 1024; 
	#单个进程最大连接数,包括和客户端的连接、反向代理之间的连接。
	
	multi_accept on;
	# 一次性处理所有backlog中的队列。off的话,就是一次一个。
	# backlog队列参考:https://www.rootop.org/pages/4842.html
}


# http 配置段
http
{
	sendfile   on; 
	# 此参数用于提高I/O性能,但不适用于大文件(要平衡磁盘和网络的I/O速度)/反向代理情况下,也就是说文件不在本地,在远程服务器上的不适用(包括文件共享)。
	# 大文件情况下用 aio
	tcp_nopush on;
	# 和sendfile一起出现,用于发送一个完整的数据包,实际是影响socket中TCP_CORK参数效果。
	
	keepalive_timeout 60;
	# nginx服务器与客户端会话结束后仍旧保持连接的最长时间(秒)
	tcp_nodelay on;
	# 开启、关闭nagle算法,和 keepalive_timeout 一起出现,默认on
}

TCP_CORK 资料:https://blog.csdn.net/sinat_20184565/article/details/89682807
TCP_NODELAY 资料:https://blog.csdn.net/lclwjl/article/details/80154565

2021-07-01
发表者 Venus
mysql5.6数据库varchar类型超过字段长度自动截取的问题已关闭评论

mysql5.6数据库varchar类型超过字段长度自动截取的问题

帮群里处理一个问题,说是前台页面post提交的数据,其中一个字段的字符串超过数据库中字段的最大长度限制后出现自动截取的结果。
最终数据库里存的数据为这个字段的最大长度,其余的自动截取了。在我印象里超过长度应该是报错的。

特地研究了一下。
比如有个字段为varchar类型,长度10。当写入数据的时候,mysql5.6和mysql5.7处理方式不一样。
具体原因是由sql_mode模式决定的。

5.7版本插入一串字符串长度为11时,会报错:1406 Data too long for column ‘字段名’。
5.6版本插入时,则会截取到10个字符的长度。

5.7文档中默认的sql-mode值为:

ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_AUTO_CREATE_USER NO_ENGINE_SUBSTITUTION

5.6文档中默认的sql-mode值为:

NO_ENGINE_SUBSTITUTION

参考:
https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html
https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html

当在修改数据库sql-mode模式为 “严格模式” 时,发现用数据库客户端软件测试没效果。

/etc/my.cnf:

[mysqld]
sql-mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

# 最后查进程发现是启动参数里带着sql-mode参数,那么应该是启动脚本里定义的,优先级高于配置文件中。

[root@MiWiFi-RA69-srv mysql]# ps aux | grep mysql
root     29328  0.6  0.0  11820  1580 pts/1    S    13:41   0:00 /bin/sh /www/server/mysql/bin/mysqld_safe --datadir=/www/server/data --pid-file=/www/server/data/MiWiFi-RA69-srv.pid --sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
mysql    29946  8.0  9.0 1297996 327088 pts/1  Sl   13:41   0:00 /www/server/mysql/bin/mysqld --basedir=/www/server/mysql --datadir=/www/server/data --plugin-dir=/www/server/mysql/lib/plugin --user=mysql --sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION --log-error=MiWiFi-RA69-srv.err --open-files-limit=65535 --pid-file=/www/server/data/MiWiFi-RA69-srv.pid --socket=/tmp/mysql.sock --port=3306

# 检查启动脚本

[root@MiWiFi-RA69-srv mysql]# vi /etc/init.d/mysqld 
other_args= #--sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"   # uncommon, but needed when called from an RPM upgrade action

把他注释掉再重启mysql,再次查看进程信息里没有sql-mode参数了。

sql-mode不同值的含义或者直接找百度翻译版:
https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html
https://dev.mysql.com/doc/refman/5.6/en/sql-mode.html

然后再次测试插入过长数据时,就提示错误了。
PS:
我在用sqlyog客户端测的时候发现设置了sql-mode 后通过 “select @@sql_mode;” 取不到设置的值。
但是用navicat可以查到。推测sqlyog连接的时候给临时设置了模式,又浪费了一段时间。

2021-06-29
发表者 Venus
linux通过配置文件配置多ip已关闭评论

linux通过配置文件配置多ip

这里不采用子设备号的方式,即 ifcfg-eth0:0、ifcfg-eth0:1的配置文件方式。
通过一个配置文件方式实现多ip配置。

vi /etc/sysconfig/network-scripts/ifcfg-eth0
# 方法1,适用于不连续ip

主ip配置略```

IPADDR1=10.10.10.10
NETMASK1=255.255.255.0

IPADDR2=10.10.10.11
NETMASK2=255.255.255.0

IPADDR和NETMASK后面的数字要排起来,中间不能有间隔。否则会失败。

# 方法2,适用于连续ip,某个范围内的ip(-range0)。
vi /etc/sysconfig/network-scripts/ifcfg-eth0-range0

DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR_START=10.10.10.10
IPADDR_END=10.10.10.20
CLONENUM_START=0
GATEWAY=10.10.10.1
NETMASK=255.255.255.0
NO_ALIASROUTING=yes

CLONENUM_START=0 是 eth0:0 的意思,从0开始,下一个ip设备名就会是eth0:1

重启网络。