MySQL 主从复制的原理

发布于:2018-5-8 16:21 作者:song100e 浏览:23 分类:MySQL

主从复制的原理:

分为同步复制和异步复制,实际复制架构中大部分为异步复制。

复制的基本过程如下:
1)
Slave上面的IO进程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;

2)
Master接收到来自SlaveIO进程的请求后,通过负责复制的IO进程根据请求信息读取制定日志指定位置之后的日志信息,返回给Slave IO进程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log文件的名称以及bin-log的位置;

3)
SlaveIO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的 bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我

4)
SlaveSql进程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行的内容,并在自身执行。

阅读全文>>

0

PHP并发下的文件读写

发布于:2018-5-8 11:20 作者:song100e 浏览:24 分类:PHP
flock — 轻便的咨询文件锁定。
bool flock ( resource $handle , int $operation [, int &$wouldblock ] )
operation 可以是以下值之一:
   LOCK_SH取得共享锁定(读取的程序)。
    LOCK_EX 取得独占锁定(写入的程序。

    LOCK_UN 释放锁定(无论共享或独占)。


<?php
$fp = fopen("/tmp/lock.txt", "r+");

if (flock($fp, LOCK_EX)) {  // 进行排它型锁定
    ftruncate($fp, 0);      // truncate file
    fwrite($fp, "Write something here\n");
    fflush($fp);            // flush output before releasing the lock
    flock($fp, LOCK_UN);    // 释放锁定
} else {
    echo "Couldn't get the lock!";
}

fclose($fp);
?>

标签: flock

0

Apache 的多域名Vhost举例

发布于:2018-5-4 14:14 作者:song100e 浏览:20 分类:PHP

# Virtual hosts

Include conf/extra/httpd-vhosts.conf

<VirtualHost *:80>

    ServerAdmin webmaster@haoqingsong.org
    DocumentRoot "E:/tools/eclipse-php/workspace_branch"
    ServerName blog.haoqingsong.org
    ErrorLog "logs/haoqingsong.org-error.log"
    CustomLog "logs/haoqingsong.org-access.log" common
<Directory "E:/tools/eclipse-php/workspace_branch">
Options Indexes FollowSymLinks
AllowOverride all 
Require all granted
Allow from all
</Directory>
</VirtualHost>

阅读全文>>

标签: Vhost

0

PHP 通用 API 接口数字签名算法

发布于:2018-5-3 16:41 作者:song100e 浏览:25 分类:PHP
function getSignature($params, $secret='GoCkn^*poqLyhp5h'){
        $str = '';  //待签名字符串
        //先将参数以其参数名的字典序升序进行排序
        ksort($params);
        //遍历排序后的参数数组中的每一个key/value对
        foreach ($params as $k => $v) {
            //为key/value对生成一个key=value格式的字符串,并拼接到待签名字符串后面
            $str .= "$k=$v";
        }
        //将签名密钥拼接到签名字符串最后面
        $str .= $secret;
        //通过md5算法为签名字符串生成一个md5签名,该签名就是我们要追加的sign参数值
        return md5($str);
}

标签: sign

0

Celery进程定时监测

发布于:2018-4-28 9:54 作者:song100e 浏览:28 分类:Linux
#!/bin/sh

#Set param
if [ -n "$1" ];then
opt=$1
else
echo "opt is required, start or stop.";
exit;
fi

PYTHON_PATH="/usr/local/python2/bin/python"
ROOT_PATH="/data/www/vhosts/object_name/src"
CELERY_SCRIPT="/usr/bin/celery -A tasks worker --loglevel=debug --logfile=/data/www/logs/object_name/celery.log"

if [ $opt == "start" ];then
	echo "#######################"
	echo `date +%Y-%m-%d%%%H%M%S`
	programpath="${PYTHON_PATH} ${CELERY_SCRIPT}"
	n=`ps -ef |grep "${programpath}" |grep -v grep | awk '{print $2}' | wc -l`

	sleep 2
	if [ "$n" -le 0 ];then
			echo "run celery:${n}"
			cd $ROOT_PATH && $PYTHON_PATH $CELERY_SCRIPT &
	else
			echo "Celery exist:${n}"
	fi

	sleep 1
fi

if [ $opt == "stop" ];then
for line in `ps -ef | grep "${PYTHON_PATH} ${CELERY_SCRIPT}" |grep -v grep | awk '{print $2}'`
do
    kill $line
done
fi

标签: Celery

0

MySQL 用户添加与授权

发布于:2018-4-17 10:57 作者:song100e 浏览:127 分类:MySQL
一,添加用户
命令: CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 
说明: username - 你将创建的用户名, host - 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, 如果想让该用户可以从任意远程主机登陆,可以使用通配符%. password - 该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器. 
例子:CREATE USER 'qingsong'@'%' IDENTIFIED BY '123456'; 

二,授权
命令: GRANT privileges ON databasename.tablename TO 'username'@'host' 
说明: privileges - 用户的操作权限,如SELECT , INSERT , UPDATE 等(详细列表见该文最后面).如果要授予所的权限则使用ALL.;databasename - 数据库名,tablename-表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*表示, 如*.*. 
例子: 
1,GRANT SELECT, INSERT ON test.user TO 'qingsong'@'%'; 
2,GRANT ALL ON *.* TO 'qingsong'@'%'; 

注意:用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令: 
GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION; 

三.设置与更改用户密码 
命令: SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');
  如果是当前登陆用户用SET PASSWORD = PASSWORD("newpassword"); 
例子: SET PASSWORD FOR 'qingsong'@'%' = PASSWORD("123456"); 

四.撤销用户权限 
命令: REVOKE privilege ON databasename.tablename FROM 'username'@'host'; 
例子: REVOKE SELECT ON *.* FROM 'qingsong'@'%'; 

五.删除用户 
命令: DROP USER 'username'@'host'; 

0

NoSQL类型介绍及适用场景

发布于:2018-4-8 15:44 作者:song100e 浏览:96 分类:NoSQL

NoSQL纪元

当下已经存在很多的NoSQL数据库,比如MongoDB、Redis、Riak、HBase、Cassandra等等。每一个都拥有以下几个特性中的一个:

  • 不再使用SQL语言,比如MongoDB、Cassandra就有自己的查询语言
  • 通常是开源项目
  • 为集群运行而生
  • 弱结构化——不会严格的限制数据结构类型

NoSQL数据库的类型

NoSQL可以大体上分为4个种类:Key-value、Document-Oriented、Column-Family Databases以及 Graph-Oriented Databases。

阅读全文>>

标签: NoSQL

0

使用 Yii2 的 Cli 模式添加定时任务

发布于:2018-3-31 16:41 作者:song100e 浏览:72 分类:YII2
最近街道一项任务,定时获取主机列表并同步到系统中,于是考虑使用crontab定时执行php脚本,顺便也把 crontab 复习一下。

根据官方手册,cli的入口脚本在根目录下

阅读全文>>

标签: crontab

0

常见web安全及其对策

发布于:2018-3-27 16:25 作者:song100e 浏览:71 分类:WEB
注入攻击(执行恶意SQL):
1,避免被攻击者猜测到表名等数据库结构信息。
2,消毒(匹配关键字如 drop、delete、set等)。
3,绑定参数(如 PDO 的 prepare 模式等)。

XSS (跨站点脚本攻击):
1,消毒(转义HTML中的危险字符如:<>)
2,设置 HttpOnly 属性防窃取 Cookie。

CSRF (跨站点请求伪造):以合法用户身份进行非法操作
1,表单随机数 Token
2,验证码
3,Referer check

阅读全文>>

0

【转载】为什么说 MVC 不是设计模式

发布于:2018-3-10 14:47 作者:song100e 浏览:113 分类:设计模式

0

1 2 3 4 5 6 ... »