sphinx配置文件详解

sphinx配置详解以及命令演示

sphinx的配置:

其结构组成主要如下:

Source 源名称1{                //指定数据源

一些配置

}

Index 索引名称1{

Source=源名称1

}

Source 源名称2{

一些配置

}

Index 索引名称2{

Source=源名称2

}

Indexer{

mem_limit = 32M

}

Searchd{                             //配置 searchd 守护程序本身

}

二.    Source 源名称 相关配置说明

Type=数据库类型(Mysql 或SQL);

Sql_host=              数据库主机地址(如果是外网,请确保防火墙允许链接)

Sql_user=                     数据库用户名

Sql_pass=                     数据库密码

Sql_db=                 数据库名称

Sql_port=               数据库端口

Sql_query_pre=      执行SQL前设置的编码 (SET NAMES UTF8)

Sql_query=            全文检索要显示的内容,据官方说法:尽可能不要使用WHERE或GROUPBY ,将其交给SPHINX效率会更高;select 出来的字段必须包含至少一个唯一主键,以及全文检索的字段 sphinx 会对SELECT 中的 字段1 ,字段2 建立sphinx自己的索引 及 在查询的字段中查找关键字


  1. Sql_query_info= SELECT * FROM Inventory WHERE id=$id  来查找匹配记录 在查询中,$id 被替换为 searchd 返回的每个主键 (调试是使用 建议注释此项)

Strip_html= 0/1      是否去掉HTML标签

Sql_attr_uint=         无符号整数属性,可以设置多个,设置数据库字段,设置哪个能显示出哪个字段数据的整形来.

三.    Index中配置说明

Source=                 数据源名称

Path =                 索引记录存放目录,注:d:/sphinx/data/cg 这个的意思是 在data目录下创建一个名为cg的文件

min_word_len=      索引的词的最小长度 设为1 既可以搜索单个字节搜索,越小 索引越精确,但建立索引花费的时间越长

charset_type=        utf-8/gbk 设置数据编码

charset_table=        字符表和大小写转换规则 .频繁应用于sphinx的分词过程

min_prefix_len =    最小前缀(0)

min_infix_len =      最小中缀(1)

ngram_len =        对于非字母型数据的长度切割(默认已字符和数字切割,设置1为按没个字母切割)

四.    searchd配置说明

port=                     sphinx的端口(9312 与 searchd.exe监听结果一致)

log=                      服务进程日志存放路径,一旦sphinx出现异常,基本上可以从这里查询有效信息

query_log=             客户端查询日志 尤为有用 它将在运行时显示每次搜索并显示结果

read_timeout=        请求超时(5)

max_children=        同时可执行的最大searchd 进程数(30)

pid_file=                进程ID文件

max_matches=              查询结果的最大返回数

seamless_rotate=    是否支持无缝切换,做增量索引时通常需要(0/1)

# 在启动运行时是否提前加载所有索引文件

preopen_indexes = 0

# 是否释放旧的索引文件
unlink_old = 1

# MVA跟新池大小(默认为1M)
mva_updates_pool = 1M

# 最大允许的网络包大小(默认8M)
max_packet_size = 8M

# 每个查询最大允许的过滤器数量(默认256)
max_filters = 256

#每个过滤器最大允许的值的个数(默认4096)
max_filter_values = 4096

# 每个组的最大查询数(默认为32)
max_batch_queries = 32

至此 spninx.conf 配置文件结束;注意:如果有换行 必须用反斜杠 链接

配置案例:


  1. #定义一个数据源
  2. source search_main
  3. {
  4.            #定义数据库类型
  5.     type                 = mysql
  6.            #定义数据库的IP或者计算机名
  7.     sql_host             = localhost
  8.            #定义连接数据库的帐号
  9.     sql_user             = root
  10.            #定义链接数据库的密码
  11.     sql_pass             = test123
  12.            #定义数据库名称
  13.     sql_db               = test
  14.            #定义连接数据库后取数据之前执行的SQL语句
  15.     sql_query_pre        = SET NAMES utf8
  16.     sql_query_pre        = SET SESSION query_cache_type=OFF
  17.            #创建一个sph_counter用于增量索引
  18.     sql_query_pre        = CREATE TABLE IF NOT EXISTS sph_counter
  19.                                       ( counter_id INTEGER PRIMARY KEY NOT NULL,max_doc_id INTEGER NOT NULL)
  20.            #取数据之前将表的最大id记录到sph_counter表中
  21.     sql_query_pre        = REPLACE INTO sph_counter SELECT 1, MAX(searchid) FROM v9_search
  22.            #定义取数据的SQL,第一列ID列必须为唯一的正整数值
  23.     sql_query            = SELECT searchid,typeid,id,adddate,data FROM v9_search where
  24.                                       searchid<( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )
  25.                                         and searchid>=$start AND searchid<=$end
  26.            # sql_attr_uint和sql_attr_timestamp用于定义用于api过滤或者排序,写多行制定多列
  27.     sql_attr_uint        = typeid
  28.     sql_attr_uint        = id
  29.     sql_attr_timestamp   = adddate
  30.            #分区查询设置
  31.     sql_query_range      = SELECT MIN(searchid),MAX(searchid) FROM v9_search
  32.            #分区查询的步长
  33.     sql_range_step       = 1000
  34.            #设置分区查询的时间间隔
  35.     sql_ranged_throttle  = 0
  36.            #用于CLI的调试
  37.     sql_query_info       = SELECT * FROM v9_search WHERE searchid=$id
  38. }
  39. #定义一个增量的源
  40. source search_main_delta : search_main
  41. {
  42.     sql_query_pre       = set names utf8
  43.            #增量源只查询上次主索引生成后新增加的数据
  44. #如果新增加的searchid比主索引建立时的searchid还小那么会漏掉
  45.     sql_query           = SELECT searchid,typeid,id,adddate,data FROM v9_search where  
  46.                                   searchid>( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )
  47.                                    and searchid>=$start AND searchid<=$end
  48.     sql_query_range     = SELECT MIN(searchid),MAX(searchid) FROM v9_search where
  49.                                        searchid>( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )
  50. }
  51. #定义一个index_search_main索引
  52. index index_search_main
  53. {
  54.            #设置索引的源
  55.     source            = search_main
  56.            #设置生成的索引存放路径
  57.     path         = /usr/local/coreseek/var/data/index_search_main
  58.            #定义文档信息的存储模式,extern表示文档信息和文档id分开存储
  59.     docinfo           = extern
  60.            #设置已缓存数据的内存锁定,为0表示不锁定
  61.     mlock             = 0
  62.            #设置词形处理器列表,设置为none表示不使用任何词形处理器
  63.     morphology        = none
  64.            #定义最小索引词的长度
  65.     min_word_len      = 1
  66.            #设置字符集编码类型,我这里采用的utf8编码和数据库的一致
  67.     charset_type      = zh_cn.utf8
  68.            #指定分词读取词典文件的位置
  69.     charset_dictpath  = /usr/local/mmseg3/etc
  70.            #不被搜索的词文件里表。
  71.     stopwords       = /usr/local/coreseek/var/data/stopwords.txt
  72.            #定义是否从输入全文数据中取出HTML标记
  73.     html_strip       = 0
  74. }
  75. #定义增量索引
  76. index index_search_main_delta : index_search_main
  77. {
  78.     source   = search_main_delta
  79.     path    = /usr/local/coreseek/var/data/index_search_main_delta
  80. }
  81. #定义indexer配置选项
  82. indexer
  83. {
  84.            #定义生成索引过程使用索引的限制
  85.     mem_limit        = 512M
  86. }
  87. #定义searchd守护进程的相关选项
  88. searchd
  89. {
  90.            #定义监听的IP和端口
  91.     #listen            = 127.0.0.1
  92.     #listen            = 172.16.88.100:3312
  93.     listen            = 3312
  94.     listen            = /var/run/searchd.sock
  95.            #定义log的位置
  96.     log                = /usr/local/coreseek/var/log/searchd.log
  97.            #定义查询log的位置
  98.     query_log          = /usr/local/coreseek/var/log/query.log
  99.            #定义网络客户端请求的读超时时间
  100.     read_timeout       = 5
  101.            #定义子进程的最大数量
  102.     max_children       = 300
  103.            #设置searchd进程pid文件名
  104.     pid_file           = /usr/local/coreseek/var/log/searchd.pid
  105.            #定义守护进程在内存中为每个索引所保持并返回给客户端的匹配数目的最大值
  106.     max_matches        = 100000
  107.            #启用无缝seamless轮转,防止searchd轮转在需要预取大量数据的索引时停止响应
  108.     #也就是说在任何时刻查询都可用,或者使用旧索引,或者使用新索引
  109.     seamless_rotate    = 1
  110.            #配置在启动时强制重新打开所有索引文件
  111.     preopen_indexes    = 1
  112.            #设置索引轮转成功以后删除以.old为扩展名的索引拷贝
  113.     unlink_old         = 1
  114.            # MVA更新池大小,这个参数不太明白
  115.     mva_updates_pool   = 1M
  116.            #最大允许的包大小
  117.     max_packet_size    = 32M
  118.            #最大允许的过滤器数
  119.     max_filters        = 256
  120.            #每个过滤器最大允许的值的个数
  121.     max_filter_values  = 4096
  122. }

sphinx的管理命令:

1. 生成全部索引

/usr/local/sphinx/bin/indexer –config /usr/local/sphinx/etc/sphinx.conf –all

若此时searchd守护进程已经启动,那么需要加上—rotate参数:

/usr/local/sphinx/bin/indexer –config /usr/local/sphinx/etc/sphinx.conf –all –rotate

2. 启动searchd守护进程

/usr/local/sphinx/bin/searchd –config /usr/local/sphinx/etc/sphinx.conf

3. 生成主索引

写成shell脚本,添加到crontab任务,设置成每天凌晨1点的时候重建主索引

/usr/local/sphinx/bin/indexer –config /usr/local/sphinx/etc/sphinx.conf –rotate index_search_main

4. 生成增量索引

写成shell脚本,添加到crontab任务,设置成每10分钟运行一次

/usr/local/sphinx/bin/indexer –config /usr/local/sphinx/etc/sphinx.conf –rotate index_search_main_delta

5. 增量索引和主索引的合并

写成shell脚本,添加到计划任务,每15分钟跑一次

/usr/local/sphinx/bin/indexer –config /usr/local/sphinx/etc/sphinx.conf –merge index_search_main index_search_main_delta –rotate

6. 使用search命令在命令行对索引进行检索

/usr/local/sphinx/bin/search –config /usr/local/sphinx/etc/sphinx.conf

文章来源:https://www.cnblogs.com/yjf512/p/3598332.html

linux删除乱码文件

linux中发现了乱码文件,LL命令后发现是“?”或其他什么字符,总之就是没法正式的打出乱码文件的名称,这种情况想要删除或者修改,应该怎么处理?没关系,linux提供了像id一样的文件编号,来供使用。

不知道大家有没有碰到这种文件,因为是乱码,文件无法删除,这时我们就可以考虑用下面的命令进行删除文件或目录

ls -i //列出文件节点

find ./ -inum XXX(节点号) -print -exec rm -rf {} \; //删除节点号文件

find . -inum XXXX(节点号) -exec mv {} file.txt \; //其实我们还可以执行这个命令,修改乱码文件名为正常文件名

[root@ora9i installation]# ls -li
total 1307844
1343491 -rw-r–r– 1 root root 423559952 Sep 14 2012 amd64_db_9204_Disk1.cpio.gz
1343492 -rw-r–r– 1 root root 578948873 Sep 14 2012 amd64_db_9204_Disk2.cpio.gz
1392641 -rw-r–r– 1 root root 334834987 Sep 14 2012 amd64_db_9204_Disk3.cpio.gz
1490946 -rw-r–r– 1 root root 225374 Jun 2 02:55 p2617419_220_GENERIC.zip
1622017 -rw-r–r– 1 root root 286639 Jun 2 02:55 p3238244_9204_LINUX.zip
1622018 -rw-r–r– 1 root root 5814 Jun 2 02:55 p4198954_40_linux.zip
1490945 -rwxrwxrwt 1 root root 0 Jan 1 1970 RBh?????^??^???PB??!?l???9??????s??????y???9`??k?E??~?V6?ޘ#Xh???({??Ą????Q??????>???wJ?}a?A)??_yS

[root@ora9i installation]# find . -inum 1490945 -exec rm {} -rf \;

[root@ora9i installation]# ll
total 1307840
-rw-r–r– 1 root root 423559952 Sep 14 2012 amd64_db_9204_Disk1.cpio.gz
-rw-r–r– 1 root root 578948873 Sep 14 2012 amd64_db_9204_Disk2.cpio.gz
-rw-r–r– 1 root root 334834987 Sep 14 2012 amd64_db_9204_Disk3.cpio.gz
-rw-r–r– 1 root root 225374 Jun 2 02:55 p2617419_220_GENERIC.zip
-rw-r–r– 1 root root 286639 Jun 2 02:55 p3238244_9204_LINUX.zip
-rw-r–r– 1 root root 5814 Jun 2 02:55 p4198954_40_linux.zip

missing argument to `-exec` // 若使用中遇到这个问题,可能是因为rm {} -rf \; 这里“rf”后面和 “\” 少了空格。

文章来源:https://www.cnblogs.com/quanweiru/p/3764003.html

中国部署4台IPv6根服务器

IPv6时代即将来临

记者日前从下一代互联网国家工程中心获悉,由该中心牵头发起的“雪人计划”已在全球完成25台IPv6(互联网协议第六版)根服务器架设,中国部署了其中的4台,打破了中国过去没有根服务器的困境。

最新统计数据显示,截至2017年8月,25台IPv6根服务器在全球范围内已累计收到2391个递归服务器的查询,主要分布在欧洲、北美和亚太地区,一定程度上反映出全球IPv6网络部署和用户发展情况。从流量看,IPv6根服务器每日收到查询近1.2亿次。

根服务器负责互联网最顶级的域名解析,被称为互联网的“中枢神经”。美国利用先发优势主导的根服务器治理体系已延续近30年。在过去的IPv4(互联网协议第四版)体系内,全球共13台根服务器,唯一主根部署在美国,其余12台辅根有9台在美国,2台在欧洲,1台在日本。

工程中心主任刘东对新华社记者说,这个治理体系一方面造成了全球互联网关键资源管理和分配极不均衡;另一方面,缺乏根服务器使各国抵御大规模“分布式拒绝服务”攻击能力不足,为各国互联网安全带来隐患。

随着互联网接入设备数量增长,原有IPv4体系已经不能满足需求,IPv6协议在全球开始普及。

刘东介绍说,工程中心抓住这个历史机遇,于2013年联合日本和美国相关运营机构和专业人士发起“雪人计划”,提出以IPv6为基础、面向新兴应用、自主可控的一整套根服务器解决方案和技术体系。

在与现有IPv4根服务器体系架构充分兼容基础上,“雪人计划”于2016年在美国、日本、印度、俄罗斯、德国、法国等全球16个国家完成25台IPv6根服务器架设,其中1台主根和3台辅根部署在中国,事实上形成了13台原有根加25台IPv6根的新格局,为建立多边、民主、透明的国际互联网治理体系打下坚实基础。

地址多到可分配给空中尘埃

中国近日发布《推进互联网协议第六版(IPv6)规模部署行动计划》,推动建设IPv6商用网络。当前,基于IPv6的下一代互联网成为各国推动新科技产业革命和重塑国家竞争力的先导领域,亚太互联网信息中心预测,10年内IPv4将全面退出历史舞台,互联网将全面转向IPv6。

TCP/IP协议是互联网发展的基石,其中IP是网络层协议,规范互联网中分组信息的交换和选路。目前采用的IPv4协议地址长度为32位,总数约43亿个IPv4地址已分配殆尽。

统计显示,美国拥有IPv4地址最多,平均每个网民可分到近6个地址,而中国、巴西、墨西哥等发展中国家网民人均仅有不到半个IPv4地址。

为应对地址不足,上世纪90年代,负责互联网国际标准制定的机构——互联网工程任务小组(IETF)协调各方意见后,推出IPv6协议,并大力推广。IPv6采用128位地址,将地址空间扩大到2的128次方。中国工程院院士、清华大学教授吴建平说,这个空间大到无法想象,甚至“可以分配地址到空中的尘埃”。TCP/IP协议共同开发者、被誉为“互联网之父”之一的文顿·瑟夫博士表示:“IPv4是实验网络,IPv6网络是未来发展的必由之路。”

开放性、共享性是互联网发展的原动力,但也给黑客、不法分子甚至恐怖分子带来可乘之机。

“IPv6带来的实名制不会泄露隐私,有了IPv6,可以很大程度上减少网络诈骗,因为可以精准定位地址。”中国工程院院士邬贺铨说,IPv6的可溯源性还可很好支持越来越多设置实名认证门槛的网上应用,以“芝麻信用”为例,凭用户上网地址有助判断其信用。

文章来源:http://news.163.com/17/1128/06/D4AD2PE8000187VI.html

mysqldump 导出命令实例

mysql 以sql文件导出一个表的部分数据的命令

mysql 以sql文件导出一个表的部分数据的命令

mysqldump -t -uuser -ppassword --database dbname --tables tablename --where="true limit 0,500000" > name.sql

参数介绍:

-t 仅导出数据;

-u 数据库登录用户名

-p 数据库登录用户密码

–database 指定数据库

–tables 指定表

–where 添加where条件

最后 > name.sql 表示 将数据导出在名字为 name.sql 的文件中,此处名字也可以是目录

phalcon 访问IndexController 中只能访问indexAction方法,访问不了testAction

phalcon 访问IndexController 中只能访问indexAction方法,访问不了testAction
但是可以访问ArticleController里面的任意方法
看说是Apache 的rewrite问题

但是我的.htaccess文件都是按照文档里面的。

两个.htaccess

第一个

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule  ^$ public/    [L]
<span">RewriteRule  ((?s).*) public/$1 [L] 
</IfModule>

public目录下面的.htaccess中

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L] 
</IfModule>

访问路由 localhost/index/test访问不到,但是localhost/index.php?_url=/index/test可以访问得到

解决方法:

直接打印 $_request,发现当路径为 localhost/index/test 的时候,没有_url参数,判断是url重新没成功。将 RewriteCond %{REQUEST_FILENAME} !-f 这行去掉,发现_url 的值是 index.php/test

也就是说apache没有将index/test 看成一个整体,分开请求了,先请求index再请求test,当index不存在时,直接去找index.php,index.html,此时index匹配成功重写取消,而index下的test没有匹配成功,重写后就成了index.php/test了。那么apache为什么不是把index/test看成一个整体,而是分开去处理呢?

怀疑是因为httpd.conf中打开了允许列出目录的功能 mod_autoindex;并设置了Options Indexes允许目录浏览,受目录浏览影响导致重写问题,

取消掉Options 的其他参数,仅保留FollowSymLinks参数,重启apache后,index/test 可以正常访问了

难道真是目录浏览功能的问题?

Options +Indexes +Includes +FollowSymLinks +MultiViews

配置中一共有四个参数,挨个试,最后发现是受MultiViews参数影响。。。但是具体为什么就不清楚了,

ps:出现该问题的工具是wampserver 3.0.6 64bit 版本,32bit版本的没出现该问题,老版的apache也没出过现该问题,猜测可能是apache版本升级进行了什么调整导致的,具体原因再论。

2018-11-28 更新
今天看到一篇文章,标题为: apache的MultiViews的问题

文章来源:https://blog.csdn.net/u014359108/article/details/70859651

该博文介绍了:

MultiViews的作用是当访问到目录中不存在的对象时,
如访问”http://localhost/test/target”,
则apache会寻找该目录下的所有target.*文件.
如果test目录下存在target.jpg文件,
则会把这个文件返回给客户,
而不是返回出错信息.
再分析一下我们现在面对的实例.由于MultiViews的特性,
当访问“http://servername/Index/index”时.
由于根目录下存在index.php文件
所以上面的访问会变成这样:
“http://servername/Index.php/index”

到这里,就清楚为什么httpd.conf中有MultiViews 配置是

Options +FollowSymLinks +MultiViews

phalcon 访问indexController 的方法是就只能访问indexAction()了

mysql解决only_full_group_by

mysql解决only_full_group_by

下载安装的是最新版的mysql5.7.x版本,默认是开启了 only_full_group_by 模式的,但开启这个模式后,原先的 group by 语句就报错,然后又把它移除了。

一旦开启 only_full_group_by ,感觉,group by 将变成和 distinct 一样,只能获取受到其影响的字段信息,无法和其他未受其影响的字段共存,这样,group by 的功能将变得十分狭窄了

only_full_group_by 模式开启比较好。

因为在 mysql 中有一个函数: any_value(field) 允许,非分组字段的出现(和关闭 only_full_group_by 模式有相同效果)。

 

具体出错提示:

[Err] 1055 – Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column ‘information_schema.PROFILING.SEQ’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

1、查看sql_mode

01
select @@global.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

2、去掉ONLY_FULL_GROUP_BY,重新设置值。

01
set @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

3、上面是改变了全局sql_mode,对于新建的数据库有效。对于已存在的数据库,则需要在对应的数据下执行:

1
set
sql_mode
='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

 

解决办法大致有两种:

一:在sql查询语句中不需要group by的字段上使用any_value()函数

这种对于已经开发了不少功能的项目不太合适,毕竟要把原来的sql都给修改一遍

二:修改my.cnf(windows下是my.ini)配置文件,删掉only_full_group_by这一项

若我们项目的mysql安装在ubuntu上面,找到这个文件打开一看,里面并没有sql_mode这一配置项,想删都没得删。

当然,还有别的办法,打开mysql命令行,执行命令

1
select @@sql_mode;

这样就可以查出sql_mode的值,复制这个值,在my.cnf中添加配置项(把查询到的值删掉only_full_group_by这个选项,其他的都复制过去):

1
sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION;

如果 [mysqld] 这行被注释掉的话记得要打开注释。然后重重启mysql服务

注:使用命令

1
set sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

这样可以修改一个会话中的配置项,在其他会话中是不生效的。

微信invalid signature处理

微信js_sdk, invalid signature 错误,问题原来出在这里了。。。

微信分享功能,测试没问题,放到线上后一直报错,config:invalid signature,签名校验工具生成的和后台生成的一样,网上说的各种方法都实验了一遍,正式线上环境依然报错。

偶尔灵光一闪,发现了问题所在:

因为先用的测试环境,前端的appid就用的测试号的appid,上传到正式环境后,服务器上正式环境的appid是正式的appid,但是前端的没有改,后端sign生成没问题,拿后端的参数校验也没问题,唯独appid,因为是写死在前端的,没有改,所以到线上后,就报错了。。。。

还是自己不够细心,在此记录下,也希望为能为遇到同样问题的您,提供一个解决问题的线索。。

dede 添加addfields属性后,自定义字段还是出不来

dede 添加addfields属性后,自定义字段还是出不来

如下列内容,写好后,发现自定义的mytitle字段没法显示,

{dede:arclist addfields=’mytitle’ row=’8′ }
[field:mytitle/]<br />
{/dede:arclist}

别人的东西用起来就是麻烦,网上查还查不到详细介绍,

但是通过详细观察发现,arclist 用到 addfields 属性时,都伴有 channelid 属性,难道是缺少了这个属性导致的

{dede:arclist addfields=’mytitle’ row=’8′ channelid=’3′ }
[field:mytitle/]<br />
{/dede:arclist}

加上后,自定义的 mytitle 字段可正常显示了

wordpress更新提示“另一更新正在进行”

在后台准备选择WordPress自动升级的时候看到有”另一更新正在进行”错误提示,无法执行升级到最新版本的问题。通过搜索看到也有网友遇到这个问题,可能是因为上一次升级过程中导致占用库表,然后被锁定的关系无法继续。

第一、出现的错误问题

完整解决升级WordPress程序提示"另一更新正在进行"问题

应该是数据库表中有表被锁定导致无法继续。

第二、解决问题

1、登入数据库客户端,打开wp_options数据表,然后找到core_updater.lock字段。

SELECT * FROM blog_options WHERE option_name LIKE ‘%core_updater.lock%’

 

2、找到这个字段,然后删除。

最后,我们再去执行升级WordPress就没有这个”另一更新正在进行”问题错误提示,问题解决了。

执行 rm -rf /bin 命令后

不小心删除了/bin目录,对于我们这种对系统认识不太高的人来说,的确是受到了灾难性的打击,但是静下心来好好搜索分析,还是能找到解决办法的,跨过了一个坎,就是一次成长,亲们,发现php的强大了吗^_^!

由于服务器被挖矿程序黑了,cpu占到100%,在删除相关问题文件的时候,不小心执行了 rm -rf /bin 命令,然后再删除另一个恶意文件时,发现rm命令不能用了,查询一下,发现ls和vi这些个基本命令全都不可用了,这下发现自己闯大祸了。线上服务器出问题从来没有小问题。

什么都不敢动了,赶紧网上查解决办法,网上大体上是给出了两个方案:一个是去机房使用系统光盘恢复bin目录;一个是从相同系统中拷贝bin目录下的文件到当前目录。简单了解了下,如果删除后取消了远程连接,也没办法再登录了,就只能用第一个方法了。还好,我保留着连接没有断,另外有一个相同系统的正常的服务器的bin目录可供使用,所以决定用第二个方案。

然而,问题又来了,bin被删除后,基本上系统什么命令都没办法执行了,cp,scp等等所有能用的命令都不可用了。。。

正在陷入极度恐慌之时,搜索到一篇文章,给了我一个思路,文章地址:http://www.cnblogs.com/hark0623/p/5886091.html,就是将文件放到web服务器上,然后通过wget将文件拉倒当前服务器来。接下来将被删除bin目录的服务器称为A,同系统正常服务器称为B;

按照这个思路,我将B服务器上的bin目录copy了一份到B服务器的web目录,浏览器测试可以将文件下载下来,接下来考虑怎样在A服务器上获取文件。原本文章里面说的使用wget的功能,经测试发现命令不可用,就是说wget也是在bin目录里的命令。那就再换思路,除了bin目录里的命令,还有哪些是可以远程获取文件内容的。

由于A、B两台服务器用的都是php,我就考虑,能不能用php的函数实现从B服务器上复制文件到A服务器上来的可能性。

php执行脚本的路子已经很熟悉了,但是当前情况是,A服务器上已经没办法进行vi等类似的编辑操作,也没法进行git等版本控制器的操作了,那么php有没有类似的命令行操作呢?然后继续网上搜索信息,发现php是可以直接执行php脚本的,参考文章地址:http://www.linuxdiyf.com/linux/13076.html,文章里提供了一个方法:

/usr/local/php/bin/php -r 'phpinfo();'

经过测试,使用下面的命令:

/usr/local/php/bin/php -r '$content=file_get_contents("http://abc.def.com/testbin/ls");file_put_contents("ls",$content);'

顺利的将B服务器上的文件拷贝到了A服务器上来,测试是否可用

./ls

提示权限不足,跟这篇文章给的结果一样:http://www.cnblogs.com/hark0623/p/5886091.html,采用文章里的方法:perl -e “chmod 0777, ‘mkdir'”,perl命令依然不能用,那就继续php解决:

/usr/local/php/bin/php -r 'chmod("ls",0777);'

再次测试 ./ls 发现可用了,按照这个思路,重点拿到了cp和rz文件,通过cp将rz文件copy到 /bin 目录下,然后将剩下的文件全部通过rz上传到A服务器的/bin目录,chmod修改权限后,基本命令都恢复可用了,远程登录也OK了,至此问题解决