Linux

29
Nov

ElasticSearch 配置Logstash导入mysql数据库

网上教程不少,但是大多对新手不太友好,细节也不太好,这里针对ElasticSearch小白。

以ElasticSearch 5.6.12 和 LogStash 5.6.13为例。这两个的安装从略。
尽量保证两者版本不要相差太多。考虑到LogStash只作为管道,版本不需要一致。

先到LogStash目录下安装JDBC插件

cd /opt/logstash
bin/plugin install logstash-input-jdbc

如果是windows下,请自行在可执行文件后加上.bat

安装完之后开始导入,这个导入过程我们编写一个conf文件实现,这里以logstash.conf为例,为了方便可以直接在logstash/bin下创建一个logstash.conf

input {
  jdbc { 
    # "your-database" 是数据库名    
    jdbc_connection_string => "jdbc:mysql://localhost:3306/your-database"  
    #mysql数据库用户名密码
    jdbc_user => "root" 
    jdbc_password => "********"
    #schedule 可选,如果有schedule则会自动同步,这里意思是每一分钟同步一次,没有就只同步一次。具体的见官方文档
    #schedule => "* * * * *"
    #这里需要使用一个mysql连接库,文末有下载地址,自行下载后随便放一个地方,这里只是举例
    jdbc_driver_library => "/usr/local/logstash/mysql-connector-java-6.0.5.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    #查询,这里只需要select一下即可,比如从your-schema数据表
    statement => "SELECT * FROM `your-schema`"
    }
  }
output {
  stdout { codec => json_lines }
  elasticsearch {
  "hosts" => "localhost:9200"
  #your-index是事件要被写进的索引 如果没有索引就新建一个
  "index" => "your-index"
  #your-type-name 只是数据集的分类,自定义,同类数据尽量使用同一个type
  "document_type" => "your-type-name"
  #可选,这里的意思是绑定原mysql表的id列作为主键,可以避免重复
  "document_id" => "%{id}"
  }
}

然后执行

cd /opt/logstash/bin
./logstash -f logstash.conf

可以看到一排输出,然后数据就注入成功了。

顺带一提,如果小白注入完数据发现有unassigned数据,或者说集群健康度不够,是因为现在的节点分片不够存储数据集的1份备份(默认一份)。只需要执行诸如

curl -XPUT 'localhost:9200/your-index/_settings' -d '{"number_of_replicas": 0}'

将备份数降低即可。

一个可用的Maven的mysql-connector-java-6.0.5.jar

24
Nov

lnmp配置laravel/thinkphp时出现no input file specified的常见问题

lnmp的域名绑定命令即使到最新的1.5版都是一套不太成熟的做法。
我们每次执行诸如lnmp vhost add时,都会在目录下生成一个类似这样的.user.ini文件

open_basedir=/home/wwwroot/your-project/:/tmp/:/proc/

.user.ini的作用是覆写php.ini中的部分参数,在这里来说,open_basedir在php.ini中可能有一个全局值,而在这个目录下有一个局部的值会覆盖全局值。

而open_basedir则是造成nginx/php-fpm 报错的罪魁祸首,这么说可能不恰当,因为.user.ini的本意是好的,其机理是限制php访问目录,举例来说,你在这个目录下配置的php文件只能操作/home/wwwroot/your-project/下的文件。

而这样就导致了我们在使用诸如laravel/ThinkPHP框架时的问题。比如我们在home/wwwroot下建立了名为your-project的laravel项目,但是lnmp绑定vhost时,按常理是要绑定到/public目录下的。因为/public下是整个网站的入口,这样一来就产生问题了:.user.ini中会生成/home/wwwroot/your-project/public/:/tmp/:/proc/这样的参数,然而这个项目的php是必须要有要调用/public外文件的权限的!这个问题的产生往往会让人难以排查,因为不管是浏览器输出,亦或是nginx和php-fpm的log都不会给出任何错误信息,一个隐藏在/public下的.user.ini文件很难让新手发觉出问题。

解决方案:

.user.ini被安全锁定了,先使用

chattr -i .user.ini

将其解锁,然后vim编辑去掉/public,再chattr +i .user.ini加锁。
当然你也可以直接解锁后删掉,这样损失了一定安全性,对于小项目或者本地项目倒没什么意义了。

24
May

Git Config中receive.denyCurrentBranch做了什么?

官网的解答

receive.denyCurrentBranch If set to true or "refuse", git-receive-pack
will deny a ref update to the currently checked out branch of a
non-bare repository. Such a push is potentially dangerous because it
brings the HEAD out of sync with the index and working tree. If set to
"warn", print a warning of such a push to stderr, but allow the push
to proceed. If set to false or "ignore", allow such pushes with no
message. Defaults to "refuse".

Another option is "updateInstead" which will update the working tree
if pushing into the current branch. This option is intended for
synchronizing working directories when one side is not easily
accessible via interactive ssh (e.g. a live web site, hence the
requirement that the working directory be clean). This mode also comes
in handy when developing inside a VM to test and fix code on different
Operating Systems.

这个config是决定 当你Push到一个非bare的远程库的正处于切换状态下分支时的行为。

设置为true或refuse时,会拒绝你的push并且发出几行警告消息
设置为warn时,会接受你的push并且发出几行警告消息
设置为false或ignore时会接受你的push且不发出警告

后两种虽然接受了push,但并没有直接反映在工作目录(working tree)上,你需要输入

git reset --hard

或者切换到其他分支再切换回来,才能刷新文件

设置为updateInstead时,会接受push并直接更新工作目录
但如果工作目录相对HEAD指针有更新,则会拒绝push
注意只有git 版本2.5以后才添加updateInstead. 请升级后再使用

09
May

解决腾讯云Centos VPS 远程连接mysql数据库的一些问题

mysql默认只支持本地(local)连接,想要开启远程连接,也就是能从远程以mysql -h的方式连接,需要进行一些设定

1、修改mysql的远程端口限制。找到etc/my.cnf
找到如下行,并修改成这样

#skip-networking
bind-address=0.0.0.0

如果没有bind-address 就手动添加。
然后重启mysql

service mysql restart

2、输入

netstat -an|grep 3306 

确保3306端口处在监听状态,如果没有可能是mysql服务有问题,需要重装

3、在本地或其他服务器尝试

telnet *.*.*.*(vps的ip) 3306

如果能连接成功,跳到第6步

4、确保firewalld(centos自带防火墙)没有限制3306端口,或者说已关闭

5、确保iptables没有限制mysql远程连接端口 输入

iptables -L -n  --line-number

如果里面有一行是什么DROP tcp -- ... tcp dpt:mysql 记住行号,并输入命令

iptables -D INDEX 行号

来删除

6、在本地或其他服务器运行

mysql -h *.*.*.*(vps的ip) -u root(mysql用户名) -p

并输入密码 如果成功接入 远程连接的配置也就成功了!

22
Jan

SBT项目构建过慢/卡在Getting解决办法

找了找网上的镜像 发现现在阿里云和bintray的都挺好用

步骤:
window:C:\Users\用户目录.sbt\

linux:~/.sbt/
建立repositories文件(不要后缀名)
里面输入

[repositories]
#local
public: http://maven.aliyun.com/nexus/content/groups/public/
typesafe:http://dl.bintray.com/typesafe/ivy-releases/ , [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
ivy-sbt-plugin:http://dl.bintray.com/sbt/sbt-plugin-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
sonatype-oss-releases

sonatype-oss-snapshots

保存,再重新构建即可,亲测下载挺快的

22
Aug

关于Ubuntu15/16等版本安装Spotify,Brackets,遨游,Chrome等缺少Libgcrypt11支持的解决方案

具体表现为用软件安装没反应,而执行
$ spotify

$ sudo dpkg -i Brackets.1.2.Extract.64-bit.deb
均报找不到libgcrypt11的问题。
主要原因是Ubuntu新版不再支持Libgcrypt11而原装Libgcrypt20,而这些应用目前还依赖11,解决方案很简单,就是强制安装旧版的Libgcrypt11。

32Bit from LaunchPad
64Bit from LaunchPad

或者从官网获取