获取目标url的HTTP状态码!/bin/bash curl -I -m 10 -o /dev/null -s -w %{http_code} $1使用方式web_scenario.sh https://www.baidu.com #运行脚本时后面根参数——网址
一、下载安装包https://www.zabbix.com/cn/download_agents二、安装为windows服务C:\zabbix_agent-4.4.10-windows-amd64\bin\zabbix_agentd.exe -i -c C:\zabbix_agent-4.4.10-windows-amd64\conf\zabbix_agentd.conf zabbix_agentd.exe [7908]: service [Zabbix Agent] installed successfully zabbix_agentd.exe [7908]: event source [Zabbix Agent] installed successfully #安装成功三、作为服务启动自动开机启动
使用zabbix监测SSL证书的有效期一、使用python脚本监控证书1.1 创建python脚本vim /etc/zabbix/User_scripts/ssl_cert_check.py #脚本可以放在任何目录中，本示例中在zabbix-agent目录中创建了一个User_scripts目录用来存放一系列用户自定义脚本。1.2 python脚本内容#!/usr/bin/python import socket import ssl import datetime import argparse def ssl_expiry_datetime(hostname,port): ssl_date_fmt = r'%b %d %H:%M:%S %Y %Z' context = ssl.create_default_context() conn = context.wrap_socket(socket.socket(socket.AF_INET),server_hostname=hostname,) #3 second timeout because Lambda has runtime limitations conn.settimeout(3.0) conn.connect((hostname, int(port))) ssl_info = conn.getpeercert() #parse the string from the certificate into a Python datetime object return datetime.datetime.strptime(ssl_info['notAfter'], ssl_date_fmt) def ssl_valid_time_remaining(hostname,port): """Get the number of days left in a cert's lifetime.""" expires = ssl_expiry_datetime(hostname,port) return expires - datetime.datetime.utcnow() parser = argparse.ArgumentParser(description='returns the time before expiration of certificate') #parser.add_argument("-c","--hostname", help="hostname of the certificate you want to check") parser.add_argument("hostname", help="hostname of the certificate you want to check") parser.add_argument("port", help="port of the hostname you want to connection") args = parser.parse_args() expire = ssl_valid_time_remaining(args.hostname,args.port) print int(round(datetime.timedelta.total_seconds(expire), 0))此脚本内容为《Zabbix企业级分布式监控系统》（第2版）中第10章提供的代码。我在此基础上进行了略微的改动，以适应更多的情况。二、配置zabbix自定义监控项（key）2.1 添加用户参数vim /etc/zabbix/zabbix-agent.conf #编辑zabbix-agnet的配置文件添加UserParameterUserParameter=ssl_cert_check[*],/etc/zabbix/user_script/ssl_cert_check.py \$1 \$2 #这里对用户参数进行一下解释。 UserParameter= #用户参数固定开头 ssl_cert_check[*]， #这是zabbix自定义的监控项名称即key，可以自己按需要设置。后面的"[*]"表示此监控项需要提供参数。 user_script/ssl_certificates_check.py #这里指定了需要执行的脚本的路径，及我们创建的python脚本 \$1 \$2 #这里表示这个监控系需要2个参数。（在这里是证书的域名 和链接时的端口）2.2 重启zabbix-agentsystemctl restart zabbix-agent2.3 使用zabbix_get命令进行测试zabbix_get -s 192.168.1.1 -k ssl_cert_check[www.baidu.com,443] 13136353 #测试百度的ssl证书有效期。可以看到返回的时间单位为秒。成功。 #这里对zabbix_get命令的参数进行一下解释 zabbix_get -s 192.168.1.1 #这里指定的是zabbix-agent的ip地址 -k ssl_cert_check[www.baidu.com,443] #这里-k指定刚刚自定义的监控项(key),并且此监控项还有2个参数，参数之间使用逗号分隔，写在"[]"里面。 #第一个参数是证书的域名，第二个参数是域名监听的端口。 #这里在原书中的代码，默认使用的是443端口。我添加了第二个参数，可以指定端口号。这样绑定在非常规端口的证书也可以监测了。三、在zabbix内新建监控项由于返回的剩余时间值为秒，因此在监控项的单位中我们设置为"s"。系统会自动识别，zabbix会转换为类似“7m 2d 8h”的格式，意为7个月2天8小时。在图中我设置的更新间隔为10s，是为了测试方便。实际情况下1天更新一次就可以了。四、建立触发器这里设置为有效期少于30天则会报警。当ssl证书更新后，有效期大于30天，则报警解除。
一、pip指定国内镜像源在单次安装中指定库pip install selenium -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com配置全局pypi仓库pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/二、升级导致pip不可用的处理方法（pip降级）在CentOS 7版本中自带的python版本为2.7。pip版本在升级到21版本及以上时将不可用。降级pip至20版本wget https://bootstrap.pypa.io/2.7/get-pip.py #下载get-pip.py python get-pip.py #运行下载的py DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support pip 21.0 will remove support for this functionality. #pip-21版本在2021年1月停止支持Python2.7。 Collecting pip<21.0 Downloading pip-20.3.4-py2.py3-none-any.whl (1.5 MB) |████████████████████████████████| 1.5 MB 510 kB/s Collecting wheel Downloading wheel-0.36.2-py2.py3-none-any.whl (35 kB) Installing collected packages: pip, wheel Attempting uninstall: pip Found existing installation: pip 21.0.1 Uninstalling pip-21.0.1: Successfully uninstalled pip-21.0.1 Successfully installed pip-20.3.4 wheel-0.36.2 #pip-20安装完成
添加swap分区一、创建swap分区1.1 创建swap文件dd if=/dev/zero of=/root/swap bs=1M count=2048 #创建一个2GB的swap文件1.2 格式化swap分区mkswap /root/swap1.3 修改内核参数vim /etc/sysctl.conf #打开内核参数配置文件 vm.swappiness = 70 #当物理内存使用量超过30%开始使用swap分区 #数值越高使用swap越积极，数值越低使用物理内存越积极。 cat /proc/sys/vm/swappiness #查看当前系统swappiness值 sysctl -p #重新加载内核参数 1.4 开机自动挂载swap分区vim /etc/fstab #编辑fstab /root/swap swap swap defaults 0 0 #挂载swap分区1.5 手动挂载swap分区swapon -a #手动挂载所有swap分区1.6 查看swap分区df -h二、推荐的系统交换空间（SWAP）系统中的RAM量推荐的交换空间如果允许休眠，建议使用交换空间⩽2 GBRAM量的2倍RAM量的3倍> 2 GB – 8 GB等于RAM数量RAM量的2倍> 8 GB – 64 GB至少4 GBRAM量的1.5倍> 64 GB至少4 GB不建议休眠注意：1.并非在ram使用完之后才会使用swap，取决于内核配置。2.使用swap会影响磁盘IO。
CentOS 7yum install -y wget && mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup && wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repoCentOS 8yum install -y wget && mv /etc/yum.repos.d/CentOS-Linux-BaseOS.repo /etc/yum.repos.d/CentOS-Base.repo.backup && wget -O /etc/yum.repos.d/CentOS-Linux-BaseOS.repo http://mirrors.aliyun.com/repo/Centos-8.repo
使用free -h命令可以查看当前系统的内存使用情况 total used free shared buff/cache available Mem: 1.8G 1.4G 66M 952K 313M 211M Swap: 0B 0B 0Bavailable表示应用程序还可以申请到的内存首先了解下两个概念buff和cachebuff（Buffer Cache）是一种I/O缓存，用于内存和硬盘的缓冲，是io设备的读写缓冲区。根据磁盘的读写设计的，把分散的写操作集中进行，减少磁盘碎片和硬盘的反复寻道，从而提高系统性能。cache（Page Cache）是一种高速缓存，用于CPU和内存之间的缓冲 ,是文件系统的cache。 把读取过的数据保存起来，重新读取时若命中（找到需要的数据）就不要去读硬盘了，若没有命中就读硬盘。其中的数据会根据读取频率进行组织，把最频繁读取的内容放在最容易找到的位置，把不再读的内容不断往后排，直至从中删除。 它们都是占用内存。两者都是RAM中的数据。简单来说，buff是即将要被写入磁盘的，而cache是被从磁盘中读出来的。 目前进程正在实际被使用的内存的计算方式为used-buff/cache，通过释放buff/cache内存后，我们还可以使用的内存量free+buff/cache。通常我们在频繁存取文件后，会导致buff/cache的占用量增高。处理方式手动清除 执行以下命令即可[root@izbp17wg1wphb6f95b76obz ~]# sync [root@izbp17wg1wphb6f95b76obz ~]# echo 1 > /proc/sys/vm/drop_caches [root@izbp17wg1wphb6f95b76obz ~]# echo 2 > /proc/sys/vm/drop_caches [root@izbp17wg1wphb6f95b76obz ~]# echo 3 > /proc/sys/vm/drop_cachessync：将所有未写的系统缓冲区写到磁盘中，包含已修改的i-node、已延迟的块I/O和读写映射文件echo 1 > /proc/sys/vm/drop_caches：清除page cacheecho 2 > /proc/sys/vm/drop_caches：清除回收slab分配器中的对象（包括目录项缓存和inode缓存）。slab分配器是内核中管理内存的一种机制，其中很多缓存数据实现都是用的pagecache。echo 3 > /proc/sys/vm/drop_caches：清除pagecache和slab分配器中的缓存对象。/proc/sys/vm/drop_caches的值,默认为0定时清除1、创建脚本cleanCache.sh#!/bin/bash#每两小时清除一次缓存 echo "开始清除缓存" sync;sync;sync #写入硬盘，防止数据丢失 sleep 10#延迟10秒 echo 1 > /proc/sys/vm/drop_caches echo 2 > /proc/sys/vm/drop_caches echo 3 > /proc/sys/vm/drop_caches2、创建定时任务crontab -e #弹出配置文件3、添加定时任务执行频率#分 时 日 月 周 命令 0 */2 * * * ./cleanCache.sh4、设置crond启动以及开机自启systemctl start crond.service systemctl enable crond.service5、查看定时任务是否被执行cat /var/log/cron | grep cleanCache转载于：https://focusss.github.io/2019/02/10/Linux%E4%B8%ADbuff-cache%E5%8D%A0%E7%94%A8%E8%BF%87%E9%AB%98%E8%A7%A3%E5%86%B3%E6%89%8B%E6%AE%B5/
Rsync一、概述rsync是一款开源的可实现全量及增量的本地或远程数据同步备份的工具。英文全称为Remote synchronization，rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份功能。rsync功能类似于scp（远程同步）、cp（本地同步）命令的功能，但是rsync支持增量同步和拷贝。在同步备份数据时，默认情况下，rsync通过“quick check”算法，仅同步大小或者最后修改时间发生变化的文件或目录。也可以根据权限、属主等属性的变化同步，但需指定相应的参数。rsync的特性：支持拷贝特殊文件加链接文件，设备等。可以有排除指定文件或目录的同步功能，相当于tar的评出功能。可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均步改变。可以实现增量同步，既只同步发生变化的数据，因此数据传输效率很高。可以使用rcp，rsh，ssh等方式来配合传输文件。可以通过socket（进程方式）传输文件和数据（服务端和客户端）。支持匿名的或认证（无需用户系统）的进程模式传输，可实现方便安全的数据备份及镜像。二、安装rsyncapt install rsync #ubunt安装 yum install -y rsync #通过yum安装rsync三、配置文件3.1 默认配置文件路径/etc/rsyncd.conf3.2 rsync的运行方式rsync作为守护进程运行：rsync作为守护进程运行时，便可以接收客户端请求。两台通过rsync进行数据同步的主机，其中一台必须要以守护进程方式运行。守护进程状态运行的rsync可以理解为服务器端主机，而直接使用rsync连接远程rsync主机的，则是客户端主机。rsync作为服务器运行前需要编辑配置文件。3.3 配置文件编辑配置文件/etc/rsyncd.conf。port = 873 #监听端口，默认873 uid = root #用户uid gid = root #用户gid use chroot = no #启用牢笼机制，有软连接超出当前目录时需要为no。 munge symlinks = no #禁用munge后，rsync服务端将不会去干涉软链文件 max connections = 200 #最大连接数 timeout = 300 #超时时间，秒 pid file = /var/run/rsyncd.pid #进程号对应文件 lock file = /var/run/rsyncd.lock #锁文件，防止文件不一致 log file = /var/log/rsyncd.log #日志文件 [backup] #模块 path = /backup #存储目录 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 #虚拟用户的账号密码文件3.4 密码文件在rsync的主配置文件中指定了secrets file的路径，文件名指定为rsync.password。这个文件中保存的用于rsync连接的用户名和密码信息。此文件有3个注意点：1.这个文件的所有者需要与运行rsync的用户一致。2.这个文件的权限必须是600。3.此文件的用户名及密码记录格式如下：rsync_backup:123456 #用户名与密码之间使用:分隔。chmod 600 /etc/rsync.password #修改密码文件权限为6003.5 以守护进程模式运行rsync（服务器）rsync --daemon #守护进程模式运行rsync #rsync使用873端口。 netstat -nlptu #查看873端口是否启动。 Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 1972/rsync3.6 将rsync设置为开机启动方法一： #将启动命令加入到/etc/rc.local文件中 echo "/usr/bin/rsync --daemon" >> /etc/rc.d/rc.local #这里要注意，CentOS7在默认情况下rc.local是没有可执行权限的，若需要通过此方式设置开机启动，需要赋予rc.local可执行权限。 chmod +x /etc/rc.d/rc.local 方法二： systemctl enable rsync #rsync.service is not a native service, redirecting to systemd-sysv-install. #Executing: /lib/systemd/systemd-sysv-install enable rsync #使用systemd管理3.7 rsync重启脚本kill -9 $(ps -ef | grep rsync | grep -v 'grep' | awk '{print $2}') rm -rf /var/run/rsyncd.pid rsync --daemon四、客户端配置在客户机只需通过yum安装rsync即可使用同步命令。4.1 配置密码文件在客户端，也需要一个密码文件。这样可以直接读取文件中的密码，免去每次输入密码的麻烦。这个密码文件的权限和所有者与服务器的要求相同。但是，它不需要记录用户名，直接记录密码即可。vim /etc/rsync.password 123456 #只需记录密码，无需记录用户名 chmod 600 /etc/rsync.password #修改权限为6004.2 使用命令进行同步rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup #根据提示输入密码 #rsync -avz <本地路径> <用户名>@<rsync服务器IP>::<模块名> #这里的模块名，就是服务器端配置文件中的模块名，而不是这个同步目录在服务器上的具体路径。 rsync -avz /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password #从文件中读取密码 #同步完成输出： sending incremental file list hosts sent 140 bytes received 43 bytes 366.00 bytes/sec total size is 158 speedup is 0.864.3 命令参数说明参数说明-v详细信息输出-z传输时压缩-r目录递归-t保持文件时间信息-o保持文件属主信息-p保持文件权限信息-g保持文件属组信息-P显示同步过程及传输时进度信息-D保持设备文件信息-l保留软连接-a归档模式，等同于rtopgDl参数-e指定替代rsh的shell程序，如ssh--exclude=PATTERN排除不需要传输的文件模式--exclude-from=file文件名所在的目录文件--bwlimit=RATE带宽限速，单位KBPS--delete让目标目录SRC和源目录数据DST一致--partial断点续传--partia-dir=DIR断点续传文件临时存放目录五、rsync的优缺点优点：1.增量备份，支持daemon，支持集中备份（支持推拉）。2.远程shell通道模式可以加密（ssh）,daemon模式需要加密传输，可以使用vpn。缺点：1.大量小文件同步，时间比较长，有时rsync进程可能会停止。2.同步大文件，也会有中断问题。六、使用ssh通道进行数据同步rsync -artplLoguP -e "ssh -p 22" /data/app root@10.10.10.10:/data/-a：表示归档模式，用于保持文件的所有属性，包括权限、所有者等。-r：递归复制目录及其内容。-t：保持文件的时间戳信息。-p：保持文件的权限设置。-l：保持符号链接。-L：跟踪符号链接指向的文件。-o：保持文件的所有者信息。-g：保持文件的所属组信息。-u：仅同步源目录中更新或新增的文件。-P：显示传输进度并保持部分传输的文件。inotify一、简介监控一个目录下的文件，当文件发生了更改，则会触发事件。即可输出出发事件的文件的信息。可监控的事件类型非常多，创建、删除、移动、修改等。二、安装epel-release中收录了inotify。直接通过yum安装。yum install epel-release -y #安装epel源 yum install inotify -y #安装inotify rpm -ql inotify #查看软件包安装的所有文件三、inotify参数说明3.1 运行参数参数说明-r递归-q仅仅打印监控的事件-m一直处于监控状态(前台监控)-d以守护进程方式运行（后台运行）-o file将监控事件输出到文件当中（默认输出到标准输出）-s输出错误信息记录到系统日志中（默认输出到标准输出）--excludei忽略文件名的大小写-e指定要监控的事件--timefmt指定输出的时间显示格式参考man date3.2 输出信息格式参数说明--format当发生事件以后所输出的信息以及输出的格式%f当监控的目录中文件发生了事件，%f会被替换成发生事件的文件名%w记录发生事件的文件所在的目录的绝对路径%e事件名，如果有多个事件，使用空格分隔。%Xe事件名，如果有多个事件，使用x分割。%T输出发生事件的时间，时间格式由--timefmt3.2 事件类型名称类型access访问事件modify文件修改attrib属性修改close_write文件从写模式被关闭时触发此事件close_nowrite文件从只读模式被关闭时触发此事件close不论以什么方式打开文件，在关闭文件时都会触发该事件。open当文件被打开时触发此事件moved_to当文件被移动到监控目录中时触发此事件moved_from当文件从监控目录中被移走时触发此事件move_self在监控目录下执行移动操作时触发此事件move当监控目录中发生了文件的移动，就会触发该事件。delete删除文件时触发此事件delete_self当监控目录自身被删除时触发此事件create创建文件时触发此事件umount当监控目录被卸载时，触发此事件四、监控文件变动inotifywait -mrq --timefmt "%F%T" --format '%T%w%f%e' -e create,delete,modify /home五、实时同步脚本#!/bin/bash prog='inotifywait' events='create,delete,modify,sttrib' iopt='-mrq' lpath="/test/” rhost="10.0.0.41" vuser="vuser1" secfile="/etc/rsync.password" ropt="-az --delete" modName="mode10" $prog $iopt --format "%w%f" -e $events %lpath | while read line do echo %line rsync $ropt $line $vuser@$rhost::$modName --password-file=$secfile donesersync一、简介sersync是一个基于inotify发开的同步工具。同步模式：主机A和主机B都安装rsync。文件从主机A同步到主机B。主机B的rsync以守护进程方式启动，作为服务端，用于接收请求。主机A的rsync作为客户端，在需要时调用即可，不需要以进程方式启动。在主机A安装sersync，用于监视主机A中的文件变化，同时将发生变化的文件，通过rsync向主机B进行同步。二、安装sersync托管在google code上。下载地址：https://code.google.com/archive/p/sersync/downloads下载完成后解压缩后得到2个文件，配置文件confxml.xml，和可执行文件sersync2。tar -zxvf sersync2.5.4 -C /opt/三、修改配置文件配置一个模块用一个配置文件，监控多个模块需要建立多个配置文件，启动多个sersync进程。vim config.xml <?xml version="1.0" encoding="ISO-8859-1"?> <host hostip="localhost" port="8008"></host> <debug start="false"/> <fileSystem xfs="false"/> <filter start="false"> <exclude expression="(.*)\.svn"></exclude> <exclude expression="(.*)\.gz"></exclude> <exclude expression="^info/*"></exclude> <exclude expression="^static/*"></exclude> </filter> <inotify> <delete start="true"/> <createFolder start="true"/> <createFile start="false"/> <closeWrite start="true"/> <moveFrom start="true"/> <moveTo start="true"/> <attrib start="false"/> <modify start="false"/> </inotify> <sersync> <localpath watch="/opt/tongbu"> <remote ip="127.0.0.1" name="tongbu1"/> <!--<remote ip="192.168.8.39" name="tongbu"/>--> <!--<remote ip="192.168.8.40" name="tongbu"/>--> </localpath> <rsync> <commonParams params="-artuz"/> <auth start="true" users="rsync_user" passwordfile="/etc/rsync.password"/> <userDefinedPort start="false" port="874"/> <timeout start="false" time="100"/> <ssh start="false"/> </rsync> <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/> <crontab start="false" schedule="600"> <crontabfilter start="false"> <exclude expression="*.php"></exclude> <exclude expression="info/*"></exclude> </crontabfilter> </crontab> <plugin start="false" name="command"/> </sersync> <plugin name="command"> <filter start="false"> <include expression="(.*)\.php"/> <include expression="(.*)\.sh"/> </filter> </plugin> <plugin name="socket"> <localpath watch="/opt/tongbu"> <deshost ip="192.168.138.20" port="8009"/> </localpath> </plugin> <plugin name="refreshCDN"> <localpath watch="/data0/htdocs/cms.xoyo.com/site/"> <cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/> <sendurl base="http://pic.xoyo.com/cms"/> <regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/> </localpath> </plugin> 四、启动sersyncsersync -h 查看命令说明参数说明-d守护进程模式-r在监控前，将监控目录与远程主机用rsync命令推送一遍-n指定开启守护进程的数量，默认为10个-o指定配置文件，默认使用confxml.xml文件-m单独期用其它模块，-m refreshCDN开启刷新CDN模块-m-m socket 开启socket模块-m-m http 开启http模块不加-m默认执行同步程序sersync -d -r #以守护进行模式运行，运行后立即同步一次。 /opt/sersync2/sersync2 -d -r -o /opt/sersync2/confxml.xml #启动时指定配置文件。若不使用-o指定配置文件，默认使用confxml.xml。五、检查sersync运行#!/bin/bash sersync="/usr/local/sersync/sersync2" confxml="/usr/local/sersync/confxml.xml" status=$(ps aux |grep 'sersync2'|grep -v 'grep'|wc -l) if [ $status -eq 0 ]; then $sersync -d -r -o $confxml & else exit 0; fi定期检查sersync是否在运行。若没有在有允许，则启动。*/5 * * * * /opt/daemon-sersync.sh #在crontab添加定时任务检查sersync
一、 Nginx 源码编译安装1.1 建立www用户useradd www -s /sbin/nologin -M #-s 指定shell，禁止登陆系统 #-M 表示不创建家目录1.2 安装编译依赖yum install -y pcre-devel openssl openssl-devel zlib-devel gcc gcc-c++ #通过yum安装源代码编译器依赖1.3 编译安装./configure --prefix=/apps/nginx \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_realip_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-pcre \ --with-stream \ --with-stream_ssl_module \ --with-stream_realip_module #指定安装目录 --with-http_ssl_module #支持SSL（HTTPS） --with-http_v2_module #支持HTTP2 --with-http_stub_status_module #统计功能模块，可以读取nginx服务当前处理的连接数等信息。（配合zabbix使用） make #预编译，生成可二进制可执行安装文件 make install #运行二进制服务程序安装包 make && make install #预编译后直接开始安装，比较省事。1.4 为nginx指定www用户运行vim /usr/local/nginx/conf/nginx.conf 打开nginx配置文件 user www; #修改为www用户1.5 使用systemctl管理nginx创建nginx.service文件，保存到/usr/lib/systemd/system/目录中，文件内容如下：[Unit] Description=nginx service After=network.target [Service] Type=forking ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s quit PrivateTmp=true [Install] WantedBy=multi-user.target或使用EOF命令：cat << EOF > /usr/lib/systemd/system/nginx.service [Unit] Description=nginx service After=network.target [Service] Type=forking ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s quit PrivateTmp=true [Install] WantedBy=multi-user.target EOF文件创建完毕后，重新加载配置。systemctl daemon-reload #重新加载systemnctl配置1.6 添加模块/重新编译安装进入nginx源码包目录 /configure --add-module=模块目录路径 #增加新的模块，重新编译。 make #进行编译#make后不要执行make install，若这样操作会覆盖现有安装。 进入objs目录 cp nginx /usr/local/nginx/sbin/nginx #编译完成后，新编译好的nginx文件被保存在objs目录中，将新生成的nginx文件去覆盖旧版本，即可完成版本升级或模块安装。1.7 防火墙配置firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload #在firewall防火墙里，放行http、https流量。1.8 启动服务systemctl start nginx #启动nginx systemctl restart nginx #重启nginx systemctl stop nginx #停止nginx systemctl enable nginx #开机启动 systemctl disable nginx #取消开机启动 systemctl is-enabled nginx #查看是否开机启动 systemctl status nginx #查看服务状态1.9 配置虚拟主机建立vhosts文件夹，用于存放虚拟主机配置文件。mkdir /usr/local/nginx/vhosts编辑nginx主配置文件在http块中添加包含虚拟主机配置文件include /usr/local/nginx/vhosts/*.conf;在vhosts文件夹中创建虚拟主机配置文件，必须以*.conf结尾cd /usr/local/nginx/vhosts/ vim abc.com.conf虚拟主机配置文件格式server{ listen 80; #监听80端口 server_name abc.com; #主机名 location /{ root /var/www/abc.com; #网站文件目录 index index.php; #主页文件名称 } #以下配置php支持 location ~ \.php$ { root /var/www/abc.com; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }二、MySQL源码编译安装2.1 卸载MariaDBCentOS中默认安装了MariaDB，在安装MySQL之前先进行卸载。MariaDB删除之后/etc/my.cnf也会被删除。rpm -qa | grep mariadb #检索已安装的MariaDB包名 yum remove mariadb-libs-5.5.60-1.el7_5.x86_64 #使用yum命令卸载MariaDB2.2 建立mysql用户useradd mysql -s /sbin/nologin -M #-s 指定shell，禁止登陆系统 #-M 表示不创建家目录2.3 安装编译依赖MySQL5.7使用CMake代替了configure。yum install -y gcc gcc-c++ pcre pcre-devel openssl openssl-devel zlib zlib-devel cmake ncurses ncurses-devel bison bison-devel perl perl-devel autoconf #安装编译器依赖2.4 编译安装cmake -DWITH_BOOST=/opt/src/mysql-5.7.28/boost #开始预编译，指定了boost库的路径。这是最简化的预编译方式，仅仅指定了boost库的路径（同时这也是必须的）。未指定的参数，系统将使用默认值来进行编译。 cmake -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_BOOST=/opt/src/mysql-5.7.28/boost #编译参数:默认字符utf-8 # make #预编译，生成可二进制可执行安装文件 make install #运行二进制服务程序安装包 make -j `nproc` && make install #预编译后直接开始安装，比较省事。2.5 MySQL的默认目录1.程序目录：/usr/local/mysql #默认 2.数据目录：/var/lib/mysql #默认 3.日志目录：/var/log/mariadb/mariadb.log #CentOS7默认，如若修改，需在my.cnf中同步修改2.6 MySQL配置文件my.cnfcat << EOF > /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # Settings user and group are ignored when systemd is used. # If you need to run mysqld under a different user or group, # customize your systemd unit file for mariadb according to the # instructions in http://fedoraproject.org/wiki/Systemd [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid # # include all files from the config directory # EOF2.7 建立日志、PID文件目录mkdir -p /var/log/mysql /var/run/mysql #建立日志目录和pid文件目录 chown -R mysql:mysql /var/log/mysql/ /var/run/mysql/ #修改日志文件目录和pid文件目录和pid文件的属组。2.8 环境变量MySQL的许多命令都存放在bin目录下，同时MySQL还有许多库文件，存放在lib目录下。而这些命令和库是MySQL运行中不可缺少的。vim /etc/profile #CentOS 7的环境变量保存在/etc/profile文件中，我们需要在文件的末尾追加2个条目，分别为bin目录的位置和lib目录的位置。 方法1： export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH #增加环境变量 方法2: echo "export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH" >> /etc/profile #使用输出重定向,在/etc/profile末尾添加MySQL环境变量。 source /etc/profile #source命令用于重新加载环境变量。 方法3： ln -s /usr/local/mysql /usr/bin/ #直接软连接到/usr/bin下，可以不用添加环境变量。每个需要的命令都要做软连接，此处省略。2.9 初始化MySQLmysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/var/lib/mysql #--initialize 初始化mysql，若使用--initialize-insecure参数，则表示没有初始密码。 #--user=<指定MySQL数据库用户> #--basedir=<指定MySQL主程序目录> #--datadir=<MySQL数据库文件目录>2.10 链接sock文件ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock #可使用find / -name mysql.sock命令进行搜索，然后链接到/tmp/mysql.sock中。 #或直接在my.cnf中修改sock文件位置为/tmp/mysql.sock 2.11 加入init.d，并开机自启动cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld #复制server文件到init.d chkconfig --add mysqld #增加mysqld服务 #chkconfig命令用于检查，设置系统的各种服务。这是Red Hat公司遵循GPL规则所开发的程序，它可查询操作系统在每一个执行等级中会执行哪些系统服务，其中包括各类常驻服务。 #--add 增加所指定的系统服务，让chkconfig指令得以管理它，并同时在系统启动的叙述文件内增加相关数据。 #--del 删除服务 #--list 查看当前服务状态 chkconfig mysqld on #开启mysqld服务。 2.12 使用systemctl管理复制mysql.service文件到/usr/lib/systemctl/system/目录中，内容如下：find / -name mysql.service #用find命令查找mysql.service文件 #此文件在执行过chkconfig --add mysqld命令才会后生成，如果搜索不到，需要执行2.8步骤，但不必执行chkconfig mysqld on命令，因为可以使用systemctl进行管理。 cp /run/systemd/generator.late/mysql.service /usr/lib/systemd/system/ #把搜索到的文件复制到/usr/lib/systemd/system/目录下 systemctl daemon-reload #重载systemctl配置2.13 启动服务systemctl start mysqld #启动mysql systemctl restart mysqld #重启mysql systemctl stop mysqld #停止mysql systemctl enable mysqld #开机启动 systemctl disable mysqld #取消开机启动 systemctl is-enabled mysqld #查看是否开机启动 systemctl status mysqld #查看服务状态三、PHP源码编译安装3.1 建立www用户useradd www -s /sbin/nologin -M #-s 指定shell，禁止登陆系统 #-M 表示不创建家目录3.2 安装编译依赖yum install -y epel-release #安装epel源 yum groupinstall -y 'Development Tools' yum install -y libxml2 libxml2-devel sqlite-devel oniguruma-devel libcurl libcurl-devel readline readline-devel gd gd-devel cmake3 openssl-devel3.3 cmake安装或升级#如果已经安装，则需要先卸载。 yum remove cmake -y #从GitHub下载或将源码包上传 git地址：https://github.com/Kitware/CMake/releases #或直接运行下面的命令： wget https://github.com/Kitware/CMake/releases/download/v3.19.0-rc1/cmake-3.19.0-rc1.tar.gz #依赖openssl-devel yum install openssl-devel #编译安装 tar -zxvf cmake-3.19.0-rc1.tar.gz cd cmake-3.19.0-rc1 ./configure make -j `nproc` && make install #查看版本号 cmake --version #加入环境变量 echo "export PATH=/usr/loacl/bin:$PATH" >> /etc/profile && source /etc/profile3.3.1 使用yum安装cmake3或直接使用yum进行cmake3的安装 yum install -y cmake3 如使用此方式安装，需要使用“cmake3”命令进行操作。3.4 libzip安装或升级需要 CMake 3.0.2 版本或更高.#如果已经安装，则需要先卸载。 yum remove -y libzip libzip-devel #从官网下载或将源码包上传 官网:https://libzip.org/download/ #或直接运行下面的命令： wget https://libzip.org/download/libzip-1.5.1.tar.gz #安装依赖，如提示cmake版本过久见上文更新cmake。 yum install cmake #编译安装 tar -zxvf libzip-1.5.1.tar.gz cd libzip-1.5.1 mkdir build cd build cmake .. make -j `nproc` && make install #添加libzip环境变量 echo "export PKG_CONFIG_PATH='/usr/local/lib64/pkgconfig/'" >> /etc/profile && source /etc/profile #如果不添加libzip到环境变量，预编译PHP时会提示找不到libzip库3.5 PHP编译参数查看所有编译参数：./configure --help./configure --prefix=/usr/local/php --enable-fpm --enable-inline-optimization --disable-debug --disable-rpath --enable-shared --enable-opcache --with-mysqli --with-mysql-sock --enable-pdo --with-pdo-mysql --with-gettext --enable-mbstring --with-iconv --with-mhash --with-openssl --enable-bcmath --enable-soap --enable-pcntl --enable-shmop --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-sockets --with-curl --with-zlib --with-readline --without-sqlite3 --without-pdo-sqlite --with-pear --with-libdir=/lib/x86_64-linux-gnu --enable-xml --enable-gd --with-zip #不同版本的写法有区别： #php7.3 --enable-zip --with-gd #php7.4 --with-zip --enable-gd3.6 编译安装./configure --enable-fpm --with-pdo-mysql --with-mysqli #这里我们需要增加php-fpm和mysql数据库支持。启用mysqli扩展技术不仅可以调用MySQL的存储过程、处理MySQL事务，而且还可以使访问数据库工作变得更加稳定。 make #预编译，生成可二进制可执行安装文件 make install #运行二进制服务程序安装包 make -j `nproc` && make install #预编译后直接开始安装，比较省事。3.7 编译报错如果预编译完成但是make报错，可使用make distclean清除后重新编译。3.7.1 其他问题#报错：configure: error: off_t undefined; check your library configuration #报错：./php-fpm: error while loading shared libraries: libonig.so.5: cannot open shared object file: No such file or directory # 添加搜索路径到配置文件 echo '/usr/local/lib64 /usr/local/lib /usr/lib /usr/lib64'>>/etc/ld.so.conf # 更新配置 ldconfig -v3.8 复制配置文件cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf 修改php-fpm.conf配置文件的最后一行为： vim /usr/local/php/etc/php-fpm.conf include=/usr/local/php/etc/php-fpm.d/*.conf 由模板复制一份www.conf配置文件。 www.conf这是php-fpm进程服务的扩展配置文件 cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf #复制一份www.conf配置文件 需要修改 www.conf 配置文件，确保 php-fpm 模块使用 www-data 用户和 www-data 用户组的身份运行。 vim /usr/local/php/etc/php-fpm.d/www.conf 找到以下内容并修改： ; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. 23 user = www 24 group = www 搜索php.ini配置文件，并复制到/usr/local/php/lib/目录下 find / -name php.ini* php.ini有2个版本，一个开发环境，一个生产环境。 cp /opt/php-7.4.0/php.ini-development /usr/local/php/lib/php.ini #复制php.ini配置文件3.9 添加环境变量vim /etc/profile #打开环境变量配置文件 export PATH=$PATH:/usr/local/php/bin #在末尾加入 source /etc/profile #重新载入环境变量或直接执行如下命令：echo "export PATH=$PATH:/usr/local/php/bin" >> /etc/profile && source /etc/profile3.10 启动 php-fpm 服务/usr/local/php/sbin/php-fpm3.11 使用systemctl管理php-fpm建立php-fpm.service文件，内容如下。[Unit] Description=php After=network.target [Service] Type=forking ExecStart=/usr/local/php/sbin/php-fpm ExecStop=/bin/pkill -9 php-fpm ExecReload=/bin/kill -USR2 $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target放置到/usr/lib/systemd/system/目录中cp php-fpm.service /usr/lib/systemd/system/或使用下面的命令：cat << EOF > /usr/lib/systemd/system/php-fpm.service [Unit] Description=php After=network.target [Service] Type=forking ExecStart=/usr/local/php/sbin/php-fpm ExecStop=/bin/pkill -9 php-fpm ExecReload=/bin/kill -USR2 $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target EOFsystemctl配置重载命令：systemctl daemon-reload3.12 启动服务systemctl start php-fpm #启动php-fpm systemctl restart php-fpm #重启php-fpm systemctl stop php-fpm #停止php-fpm systemctl enable php-fpm #开机启动 systemctl disable php-fpm #取消开机启动 systemctl is-enabled php-fpm #查看是否开机启动 systemctl status php-fpm #查看服务状态3.13 配置nginx的php支持打开Nginx配置文件，修改如下位置:vim /usr/local/nginx/conf/nginx.conf #打开nginx配置文件 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { root /var/www/html; #修改为网站目录 fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }使用socket通信nginx与php安装在同一台服务器上时，可以使用socket进行通信，节省开销。php配置 修改配置文件：/php/etc/php-fpm.d/www.conf listen = 127.0.0.1：9000 修改为↓ listen = /dev/shm/php-fpm.sock 重启php服务 #将sock文件放在/dev/shm是因为这个目录运行在内存中，速度更快。 nginx配置 fastcgi_pass 127.0.0.1:9000; 修改为↓ fastcgi_pass unix:/dev/shm/php-fpm.sock; 重启nginx服务3.14 测试nginx的php支持echo "<?php phpinfo(); ?>" > /var/www/html/index.php 将此行内容保存为index.php，通过浏览器访问。3.15 配置mysql字符编码在my.cnf中的[mysqld]下增加如下参数：[mysqld] init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake 重启数据库服务 systemctl restart mysqld 查看数据库是否支持utf8字符编码 show variables like "%character%";show variables like "%collation%";3.16 使用测试文件连接mysql<?php $link=mysqli_connect("localhost:3306","root","12345","mysql"); if(! $link){ echo "连接失败" .PHP_EOL; echo "Debugging errno:" .mysqli_connect_errno() .PHP_EOL; echo "Debugging error:" .mysqli_connect_errno() .PHP_EOL; exit; } else{ echo "连接成功" .PHP_EOL; echo "Host information" .mysqli_get_host_info($link) .PHP_EOL; } mysqli_close($link); ?>
一、Cookie1.1 Cookie概述Cookie是由服务器发送给浏览器，并保存在本地的一小块数据。由于HTTP协议是无状态的，而通过Cookie可以稳定地保存一些状态。当服务器将Cookie发送给浏览器本地保存后，此后的每一次请求浏览器都会将cookie发给服务器。主要作用1.会话状态管理2.个性化设置3.浏览器行为跟踪Cookie曾是唯一的客户端数据存储手段，而每次浏览器请求都会携带Cookie数据会增加开销。当服务器收到HTTP请求后，服务器可以在响应首部里面添加一个Set-Cookie选项。浏览器收到响应后通常会保存下Cookie。Cookie的过期时间、域、路径、有效期、适用站点都可以根据需要来指定。1.2 Cookie类型会话期Cookie浏览器关闭后自动删除，仅在会话期间有效。会话期Cookie不需要指定过期时间（Expires）或这有效期（Max-Age）。提供会话恢复功能的浏览器，在关闭后会话期Cookie也会被保留下来，如同浏览器从未关闭一样。持久性Cookie持久性Cookie可以指定过期时间或有效期。关闭浏览器也不会失效。Cookie的过期或有效期只与客户端时间相关，而非服务器时间。第三方Cookie每个Cookie都有与之相关联的域，当Cookie的域和页面的域相同，则称之为第一方Cookie（First-Party Cookie），而不过不同，则称之为第三方Cookie（Third-Party Cookie）。通过第三方组件发送的第三方Cooike主要用于广告和网络追踪。1.3 Cookie的属性参数描述Name规定Cookie的名称。（必须）Value规定Cookie的值，可以进行转码和加密。（必须）Expire规定Cookie的过期日期（GMT格式）。当超过这个日期，浏览器将删除Cookie。MaxAge规定Cookie失效时间，单位是秒，默认为-1。如果为负数，则为临时Cookie，关闭浏览器即删除。如果为0，则表示删除该Cookie（并非浏览器关闭时才删除）。Path规定Cookie的服务器路径。一般设为“/”，以表示同一个站点的所有页面都可以访问这个Cookie。Domain规定Cookie的子域名。指定在该子域下才可访问Cookie。Secure规定是否通过安全的HTTPS连接来传输Cookie。HttpOnly不能通过程序（如：Java Script）调用并读取到Cookie的内容。SameSiteCookie允许服务器要求某个Cookie在跨站请求时不会被发送，从而可以阻止跨站请求伪造攻击（CSRF）。SameSite一般有3个值：1.None浏览器会在同站请求、跨站请求下继续发送Cookie，不区分大小写。2.Strict浏览器将只发送同站点请求的Cookie，如果请求来自与当前location不同的URL，则不发送包括了Strict熟悉的Cookie。3.Lax默认选项。Same-Site Cookie会为一些跨站子请求保留，如图片加载或者frames的调用，但只要当用户从外部站点导航到URL时才会发送，如Link连接。1.4 Cookie总结Cookie是一种在客户端存储数据的方式。它不见得与用户认证登录相关。二、Session2.1 Session概述由于Cookie保存在客户端，所以会存在安全隐患。而Session保存在服务端。2.2 Session特性当Session创建后，服务端会将SessionID放到此次访问的Cooike中。当下次客户端访问需要提取服务器中Session时，会根据Cooike中的SessionID值来找到服务器中的具体Session。2.3 Session同步问题在大型的分布式网站中，由于后端有多台服务器，并且每次请求可能会访问到任意一台服务器。而session只保存在一台服务器上。这会导致状态丢失，如重新登录等问题。解决方法1.session复制2.客户端保存session（保存在Cookie中，可以保存不敏感信息，但是Cookie容量有限。）3.固定客户端访问的服务器ip Hash业务数据 Hash4.共享存储使用redis存储但是与Cookie一样，使用Session方式更加安全，但是都会增加开销。2.4 Session总结Session是一种用户会话状态实现的手段。在客户端，Session ID通常使用Cookie进行存储；而在服务器端，可以使用的存储方法就太多了。三、Token3.1 Token概述Token是服务端生成的一串字符串，以作客户端进行请求的一个令牌，当第一次登录后，服务器生成一个Token便将此Token返回给客户端，以后客户端只需带上这个Token前来请求数据即可，无需再次带上用户名和密码。3.2 Token的优势1.无状态、可扩展在客户端存储的Tokens是无状态的，并且能够被扩展。基于这种无状态和不存储Session信息，负载负载均衡器能够将用户信息从一个服务传到其他服务器上。如果我们将已验证的用户的信息保存在Session中，则每次请求都需要用户向已验证的服务器发送验证信息(称为Session亲和性)。用户量大时，可能会造成 一些拥堵。但是不要着急。使用tokens之后这些问题都迎刃而解，因为tokens自己hold住了用户的验证信息。2.安全性请求中发送token而不再是发送cookie能够防止CSRF(跨站请求伪造)。即使在客户端使用cookie存储token，cookie也仅仅是一个存储机制而不是用于认证。不将信息存储在Session中，让我们少了对session操作。token是有时效的，一段时间之后用户需要重新验证。我们也不一定需要等到token自动失效，token有撤回的操作，通过token revocataion可以使一个特定的token或是一组有相同认证的token无效。3.可扩展性Tokens能够创建与其它程序共享权限的程序。例如，能将一个随便的社交帐号和自己的大号(Fackbook或是Twitter)联系起来。当通过服务登录Twitter(我们将这个过程Buffer)时，我们可以将这些Buffer附到Twitter的数据流上(we are allowing Buffer to post to our Twitter stream)。使用tokens时，可以提供可选的权限给第三方应用程序。当用户想让另一个应用程序访问它们的数据，我们可以通过建立自己的API，得出特殊权限的tokens。4.多平台跨域我们提前先来谈论一下CORS(跨域资源共享)，对应用程序和服务进行扩展的时候，需要介入各种各种的设备和应用程序。只要用户有一个通过了验证的token，数据和资源就能够在任何域上被请求到。5.基于标准创建token的时候，你可以设定一些选项。最近的程序和文档是供给JSON Web Tokens的。它支持众多的语言。这意味在未来的使用中你可以真正的转换你的认证机制。3.3 Token与Session的区别Token使用CPU算力换空间的方式。免去存储大量Session的开销，同样也不会出现session同步的问题。可以方便地进行服务器集群的横向扩展。简单来说，使用session数据放在服务器端（文件、内存、数据库），而Token的数据，主要放在客户端（LocalStorge、Cookie）。
一、查看磁盘可用空间df -h #查看各个挂载目录的大小和剩余空间。二、查看文件及目录的大小du -h * #列出当前目录下以及子目录下的所有目录及目录内文件的大小。 #这将会列出*所有*文件，不论在几级目录之下。 du -h --max-depth=1 * #列出当前目录及所有一级子目录内文件和目录的大小。 --max-depth=<目录级数> du -skh * #列出当前目录中子目录及文件的大小。三、查看目录和文件个数ls -lR|grep "^-"|wc -l #列出当前目录及子目录中所有目录及文件的数量总和。 ls -lR|grep "^d"|wc -l #列出当前目录及子目录中所有目录的数量总和。
一、概念1.1 五表五链五表filter表：过滤规则表，默认表。nat表：地址转换规则表。mangle表：修改数据标记位规则表。raw表：关闭启用的链接跟踪机制，加快封包穿越防火墙速度。security表：用于强控制访问（MAC）网络规则，由Linux安全模块如Selinux实现。优先级security > raw > mangle > nat > filter五链INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING1.2 netfilter配置工具iptables (CentOS 6及以前)firewaldd (CentOS 7)nft (CentOS 8)二、快速使用2.1 默认策略——拒绝除了明确允许的，都拒绝。iptables -P INPUT DROP #-P 设置默认策略 #将INPUT(传入)默认设置为DROP(丢弃)2.2 配置放行放行端口iptables -I INPUT -p tcp --dport 22 -j ACCEPT #由上到下匹配，一旦匹配到则不会进行后面的匹配。（因此越靠前优先级越高。） #-I 在表最前面增加条目（优先级最高，最先匹配） #-I 3 作为第3条插入链中 #-A 在表最后面增加条目 #-p 匹配协议（TCP/UDP/ICMP等） #--dport 匹配端口 #-j 指定处理方式（1.ACCEPT允许 2.REJECT拒绝 3.DROP丢弃 4.LOG记录） 放行主机iptables -I INPUT -s 192.168.3.10/24 -p tcp --dport 22:30 -j ACCEPT #-s 匹配ip地址与子网掩码 #--dport 22：30 指定端口范围，从22到302.3 删除条目查看所有条目iptables -L #-L 列出规则 #查看所有规则 iptables -vnL --line-numbers #-v 显示细节 #-n 显示IP #-L 列出规则 #--line-numbers 显示规则行号 #查看所有规则 iptables -L INPUT #仅查看INPUT链规则删除条目iptables -D INPUT 1 #删除INPUT链中的第一条规则 #-D 删除 #INPUT 1 INPUT链中的第一条。 iptables -F #删除所有规则2.4 保存规则没有保存的规则，在重启后会失效。service iptables save #保存规则 iptables-save > /etc/sysconfig/iptables #将防火墙规则保存在文件中2.5 查询表支持的链iptables -t filter -vnL #查询filter表支持的链2.6 关闭iptableschconfig iptables off #关闭iptables三、详细参数参数作用-P设置默认策略-F清空规则链-L查看规则链-A在规则链的末尾加入新规则-I num在规则链的头部加入新规则-D num删除某一条规则-s匹配来源地址IP/MASK，加叹号“!”表示除这个IP外-d匹配目标地址-i网卡名称匹配从这块网卡流入的数据-o网卡名称匹配从这块网卡流出的数据-p匹配协议，如TCP、UDP、ICMP--dport num匹配目标端口号--sport num匹配来源端口号
CentOS7配置开机启动脚本一、/etc/rc.d/rc.local1.给rc.local增加可执行权限chmod +x /etc/rc.d/rc.local 需要开机执行的脚本也要赋予可执行权限2.编辑rc.local文件在末尾增加需要执行的命令或脚本路径二、/etc/rc.d/init.d1.将需要执行的脚本置于/etc/rc.d/init.d下。（脚本需要可执行权限）2.使用chkconfig添加开机启动脚本。cd /etc/rc.d/init.d chkconfig --add 脚本文件名 chkconfig 脚本文件名 on3.使用chkconfig管理的脚本，需要有特定的开头。#!/bin/sh #chkconfig:2345 55 25 #2345(启动级别) 50(启动优先级) 20(关闭优先级) #description:这是一个开机启动脚本 #服务的描述运行级别共有7个：0是关机，6是重启。因此指定1（单用户模式）、2（无网络多用户）、3（默认多用户）、4（保留）、5（图像界面）级别。优先级范围是0－100，数字越大，优先级越低。
MySQL程序操作#启动MySQL服务（windows）： net start mysqld #停止MySQL服务（windows）： net stop mysqld #启动MySQL服务（linux）： service mysqld start #停止MySQL服务（linux）： service mysqld stop #登录数据库： mysql -u 用户名 -p （回车后输入密码） #登录到MySQL服务器 ： mysql -h 主机地址（不填则连接本地数据库）-P 端口 -u 用户名 -p 密码（明文） #退出MySQL： QUIT; #查看MySQL版本号 show variables like '%version%'；数据库和表操作#显示数据库和表： SHOW DATABASES; / SHOW TABLES; #查询表是否存在 SHOW TABLES LIKE '%表名%'; #创建数据库： CREATE DATABASE 新数据库名; #创建新数据库，指定字符集和排序方式 CREATE DATABASE `数据库名` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; #查看数据库默认字符编码 show variables like "%character%";show variables like "%collation%"; #创建表： CREATE TABLE 新数表名 (字段名1 数据类型1，字段名2 数据类型2...); #删除数据库和表： DROP DATABASE 数据库名; / DROP TABLE 表名; #删除所有表(生产删表语句，然后手动执行) SELECT CONCAT('DROP TABLE `', table_name, '`;') FROM information_schema.tables WHERE table_schema = 'disp_justcall'; #清空表（保留结构，只清空数据） truncate table 表名 #选择数据库： USE 数据库名; #显示表结构： DESC 表名; #更新字段值： UPDATE 表名 SET 列名='新值' WHERE 字段名='字段值'; #替换字段中的部分内容 update 表名 SET `字段名` = REPLACE(`字段名`,"老值","新值") WHERE 条件; update 表名 SET `字段名` = REPLACE(`字段名`,"老值","新值"); #不带条件就全部改 #更改列名： ALTER TABLE 表名 CHANGE 现字段名 新字段名 新字段属性; #重命名表： RENAME TABLE 现表名1 TO 新表名1,现表名2 TO 新表名1; #删除记录： DELETE FROM 表名 WHERE 定位描述; #插入记录： INSERT INTO 表名 (字段名1,字段名2...) VALUES (值1,值2...); #搜索记录 SELECT * FROM 表名 WHERE 字段名 = "值"; 用户管理#创建新用户(5.7) CREATE USER "用户名"@"IP地址" IDENTIFIED BY "密码"; #创建新用户(8.0) CREATE USER "用户名"@"IP地址"; #删除用户 DROP USER "用户名"@"IP地址"; #更改当前用户的密码(5.7)： SET PASSWORD = PASSWORD('新密码'); #修改特定用户密码(5.7) SET PASSWORD FOR root@"%"=password("123456"); #修改特定用户密码(8.0) ALTER USER 'root'@'localhost' IDENTIFIED BY '密码'; #更改指定用户的密码：(系统命令行界面) mysqladmin -u 用户名 -p password 新密码；（按ENTER后提示输入当前密码。确认后密码更改生效。） #赋予用户权限(同时创建一个新mysql用户) grant all privileges on 数据库.* to '用户名'@'%' identified by '密码'; (创建新用户，同时设定密码。即将在新版本中移除此功能。) grant all privileges on 数据库.* to '用户名'@'%'; #建议单独设置权限，使用CREATE USER命令创建用户。 grant all privileges on 数据库.* to '用户名'@'%' with grant option; #MySQL 8.0 后的版本授权命令格式 grant insert,delete,update,select on 数据库.* to 用户名@"%"; #授权增、删、改、查权限。 show grants for root; #查看特定用户的权限 #更新权限 FLUSH PRIVILEGES; #查看所有mysql用户 SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;数据库维护操作#备份数据库： mysqldump -u 用户名 -p --databases 数据库1 数据库2... >备份至目标目录（例如：>d:/backup.sql） #例子： mysqldump -uroot -p --add-drop-database --all-databases > /root/ywngo.com_mysql_all_db.sql #导出全部数据库。同时包含drop数据库语句，导入前无需先建立数据库。 #恢复数据库： mysql -u 用户名 -p 数据库名称 <备份文件地址（例如：<d:/backup.sql）
一、Zabbix的组件组成1.服务端和agentzabbix-server：Zabbix server 是整个 Zabbix 软件的核心程序。Zabbix Server 负责执行数据的主动轮询和被动获取，计算触发器条件，向用户发送通知。它是 Zabbix Agent 和 Proxy 报告系统可用性和完整性数据的核心组件。Server 自身可以通过简单服务远程检查网络服务（如Web服务器和邮件服务器）。Zabbix Server是所有配置、统计和操作数据的中央存储中心，也是Zabbix监控系统的告警中心。在监控的系统中出现任何异常，将被发出通知给管理员。基本的 Zabbix Server 的功能分解成为三个不同的组件。他们是：Zabbix server、Web前端和数据库。Zabbix 的所有配置信息都存储在 Server 和Web前端进行交互的数据库中。例如，当你通过Web前端（或者API）新增一个监控项时，它会被添加到数据库的监控项表里。然后，Zabbix server 以每分钟一次的频率查询监控项表中的有效项，接着将它存储在 Zabbix server 中的缓存里。这就是为什么 Zabbix 前端所做的任何更改需要花费两分钟左右才能显示在最新的数据段的原因。zabbix-agent：Zabbix agent 部署在被监控目标上，以主动监控本地资源和应用程序（硬盘、内存、处理器统计信息等）。Zabbix agent 收集本地的操作信息并将数据报告给 Zabbix server 用于进一步处理。一旦出现异常 (例如硬盘空间已满或者有崩溃的服务进程)，Zabbix server 会主动警告管理员指定机器上的异常。Zabbix agents 的极高效率缘于它可以利用本地系统调用来完成统计数据的采集。2.前端组件zabbix-web-mysql-scl或者zabbix-web-pgsql-scl，取决于使用什么数据库。zabbix-apache-conf-scl或者zabbix-nginx-conf-scl，取决于使用什么web服务器。二、必要条件MySQL版本5.7以上yum groupinstall mariadb mariadb-client #可用maraiadb代替mysql #或正常安装mysql均可关闭SELinuxvim /etc/selinux/config SELINUX=disable #配置文件禁用SELinux setenforce 0 #临时禁用 getenforce #查看selinux是否运行 配置防火墙firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-port=10050/tcp firewall-cmd --permanent --add-port=10050/udp firewall-cmd --permanent --add-port=10051/tcp firewall-cmd --permanent --add-port=10051/udp firewall-cmd --reload #添加http服务以及监听端口 systemctl stop firewalld systemctl disable firewalld #停止firewall服务 #取消开机启动三、设置阿里云镜像源rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm #国内阿里云源 rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm #Zabbix官方源，使用官方源由于网络问题会导致安装失败。 sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo #将repo文件中的官方地址换成阿里云地址 vim /etc/yum.repos.d/zabbix.repo #编辑repo文件，将前端源开启 [zabbix-frontend] enabled=1 #开启前端源 yum clean all #清除yum缓存我们查看一下zabbix.repo文件的内容[zabbix] name=Zabbix Official Repository - $basearch baseurl=https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/$basearch/ enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591 [zabbix-frontend] name=Zabbix Official Repository frontend - $basearch baseurl=https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/$basearch/frontend enabled=0 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591 [zabbix-debuginfo] name=Zabbix Official Repository debuginfo - $basearch baseurl=https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/$basearch/debuginfo/ enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591 gpgcheck=1 [zabbix-non-supported] name=Zabbix Official Repository non-supported - $basearch baseurl=https://mirrors.aliyun.com/zabbix/non-supported/rhel/7/$basearch/ enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX gpgcheck=1 四、安装步骤1.安装zabbix_server和agentyum install zabbix-server-mysql zabbix-agent -y #安装server和agent #如需Agent2则使用zabbix-agent2安装2.安装前端组件#安装CentOS软件选集（SCL） yum install -y centos-release-scl #SCL(Software Collections)可以让你在同一个操作系统上安装和使用多个版本的软件，而不会影响整个系统的安装包。SCL的创建就是为了给RHEL/CentOS用户提供一种以方便、安全地安装和使用应用程序和运行时环境的多个(而且可能是更新的)版本的方式，同时避免把系统搞乱。与之相对的是第三方源，它们可能会在已安装的包之间引起冲突。（更多详细信息请自行搜索） yum install -y zabbix-web-mysql-scl zabbix-nginx-conf-scl #在安装前，需要启动zabbix的前端源。这需要设置/etc/yum.repos.d/zabbix.repo中的[zabbix-frontend]下的Enabled=1。 # #可以看到，这里使用MySQL作为数据库、使用Nginx作为Web服务器。3.创建初始数据库mysql -uroot -p password mysql> create database zabbix character set utf8 collate utf8_bin; mysql> grant all privileges on zabbix.* to zabbix@localhost identified by '12345'; mysql> flush privileges; mysql> quit; #创建一个zabbix库。 #创建一个zabbix用户。 #赋予所有权限。4.导入初始架构和数据，系统将提示您输入新创建的密码。zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix #这里使用了zcat命令，其作用是不真正解压缩文件，就能显示压缩包中文件。 #导入问题 create.sql.gz这个库文件导入时，由于缺少USE zabbix，即未选择zabbix库，因此会报错。 yum install -y nano #安装nano gunzip create.sql.gz #解压缩 nano create.sql #使用nano编辑sql文件 USE zabbix； #在第一行添加选择数据库的命令； Ctrl+X键进入保存，输入y回车，再次回车即可保存退出。 cat create.sql |mysql -u zabbix -p 输入密码 #即可成功导入5.配置Zabbix与数据库的连接为Zabbix server配置数据库,编辑配置文件 /etc/zabbix/zabbix_server.confvim /etc/zabbix/zabbix_server.conf DBPassword=password DBSocker=/tmp/mysql.sock #注意点：这里的mysql.sock路径需要与MySQL的my.cnf中的socket路径一致。 #否则会造成zabbix-server开启后虽然不报错，但是也不监听10051端口的问题。 #查看zabbix-server.log vim /var/log/zabbix/zabbix_server.log6.为Zabbix前端配置PHP编辑配置文件 /etc/opt/rh/rh-nginx116/nginx/conf.d/zabbix.conf取消注释，并配置listen和 server_name。vim /etc/opt/rh/rh-nginx116/nginx/conf.d/zabbix.conf # listen 80; # server_name example.com; #取消注释，使此配置生效。需要注意的是，这里需要配置域名，如果没有域名，会打开默认站点。 #可以将nginx的默认站点server端删除或注释掉。 vim /etc/opt/rh/rh-nginx116/nginx/nginx.conf #默认站点配置文件并设置时区。vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf ; php_value[date.timezone] = Asia/Shanghai继续编辑配置文件listen.acl_users = apache,nginx #增加nginx用户7.启动Zabbix启动各项zabbix组件，并为它们设置开机自启：systemctl restart zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm systemctl enable zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm8.初始化登陆到Zabbix前端界面，根据提示进行zabbix的初始化五、添加一个Agent设备1.安装Agent端rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm #在客户端添加yum源 sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo #将服务器地址修改为阿里云地址 yum clean all && yum install -y zabbix-agent zabbix-sender #清除yum缓存，安装agent端2.修改配置文件vim /etc/zabbix/zabbix_agentd.conf #注意:如果安装的agent2,则这里的配置文件名称为zabbix_agent2.conf Server=<zabbix-server的ip地址> ListenPort=10050 StartAgents=0 ServerActive=<zabbix-server的ip地址> Hostname=<自定义的主机名称> #Server: 被动模式访问的zabbix-server的ip #ServerActive: 主动模式访问的zabbix-server的ip #StartAgents ：zabbix_agentd用来处理被动检查的实例数量,如果设置为0，则禁用被动模式检查而且agent不再监听任何tcp端口3.启动Agent服务systemctl start zabbix-agent #启动服务 systemctl enable zabbix-agent #开机启动4.在server端添加主机菜单->配置->主机->创建主机 主机名:<必须与agent端配置文件中hostname一致> 客户端:<Agent端IP地址> 端口: 默认10050 模板选择： template os linux by zabbix agent active六、注意事项图形显示页面，出现方格乱码的处理方法。#字体获取方法 C:\Windows\Fonts目录下将宋体字体拷贝出来，并将后缀名修改为ttf。 #字体文件到zabbix的web端的fonts目录下 /usr/share/zabbix/assets/fonts #修改zabbix配置文件 vim /usr/share/zabbix/include/defines.inc.php #原内容如下： define(‘ZBX_GRAPH_FONT_NAME’, ‘graphfont’); define(‘ZBX_FONT_NAME’, ‘graphfont’); #修改成以下内容： define(‘ZBX_GRAPH_FONT_NAME’, ‘simsun’); define(‘ZBX_FONT_NAME’, ‘simsun’); #刷新图形显示页面 #即可正常显示文字Zabbix数据库编码格式错误导致无法连接数据库。首先修改数据库默认字符集及字符校验集ALTER DATABASE `zabbix` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;然后修改表找出字符检验集不对的表SELECT CONCAT("ALTER TABLE ", TABLE_NAME," CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;") AS ExecuteTheString FROM information_schema.`COLUMNS` WHERE table_schema = "zabbix" AND COLLATION_NAME = "utf8_general_ci";复制输出结果，并执行。例如以下两张表，一般会有很多。ALTER TABLE acknowledges CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin; ALTER TABLE actions CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
一、查看php是否安装指定模块php -m |grep gd #查看dg库模块是否安装，若已安装最会显示，未安装则为空，不显示。二、安装模块2.1 进入源码包cd /opt/src/php-7.4.0/ext/ #进入源码包目录 cd gd #以gd库为例，进入gd库模块目录2.2 安装模块phpize #执行phpize命令 ./configure -with-php-config=/usr/local/php/bin/php-config #预编译 #编译过程中如缺少依赖，则根据提示进行安装 #php-config 是一个简单的命令行脚本用于获取所安装的 PHP 配置的信息。 make && make install #编译并安装2.3 编译安装完成后Build complete. Don't forget to run 'make test'. Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/ Installing header files: /usr/local/php/include/php/ #根据输出可以看到，扩展模块目录为/usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/ #进入此目录/usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/ [root@localhost gd]# cd /usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/ [root@localhost no-debug-non-zts-20190902]# ls gd.so opcache.a opcache.so #可以看到gd.so已经被安装。 #在接下来的php.ini配置中，需要使用此名称。三、配置3.1 对php.ini进行配置。vim /usr/local/php/lib/php.ini #编辑php.ini文件 755 extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/" #将extension_dir取消注释，并设置为模块安装目录。 extension=gd.so #添加或取消注释，添加模块项目。 #注意，这里的gd.so名称为/usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/gd.so 3.2 验证已安装模块php -m | grep gd #查看php-fpm已安装模块 gd #有gd字样表示已经安装。 #如有报错信息，如下： PHP Warning: PHP Startup: Unable to load dynamic library 'gd2.so' (tried: /usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/gd2.so (/usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/gd2.so: cannot open shared object file: No such file or directory), /usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/gd2.so.so (/usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/gd2.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 Warning: PHP Startup: Unable to load dynamic library 'gd2.so' (tried: /usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/gd2.so (/usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/gd2.so: cannot open shared object file: No such file or directory), /usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/gd2.so.so (/usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/gd2.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 #表示php.ini配置有问题，如extension=gd.so与实际文件名称不符合。3.3 重启php-fpmsystemctl restart php-fpm #重启php-fpm
一、常规部署下载vlmcsdhttps://github.com/Wind4/vlmcsd/releases启动服务./vlmcsd-x64-musl-static #启动vlmcsd服务，默认端口为1688。 #防火墙需要允许此端口流量。二、使用Docker部署首先要安装好Docker环境拉取vlmcsd镜像Docker hub的vlmcsd镜像页面：https://hub.docker.com/r/mogeko/vlmcsddocker pull mogeko/vlmcsd运行vlmcsd容器docker run -d -p 1688:1688 --restart=always --name vlmcsd mogeko/vlmcsd防火墙设置vlmcsd服务使用1688端口，需要检查防火墙配置。firewall-cmd --permanent --add-port=1688/tcp firewall-cmd --reload #在firewall防火墙中开启1688端口
一、上传安装包到/opt目录并解压缩cd /opt tar -zxvf mysql-5.7.22.tar.gz二、上传启动文件cp mysqld.service /usr/lib/systemd/system/ #复制启动文件 systemctl daemon-reload #重新加载systemnctl配置三、上传配置文件cp my.cnf /etc/my.cnf 复制my.cnf配置文件四、创建mysql用户useradd mysql;echo <用户密码> | passwd --stdin mysql #创建mysql用户及用户组 useradd mysql -s /sbin/nologin -M #创建mysql用户及用户组，同时禁止登陆系统。五、修改文件归属chown -R mysql:mysql /opt/mysql #mysql程序文件归属 chown -R mysql:mysql /etc/my.cnf #配置文件归属六、建立软连接ln -s /opt/mysql/bin/mysql /usr/bin/ #链接bin/mysql到/usr/bin/，若建立此连接，则无需添加环境变量。 ln -s /opt/mysql/logs/mysql.sock /tmp/ #链接mysql.sock套接字，用于本地登陆数据库。七、启动服务systemctl enable mysqld #开机启动mysql systemctl restart mysqld #启动mysql八、附录my.cnf配置文件内容# For advice on how to change settings please see # http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html # *** DO NOT EDIT THIS FILE. It's a template which will be copied to the # *** default location during install, and will be replaced if you # *** upgrade to a newer version of MySQL. [mysqld] # Remove leading # and set to the amount of RAM for the most important data # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. # innodb_buffer_pool_size = 128M # Remove leading # to turn on a very important data integrity option: logging # changes to the binary log between backups. # log_bin # These are commonly set, remove the # and set as required. basedir =/opt/mysql #数据库程序文件目录 datadir =/opt/mysql/data #数据库数据文件目录 port = 3306 #端口 server-id=230 #server-id集群中需要唯一 socket =/opt/mysql/logs/mysql.sock #套接字存放目录 open_files_limit = 10240 #是mysql中的一个全局变量且不可动态修改。它控制着mysqld进程能使用的最大文件描述(FD)符数量。 #最终确定的open_files_limit 可能比你设定的大，也可能小。 log-error=/opt/mysql/logs/mysql_oldboy.err #错误日志文件存放位置 pid-file=/opt/mysql/logs/mysqld.pid #pid文件存放位置 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES lower_case_table_names=1 #忽略表明大小写 back_log = 600 #在MYSQL暂时停止响应新请求之前，短时间内的多少个请求可以被存在堆栈中。如果系统在短时间内有很多连接，则需要增大该参数的值，该参数值指定到来的TCP/IP连接的监听队列的大小。默认值80。 max_connections = 3000 #MySQL允许最大的进程连接数，如果经常出现Too Many Connections的错误提示，则需要增大此值。默认151 max_connect_errors = 6000 #设置每个主机的连接请求异常中断的最大次数，当超过该次数，MYSQL服务器将禁止host的连接请求，直到mysql服务器重启或通过flush hosts命令清空此host的相关信息。默认100 external-locking = FALSE #使用–skip-external-locking MySQL选项以避免外部锁定。该选项默认开启 max_allowed_packet = 32M #设置在网络传输中一次消息传输量的最大值。系统默认值 为4MB，最大值是1GB，必须设置1024的倍数。 thread_cache_size = 300 # 服务器线程缓存这个值表示可以重新利用保存在缓存中线程的数量 query_cache_size = 64M #在MyISAM引擎优化中，这个参数也是一个重要的优化参数。 query_cache_limit = 4M #指定单个查询能够使用的缓冲区大小，缺省为1M transaction_isolation = READ-COMMITTED # 设定默认的事务隔离级别.可用的级别如下:READ UNCOMMITTED-读未提交 READ COMMITTE-读已提交 REPEATABLE READ -可重复读 SERIALIZABLE -串行 tmp_table_size = 256M # tmp_table_size 的默认大小是 32M。如果一张临时表超出该大小，MySQL产生一个 The table tbl_name is full 形式的错误，如果你做很多高级 GROUP BY 查询，增加 tmp_table_size 值。如果超过该值，则会将临时表写入磁盘。 max_heap_table_size = 256M expire_logs_days = 7 key_buffer_size = 2048M #批定用于索引的缓冲区大小，增加它可以得到更好的索引处理性能，对于内存在4GB左右的服务器来说，该参数可设置为256MB或384MB。 read_buffer_size = 1M #默认128K # MySql读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区，MySql会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。如果对表的顺序扫描请求非常频繁，并且你认为频繁扫描进行得太慢，可以通过增加该变量值以及内存缓冲区大小提高其性能。和sort_buffer_size一样，该参数对应的分配内存也是每个连接独享。 read_rnd_buffer_size = 16M # MySql的随机读（查询操作）缓冲区大小。当按任意顺序读取行时(例如，按照排序顺序)，将分配一个随机读缓存区。进行排序查询时，MySql会首先扫描一遍该缓冲，以避免磁盘搜索，提高查询速度，如果需要排序大量数据，可适当调高该值。但MySql会为每个客户连接发放该缓冲空间，所以应尽量适当设置该值，以避免内存开销过大。 bulk_insert_buffer_size = 64M #批量插入数据缓存大小，可以有效提高插入效率，默认为8M myisam_sort_buffer_size = 128M # MyISAM表发生变化时重新排序所需的缓冲 默认8M myisam_max_sort_file_size = 10G # MySQL重建索引时所允许的最大临时文件的大小 (当 REPAIR, ALTER TABLE 或者 LOAD DATA INFILE). # 如果文件大小比此值更大,索引会通过键值缓冲创建(更慢) #myisam_recover ##自动检查和修复没有适当关闭的 MyISAM 表 #skip-name-resolve #lower_case_table_names = 1 #server-id = 1 #innodb_additional_mem_pool_size = 16M #这个参数用来设置 InnoDB 存储的数据目录信息和其它内部数据结构的内存池大小，类似于Oracle的library cache。这不是一个强制参数，可以被突破。 innodb_buffer_pool_size = 2048M # 这对Innodb表来说非常重要。Innodb相比MyISAM表对缓冲更为敏感。MyISAM可以在默认的 key_buffer_size 设置下运行的可以，然而Innodb在默认的 innodb_buffer_pool_size 设置下却跟蜗牛似的。由于Innodb把数据和索引都缓存起来，无需留给操作系统太多的内存，因此如果只需要用Innodb的话则可以设置它高达 70-80% 的可用内存。一些应用于 key_buffer 的规则有 — 如果你的数据量不大，并且不会暴增，那么无需把 innodb_buffer_pool_size 设置的太大了 innodb_thread_concurrency = 8 #服务器有几个CPU就设置为几，建议用默认设置，一般为8 innodb_flush_log_at_trx_commit = 2 # 如果将此参数设置为1，将在每次提交事务后将日志写入磁盘。为提供性能，可以设置为0或2，但要承担在发生故障时丢失数据的风险。设置为0表示事务日志写入日志文件，而日志文件每秒刷新到磁盘一次。设置为2表示事务日志将在提交时写入日志，但日志文件每次刷新到磁盘一次。 innodb_log_files_in_group = 3 #为提高性能，MySQL可以以循环方式将日志文件写到多个文件。推荐设置为3M innodb_lock_wait_timeout = 120 #默认为50秒 # InnoDB 有其内置的死锁检测机制，能导致未完成的事务回滚。但是，如果结合InnoDB使用MyISAM的lock tables 语句或第三方事务引擎,则InnoDB无法识别死锁。为消除这种可能性，可以将innodb_lock_wait_timeout设置为一个整数值，指示 MySQL在允许其他事务修改那些最终受事务回滚的数据之前要等待多长时间(秒数) innodb_file_per_table = 0 #默认为No，独享表空间（关闭）mysqld.service启动文件内容[Unit] Description=MySQL Community Server After=network.target After=syslog.target Before=shutdown.target [Service] User=mysql Group=mysql PIDFile=/opt/mysql/logs/mysqld.pid PermissionsStartOnly=true ExecStart=/opt/mysql/support-files/mysql.server start ExecStop=/opt/mysql/support-files/mysql.server stop [Install] WantedBy=multi-user.target Alias=mysql.service
一、配置1.1 配置文件设置配置文件pip.conf位于用户家目录~/.pip/下。如没有此目录和文件，可以手动创建。mkdir ~/.pip #建立.pip目录在pip下新建pip.conf，输入以下内容[global] timeout=6000 index-url = http://mirrors.aliyun.com/pypi/simple trusted-host = mirrors.aliyun.com保存退出，完成。mkdir ~/.pip cat > ~/.pip/pip.conf << EOF [global] timeout=6000 index-url = http://mirrors.aliyun.com/pypi/simple trusted-host = mirrors.aliyun.com EOF1.2 命令设置pip config set global.index-url http://mirrors.aliyun.com/pypi/simple二、国内pip软件源阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/ 中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/三、一次性使用pip3 install pymilvus -i https://mirrors.aliyun.com/pypi/simple/
一、激活Windows1.1 应用Windows序列号win10 专业版 序列号 slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX win10 企业版 序列号 slmgr /ipk 33pxH-7Y6KF-2VJC9-xBBR8-HVTHH win7专业版 序列号 slmgr.vbs -ipk FJ82H-XT6CR-J8D7P-XQJJ2-GPDD4 win7企业版 序列号 slmgr.vbs -ipk 33PXH-7Y6KF-2VJC9-XBBR8-HVTHH服务器系统WindowsServer 2008 R2 Standard 序列号 slmgr.vbs -ipk YC6KT-GKW9T-YTKYR-T4X34-R7VHC WindowsServer 2008 R2 Enterprise 序列号 slmgr.vbs -ipk 489J6-VHDMP-X63PK-3K798-CPX3Y Windows Server 2008 R2 Web 序列号 slmgr.vbs -ipk 6TPJF-RBVHG-WBW2R-86QPH-6RTM4 Windows Server 2008 R2 HPC 序列号 slmgr.vbs -ipk TT8MH-CG224-D3D7Q-498W2-9QCTX WindowsServer 2008 R2 Datacenter 序列号 slmgr.vbs -ipk 74YFP-3QFB3-KQT8W-PMXWJ-7M648 1.2 指定KMS服务器激活slmgr.vbs -skms 192.168.1.1 && slmgr.vbs -ato #将服务器地址修改为KMS服务器地址二、激活office激活前进入office安装目录cd C:\Program Files\Microsoft Office\Office16根据不同office版本，目录名不同。cscript ospp.vbs /sethst:KMS服务器地址 #设定kms服务器地址 cscript ospp.vbs /act #激活 cscript ospp.vbs /dstatus #查看状态三、官方帮助页面https://docs.microsoft.com/zh-cn/windows-server/get-started/kms-client-activation-keys