MySQL 主从复制

 

mysql 的主从复制实现的原理就是 binlog 日志,那么我们主节点负责数据库写操作,而从节点负责读操作,这样在从节点上不需要使用事务,能够大大提高数据库的性能。那么这个时候面临的问题就是从节点如何来同步主节点数据的问题,就用到了我们之前说过的 binlog 日志。从节点通过 binlog 日志来与主节点进行数据同步。

 

学习地址:http://www.roncoo.com/course/view/658088f6e77541f5835b61800314083e 

 

 

三台节点,一个 master,两个 slave,规划如下

 

master                                     192.168.153.201

 

slave1                                     192.168.153.152

 

slave2                                     192.168.153.153

 

三台节点都是使用 CentOS6.9 操作系统,数据库使用的是 mysql5.7。

 

配置 master

 

1.创建用户并授权,比如我们的用户叫做 repl,创建用户语法如下:

 

create user ‘repl’

 

 

 

 

 

 

2.授权。用户必须具备 replication slave 权限,除此之外不需要其他的权限

 

grant replication slave on *.* to ‘repl’@’192.168.153.%’ identified by ‘repl’;

 

 

 

 

 

 

3.开启 binlog 日志

 

这里可以参考开启 binlog 日志的文档。

 

至此,主服务器就配置好了。下面来进行配置从服务器

 

slave1

 

1.修改 my.inf 配置文件

 

[mysqld]server-id=2relay-log-index=slave-relay-bin.indexrelay-log=slave-relay-

 

bin

 

2.连接 Master

 

change master to master_host=’192.168.0.104′, //Master 服务器 Ip

 

master_port=3306,

 

master_user=’repl’,

 

master_password=’mysql’,

 

 

master_log_file=’master-bin.000001′,//Master 服务器产生的日志 master_log_pos=0;

 

change master to

 

master_host=’192.168.153.201′,master_port=3306,master_user=’repl’,master_passwo rd=’repl’,master_log_file=’/var/lib/mysql/mysql-bin.000001′,master_log_pos=0;

 

3.查看状态

 

show slaves status\G

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

这里关注两个地方,第一个是 Slave_IO_Running,第二个是 Slave_SQL_Running。这两个必须都为 yes 才可以启动从节点。那么问题出现在哪里呢,后面会有日志提示

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

这里是说两台节点的 uuid 一致,要让这两台机器的 uuid 不一致才行,那么 uuid 在哪呢,在我们数据目录下 auto.cnf 文件中,只要修改这个文件就可以了。

 

 

 

 

 

 

 

 

再来查看状态,然后就为 yes 了。

 

4.启动

 

start slave

 

5.关闭

 

stop slave

 

6.重置

 

reset    slave

 

学习地址:http://www.roncoo.com/course/view/658088f6e77541f5835b61800314083e 

MySQL主从复制

Synergy 一套键鼠同时控制多台电脑的神器!超级方便!(开源免费,支持Win/Mac/Linux)

想必很多人都拥有多台电脑,譬如台式机+笔记本,很多时候我们都会同时打开它们工作。可是你有没发现,如果桌子上摆放着多台电脑多套键盘鼠标,不停来回切换使用是否很累呢?如果说现在可以只用一套键鼠,就能同时控制你全部的电脑,你会否兴奋?

Synergy 正是为此而生的好工具!它可以让你的多台电脑共享一套键鼠,甚至还可以共享剪贴板,而你只需动动鼠标,指针就可以轻松地在各台电脑屏幕之间来回穿梭,就像一台电脑使用多个显示器一样。而且 Synergy 完全免费开源,并跨平台支持 Win/Mac/Linux,相当给力! 使用之后,工作效率提高,腿不酸腰不疼,桌面也干净了,绝对是绝世神器啊!

「注意:Synergy 现已正式改为*收费*软件了!」

Synergy 的使用方法:

我的桌子上有1个台式机 (Windows7) 和1个 MacBook Pro 笔记本 (Mac OSX),偶尔还会用到另外一台笔记本 (Linux/Win双系统) 同时协同工作,这时候桌子上的键鼠们开始打架了,3个鼠标+2个键盘,还要不断移动身体去迁就电脑的位置。这时候就可以,或者说是非常需要 Synergy 来解放这种痛苦了!OK,开始吧……

Synergy

Synergy 有一个使用前提,就是你的应用环境中的多台电脑需要在同一局域网内。譬如说,家里使用一个路由器共享上网的,其下的全部电脑一般就是在同一局域网内。关于局域网的知识就不再在此阐述了,估计大家都知道怎么组网吧。

虽然 Synergy 的配置和使用其实并不难,但目前它只有英文界面,而且界面我个人感觉做得不是很易用,可能新手咋看上去有点晕,我大概说说它是怎么个运作的吧。当然,这事也不能说得太细,不然大家就没得折腾了,这一没折腾,很多人就没人生乐趣了,到时候黑着脸来找我就不好。

设置服务器端:

为了简单起见,我现在只选用已经在同一局域网下的 Macbook Pro 和 PC 两台电脑,而且为了教程更通用,我把MBP也切换到Win7系统 (就是现在两台电脑都是Win7了),在它们中都安装好 Synergy 之后,那么我们先要挑一台使用键鼠的机器设置为服务器端,这里是我的台式机。如图:

Synergy服务器端

按 Configure Server 进入设置界面:

Synergy设置

从右上角拖动一台电脑放到方框中 (删除的话是把电脑图标拖放到左上角的垃圾桶),模拟现实的位置摆放好。例如我的台式机PC是服务器端,MacBook 是在台式机的左边,按图中那样设置,然后把名字改成客户端电脑的计算机名(Win用户可以在“我的电脑”右键属性中看到)。如果多台电脑也是这样依次添加,确定后返回之前的界面,按Start启动服务。

设置客户端:

客户端的设置比服务器端要简单得多。我们来到 Macbook上,启动 Synergy 后,只要选择成客户端模式,并填上服务器的计算机名或者IP地址即可。如下图,设置好后,同样按 Start 即可让其连接服务器。

Synergy客户端

一般来说,如果连接成功的话,你的鼠标已经可以游走在两台电脑之间了。当然,当的鼠标从PC移动到Macbook之后,我们的键盘也会对Macbook生效,而对PC无效了。我可以在 MacBook 上CTRL+C拷贝一些文字,然后再移动回PC上按键盘CTRL+V粘贴,一切都是那么顺畅自然!非常有意思!

写在后面:

Synergy 真的是一款相当相当赞的软件!它能大大提高多电脑用户的工作效率,特别是频繁要在不同平台下工作的朋友。更难能可贵的是,这么优秀的一款软件竟然还是免费开源的~不得不对作者肃然起敬啊。其实对于这种软件,即使是要付款的,我也觉得很值得,因为它能真真切切地方便自己。目前唯一美中不足的是,它只能跨机共享剪贴板中的文本信息,不能跨电脑拷贝文件,也不能方便地在两台电脑之间随意拖动来传输文件,不然就真是碉堡了。至于在MacLinux下的操作、快捷键的设置等更多高级的玩法就等你自己去折腾吧。

另外,我发现这货还能用来捉弄人,让女友/男友给送个小鼠标,然后偷偷帮ta装上 Synergy 之后连接好,在Ta正沉迷着玩某东西的时候,一鼠标飞过去,咩咔咔,咱家的小鼠标还有魔法效果呢!这种吓死爹的效果真不错的。废话我说完了,撤……

相关文件下载地址:

官方网站:访问
软件性质:付费

下载 Synergy (Windows版32位)  |  Win64位  |  Mac版  |  Ubuntu/Debian版  |  Fedora/RedHat版

 http://www.iplaysoft.com/synergy.html

git add , git commit 添加错文件 撤销

1. git add 添加 多余文件
这样的错误是由于, 有的时候 可能

git add . (空格+ 点) 表示当前目录所有文件,不小心就会提交其他文件

git add 如果添加了错误的文件的话

撤销操作

git status 先看一下add 中的文件
git reset HEAD 如果后面什么都不跟的话 就是上一次add 里面的全部撤销了
git reset HEAD XXX/XXX/XXX.java 就是对某个文件进行撤销了

2. git commit 错误

如果不小心 弄错了 git add后 , 又 git commit 了。
先使用
git log 查看节点
commit xxxxxxxxxxxxxxxxxxxxxxxxxx
Merge:
Author:
Date:

然后
git reset commit_id

over

PS:还没有 push 也就是 repo upload 的时候

git reset commit_id (回退到上一个 提交的节点 代码还是原来你修改的)
git reset –hard commit_id (回退到上一个commit节点, 代码也发生了改变,变成上一次的)

3.如果要是 提交了以后,可以使用 git revert

还原已经提交的修改
此次操作之前和之后的commit和history都会保留,并且把这次撤销作为一次最新的提交
git revert HEAD 撤销前一次 commit
git revert HEAD^ 撤销前前一次 commit
git revert commit-id (撤销指定的版本,撤销也会作为一次提交进行保存)
git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容。

http://blog.csdn.net/kongbaidepao/article/details/52253774

基于AIML的PHP聊天天机器人

0. 提醒

该聊天机器人是参考AIML 2.5和Program-P而写成的,这聊天机器人实现的aiml标签和标准的aiml标签由一定的差距,所以你从网上下载的aiml语料库可能没法正常工作。适用于UTF-8编码的,单词后缀根据不同的时态而改变的那些语言。感兴趣的朋友可以自己研究学习一下。

1. 介绍

这是一个用PHP写的aiml解析器,目前在PHP5.4环境上能正常运行。

2. 数据库配置

本程序用了MySQL数据库,你需要把chatbot.sql 文件倒入到你的数据库,然后在chatbot/Config.php文件里修改相关数据库配置变量.

4. aiml语料库资源

你可以直接编辑 aiml/chatbot.aiml 文件或者创建一个新的aiml文件然后在aiml/chatbot.aiml文件用include标签引入它。

5. 关于aiml文件

  • aiml 必须要放在 aiml 目录内.
  • chatbot.aiml 是入口文件 ,它里面的 aiml 标签可以包含多个 category 标签 , 一个 default标签和多个 include标签。
  • 被你添加的其它 aiml 文件在根aiml标签里必须要包含一个 topic 标签 , 这个topic标签可以包含多个 category标签和一个default标签 (这里的其他aiml文件不能写include标签,include标签只能出现在chatbot.aiml文件里)。

6. 测试聊天机器人

你可以打开index.php进行和机器人聊天做测试。

7. 调用聊天机器人

如果希望在自己的应用里面调用聊天机器人我们可以这样调用它的api api.php?requestType=talk&input=你好

8. 关于匹配规则

修改之后的匹配规则 :

* ---> (\S+)
# ---> \S+
_ ---> .*
= ---> \S*

9. 关于AIML标签

本聊天机器人的aiml标签和标准aiml标签有所不同,我根据需求对标签做了一些个性化,我们可以在AIML.MD文件里面查到更多本聊天机器人所支持的标签。

10. 关于api.php的返回数据

{
    "status": "success",
    "type": "talk",
    "message": "haha ...",
    "data": {
        "arr1": {
            "name11": "value11",
            "name12": "value12"
        },
        "arr2": {
            "name21": "value21",
            "name22": "value22"
        }
    }
}

当你访问 api.php?requestType=talk&userInput=haha 的时候能得到以上json数据 .

<category>
    <pattern>haha</pattern>
    <template>
        <data name="arr1">
            <attr name="name11">value11</attr>
            <attr name="name12">value12</attr>
        </data>
        <data name="arr2">
            <attr name="name21">value21</attr>
            <attr name="name22">value22</attr>
        </data>
        haha ...
    </template>
</category>

11. 关于userId

当你给api.phpGET方式发送请求的时候带了userId参数, 这个参数会当作用户的唯一标识。若你没给这个参数,程序会用用户的ip当作唯一标示。

$userId = isset($_REQUEST['userId']) ? $_REQUEST['userId'] : $_SERVER['REMOTE_ADDR'];

12. 关于多个chatbot

如果你把’chatbot/Config.php’文件里面的multiChatbot设置成false,所有的用户会分享一个defaultchatbot。当你设置成true的时候每个用户都会拥有独立的chatbot,这些chatbot会吧userId作为唯一标示,每个用户给自己的chatbot设置相关名字,性别,年龄之类的属性。当你在写一个语音助手之类的时候多个chatbot功能会特别好用,因为用户可以给自己的语音助手设置名字了。

$user = $this->getUser($this->_unique);
if ($this->_config->multiChatbot){
    $bot = $this->getBot($this->_unique);
} else {
    $bot = $this->getBot("default");
}

13. 关于userInfo和botInfo

userInfo和botInfo是指用户和聊天机器人的一些属性,例如姓名,年龄,性别等等。用户可以改变这些属性,当然这是我们当写aiml语料库的时候通过一些标签来实现的,我们可以从AIML.MD 学习set, get, del, user, bot等有关标签。

<category>
    <pattern>my name is *</pattern>
    <template>
        ok , your name is
        <star/>
        <set type="user" name="name">
            <star/>
        </set>
    </template>
</category>

<category>
    <pattern>what is my name</pattern>
    <template>
        oh , your name is
        <get type="user" name="name"/>
        , i remembered it last time ...
    </template>
</category>

14. 关于数据库

log 存储日志的表 .

property 是存储userbot的有关属性的表 , 相当于我们聊天机器人的脑袋,帮我们记住一些属性。 set ,get, del, user, bot 等标签是用来操作这个表的 .

data 表用来存储用户的输入,机器人的回复,input, that, topic 等标签会操作Parser::$_data数组,每次程序开始运行的时候程序会从这个表加载数据到这个数组里,然后程序要结束的时候再会存储到这个表里面。表的唯一标示还是userId


Enjoy it

https://github.com/kompasim/chatbot

yii2常用功能大全

1.模板url生成

<?php
use yii\helpers\Html;
<a href="<?=Yii::$app->urlManager->createUrl(['home/language','lang'=>'CN'])?>" class="language-cn"></a>

URL 管理器是一个名叫 urlManager 的内置应用组件。在 WEB 应用和控制台应用中以通过以下两种方式创建 URL:

  1. \Yii::$app->urlManager->createUrl($params)
  2. \Yii::$app->urlManager->createAbsoluteUrl($params, $schema = null)

createUrl 方法生成根目录的相对路径,例如:/index.php?r=article/view

createAbsoluteUrl() 方法生成的是绝对路径,例如:http://www.example.com/index.php?r=article/view

常见的利用 URL 管理器创建 URL 的例子:

// URL:/index.php?r=article/view
\Yii::$app->urlManager->createUrl('article/view');
// URL:/index.php?r=article/view&id=2
\Yii::$app->urlManager->createUrl(['article/view','id'=>2]);
echo \Yii::$app->urlManager->createAbsoluteUrl('kernel/article/view');

git 在切换分支时候不想提交文件,怎么办? git的文件储存功能

git 的储存功能。

原文:http://www.liaoxuefeng.com/

件开发中,bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。

当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交:

$ git status
# On branch dev
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   hello.py
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   readme.txt
#

并不是你不想提交,而是工作只进行到一半,还没法提交,预计完成还需1天时间。但是,必须在两个小时内修复该bug,怎么办?

幸好,Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:

$ git stash
Saved working directory and index state WIP on dev: 6224937 add merge
HEAD is now at 6224937 add merge

现在,用git status查看工作区,就是干净的(除非有没有被Git管理的文件),因此可以放心地创建分支来修复bug。

首先确定要在哪个分支上修复bug,假定需要在master分支上修复,就从master创建临时分支:

$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 6 commits.
$ git checkout -b issue-101
Switched to a new branch 'issue-101'

现在修复bug,需要把“Git is free software …”改为“Git is a free software …”,然后提交:

$ git add readme.txt 
$ git commit -m "fix bug 101"
[issue-101 cc17032] fix bug 101
 1 file changed, 1 insertion(+), 1 deletion(-)

修复完成后,切换到master分支,并完成合并,最后删除issue-101分支:

$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 2 commits.
$ git merge --no-ff -m "merged bug fix 101" issue-101
Merge made by the 'recursive' strategy.
 readme.txt |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
$ git branch -d issue-101
Deleted branch issue-101 (was cc17032).

太棒了,原计划两个小时的bug修复只花了5分钟!现在,是时候接着回到dev分支干活了!

$ git checkout dev
Switched to branch 'dev'
$ git status
# On branch dev
nothing to commit (working directory clean)

工作区是干净的,刚才的工作现场存到哪去了?用git stash list命令看看:

$ git stash list
stash@{0}: WIP on dev: 6224937 add merge

工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:

一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;

另一种方式是用git stash pop,恢复的同时把stash内容也删了:

$ git stash pop
# On branch dev
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   hello.py
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   readme.txt
#
Dropped refs/stash@{0} (f624f8e5f082f2df2bed8a4e09c12fd2943bdd40)

再用git stash list查看,就看不到任何stash内容了:

$ git stash list

你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:

$ git stash apply stash@{0}小结

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;

当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

h5ai 目录列表程序完整安装使用教程 web 文件管理

H5ai是一款功能强大 php 文件目录列表程序,由德国开发者 Lars Jung 主导开发,它提供多种文件目录列表呈现方式,支持多种主流 Web 服务器,例如 Nginx、Apache、Cherokee、Lighttpd 等,支持多国语言,可以使用本程序在线预览文本、图片、音频、视频等。

请注意,默认情况下,放到目录下的 .php 文件将会被直接执行,并不以文本显示。

安装

1.1 首先需要搭建好 Web 服务器,例如 LNMP(Linux/Nginx/MySQL/Php)组合,本文直接以 LNMP 组合为例。

推荐使用 PHP 7 版本。

1.2 下载 h5ai 安装包

转至官网下载:https://larsjung.de/h5ai/

1.3 设置好虚拟主机后,编辑虚拟主机配置文件:

vim /usr/local/nginx/conf/vhost/your_domain.conf

1.3.1 将 root 一行,改为:

index index.html index.php /_h5ai/public/index.php;

1.4 去除被禁用的 PHP 函数:

vim /usr/local/php/etc/php.ini
搜索 scandirexecpassthru,将其从被禁用的函数中删除。

1.5 重启 web 服务器:

service php-fpm restart
service nginx reload

1.6 虚拟主机 ROOT 目录大概是这个样子的,要在网站上显示的目录和 _h5ai 文件夹放在一起:

.
├── _h5ai
│   ├── CHANGELOG.md
│   ├── private
│   ├── public
│   └── README.md
├── 您要显示的文件夹
│   ├── 子文件夹1
│   ├── 文件1
│   └── 文件2
└── 您要显示的文件夹
├── 文件1
└── 文件2

开启 h5ai 更多功能

到目前为止,h5ai 可以正常使用了,但是我们可以开启 _h5ai 全部功能。通过 http(s)://your_domain/_h5ai/public/index.php 可以查看 _h5ai 的全部功能开启情况,默认密码是空的。

2.1 安装 FFmpeg

debian 8:

2.1.1 编辑软件源文件:
vim /etc/apt/sources.list

2.1.2 添加四个软件源

    1. deb http://www.deb-multimedia.org jessie main non-free
    2. deb ftp://ftp.deb-multimedia.org jessie main non-free
    3. deb http://www.deb-multimedia.org stable main non-free
    4. deb ftp://ftp.deb-multimedia.org stable main non-free

2.1.3 更新软件源

    1. aptget y update

2.1.4 安装 ffmpeg
apt-get -y install ffmpeg

Ubuntu 16.04+:

2.1.1 直接通过命令安装:

apt-get -y install ffmpeg

CentOS:

2.1.1 安装 FFmpeg 或 libav。

FFmpeg:

注意:请转至 http://www.ffmpeg.org/releases/ 查看最新的 FFmpeg 版本。

编译安装。

    1. wget http://www.ffmpeg.org/releases/ffmpeg-*.*.tar.gz
    2. tar zxvf ffmpeg-*.*.tar.gz
    3. cd ffmpeg-*.*
    4. ./configure
    5. make
    6. make install

libav:

http://libav.org/download/

下载源码编译即可。

2.2 略缩图功能

2.2.1 图片:
将 _h5ai 中,private 与 public 文件夹中的 cache 目录设置权限为 755。
2.2.2 EXIF:
通过 phpize 安装 PHP 的 exif 模块即可。
2.2.3 视频略缩图:
参考 2.1 安装 FFmpeg 即可。
2.2.3 PDF 略缩图:
安装 ImageMagick。

可使用如下命令:

Ubuntu/Debian:
apt-get install ImageMagick -y
CentOS:
yum install ImageMagick -y

2.3 Shell tar、Shell zip和Shell du

参考 1.4 去除在 php.ini 中被禁用函数 exec与 passthru 即可。

另外去除禁用的 scandir 函数(如果有),不然会导致无法显示目录。

2.4 options.json 中的更多功能

位于 _h5ai/private/conf 目录下。

打包下载:
搜索 “download”
127 行,enabled 由 false 改为 true。

文件信息及二维码:
搜索 “info”
185 行,enabled 由 false 改为 true。

默认简体中文:
搜索 “l10n”
202 行,enabled 由 false 改为 true。

文件及文件夹多选:
搜索 “select”
323 行,enabled 由 false 改为 true。

默认密码:

首先生成自定义 sha512 密码:http://md5hashing.net/hashing/sha512
然后搜索 “passhash”,大概第 10 行,将其密码改成自己生成的。

上一张完整开启所有功能的截图:

2.6 在目录头部或尾部显示 HTML 内容

在需要显示自定义 HTML 的目录下,添加 _h5ai.headers.html 或 _h5ai.footers.html。这个通常用于对该目录的一些说明。支持 HTML 标签。

_h5ai.headers.html 头部 HTML
_h5ai.headers.html 尾部 HTML