jQuery跨域访问方式提示XMLHttpRequest cannot load

$(function($){
 var url = 'http://www.netpc.com.cn/weather/index';
 $.ajax(url, {
 data: {
 'cityname': '北京',
 'dtype': 'jsonp',
 'key': 'xxxx',
 '_': new Date().getTime()
 },
 dataType: 'jsonp',
 crossDomain: true,
 success: function(data) {
 if(data && data.resultcode == '200'){
 console.log(data.result.today);
 }
 }
 });

var url2 = 'http://www.netpc.com.cn/weather/index?callback=?';
 $.getJSON(url2, {
 'cityname': '上海',
 'dtype': 'jsonp',
 'key': 'xxxx',
 '_': new Date().getTime()
 }, function(data){
 if(data && data.resultcode == '200'){
 console.log(data.result.today);
 }
 });

var url3 = 'http://www.netpc.com.cn/weather/index?callback=?';
 $.get(url3, {
 'cityname': '香港',
 'dtype': 'jsonp',
 'key': 'xxxx',
 '_': new Date().getTime()
 }, function(data){
 if(data && data.resultcode == '200'){
 console.log(data.result.today);
 }
 }, 'json');
 });
发表在 开源代码 | 标签为 | 留下评论

mysql更新提示1366 Incorrect string value

晚上以为很简单的update,mysql结果竟然出现了字符编码问题。

执行update `table` set a=’中文I’ where a=1001;的时候出现了1366 Incorrect string value  ‘\x的错误提示。字符编码都一致,可是这样怎么这样呢?

最后使用替换的方式竟然就没错了,UPDATE table SET a=REPLACE(a, ‘1001’, ‘中文I’);

见鬼!谁给解释下?

发表在 数据库 | 标签为 | 留下评论

Mycat双主异常后自动切换

mycat通过dataHost标签的writeType和switchType来定义故障切换方式。
writeType=0,表示所有写都发送到配置的第一个writeHost上,第一个挂了切换到第二个writeHost上,重启后以切换后的为准,切换记录在conf/dnindex.properties
writeType=1,表示所有写都随机发送到配置的writeHost上,mycat1.5以上已废弃不推荐。
switchType=-1,表示不自动切换
switchType=1,默认值,表示自动切换
switchType=2,基于MySQL主从同步的状态决定是否切换,心跳语句为show slave status。
switchType=3,基于galaru cluster的切换机制(合适集群),mycat1.4以上支持,心跳语句为show status like ‘wsrep%’。

server.xml配置如下

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
  writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="5">
  <heartbeat>show slave status</heartbeat>
  <!-- can have multi write hosts -->
  <writeHost host="hostM1" url="localhost:3306" user="root" password="root">
    <!-- can have multi read hosts -->
    <readHost host="hostS1" url="localhost:3307" user="root" password="root" />
  </writeHost>
  <writeHost host="hostM2" url="localhost:3308" user="root" password="root"></writeHost>
 </dataHost>

stop第一台写入数据库hostM1后,根据switchType=1会自动切换到hostM2上,当hostM1重启恢复之后,mycat并没有切换回第一个hostM1写入节点,而是需要重新配置主从状态。或者你把hostM2再关闭下,它就会自动切换回hostM1了。根据实际情况使用切换属性。

发表在 服务器 | 标签为 , | 留下评论

MyCAT的读写分离机制和配置

高可用性以及读写分离
MyCAT的读写分离机制如下:
• 事务内的SQL,全部走写节点,除非某个select语句以注释/*balance*/开头
• 自动提交的select语句会走读节点,并在所有可用读节点中间随机负载均衡
• 当某个主节点宕机,则其全部读节点都不再被使用,因为此时,同步失败,数据已经不是最新的,MYCAT会采用另外一个主节点所对应的全部读节点来实现select负载均衡。
• 当所有主节点都失败,则为了系统高可用性,自动提交的所有select语句仍将提交到全部存活的读节点上执行,此时系统的很多页面还是能出来数据,只是用户修改或提交会失败。

dataHost的balance属性设置为:
• 0,不开启读写分离机制
• 1,全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。
• 2,所有的readHost与writeHost都参与select语句的负载均衡,也就是说,当系统的写操作压力不大的情况下,所有主机都可以承担负载均衡。
一个dataHost元素,表明进行了数据同步的一组数据库,DBA需要保证这一组数据库服务器是进行了数据同步复制的。writeHost相当于Master DB Server,而旗下的readHost则是与从数据库同步的Slave DB Server。当dataHost配置了多个writeHost的时候,任何一个writeHost宕机,Mycat 都会自动检测出来,并尝试切换到下一个可用的writeHost。

MyCAT支持高可用性的企业级特性,根据您的应用特性,可以配置如下几种策略:
• 后端数据库配置为一主多从,并开启读写分离机制。
• 后端数据库配置为双主双从(多从),并开启读写分离机制
• 后端数据库配置为多主多从,并开启读写分离机制
后面两种配置,具有更高的系统可用性,当其中一个写节点(主节点)失败后,Mycat会侦测出来(心跳机制)并自动切换到下一个写节点,MyCAT在任何时候,只会往一个写节点写数据。

基本配置:

server.xml 虚拟库的账号和密码

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://org.opencloudb/">
 <system>
 <property name="defaultSqlParser">druidparser</property>
 </system>
 <user name="my">
 <property name="password">my</property>
 <property name="schemas">testdb</property>
 </user>
</mycat:server>

schema.xml  主要配置主从库的数据库连接地址信息

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/" >
<!-- schema 中可以有多个table节点,列几个在Navicat中就能看到几个,库里有这里没有的话客户端中也看不到 -->
 <schema name="testdb" checkSQLschema="false" sqlMaxLimit="100">
 <table name="my" primaryKey="ID" type="global" dataNode="dn1" />
 </schema>
<!-- 数据节点 -->
 <dataNode name="dn1" dataHost="localhost1" database="test" />
<!-- 节点主机信息 -->
 <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
 writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
 <heartbeat>select user()</heartbeat>
<!-- 指定写入数据的主机 -->
 <writeHost host="hostM1" url="192.168.93.132:3306" user="root" password="root">
 <!-- 指定读取数据的主机,可以有多个 -->
 <readHost host="hostS1" url="192.168.93.130:3306" user="root" password="root" />
 </writeHost>
 </dataHost>
</mycat:schema>

 

发表在 数据库 | 标签为 , | 留下评论

phalcon费尔康框架视图和跳转

视图跳转

$this->view->pick(‘index/pick’);选择视图:

关闭视图

$this->view->disable();

在模板中包含局部模板

<?php
$this->partial('shared/login',array(
'var1'=>'val1',
'var2'=>'val2'
));
?>

跳转方式:

//设置一个内部跳转
$this->response->redirect('posts/index');
// 外部跳转url
$this->response->redirect('http://www.netpc.com.cn/',true);
// 设置跳转 http状态
$this->resopnse->redirect('http://www.netpc.com.cn/',true,301);
发表在 开源代码 | 标签为 | 留下评论

yii2数据库配置一主多从和多主多从

yii2配置文件如下:

[
 'class' => 'yii\db\Connection',

 // common configuration for masters
 'masterConfig' => [
 'username' => 'master',
 'password' => '',
 'attributes' => [
 // use a smaller connection timeout
 PDO::ATTR_TIMEOUT => 10,
 ],
 ],

 // list of master configurations
 'masters' => [
 ['dsn' => 'dsn for master server 1'],
 ['dsn' => 'dsn for master server 2'],
 ],

 // common configuration for slaves
 'slaveConfig' => [
 'username' => 'slave',
 'password' => '',
 'attributes' => [
 // use a smaller connection timeout
 PDO::ATTR_TIMEOUT => 10,
 ],
 ],

 // list of slave configurations
 'slaves' => [
 ['dsn' => 'dsn for slave server 1'],
 ['dsn' => 'dsn for slave server 2'],
 ['dsn' => 'dsn for slave server 3'],
 ['dsn' => 'dsn for slave server 4'],
 ],
]

protected function openFromPool(array $pool, array $sharedConfig)
{
if (empty($pool)) {
return null;
}

if (!isset($sharedConfig[‘class’])) {
$sharedConfig[‘class’] = get_class($this);
}

$cache = is_string($this->serverStatusCache) ? Yii::$app->get($this->serverStatusCache, false) : $this->serverStatusCache;

shuffle($pool);//源码这里随机读取配置

foreach ($pool as $config) {
$config = array_merge($sharedConfig, $config);
if (empty($config[‘dsn’])) {
throw new InvalidConfigException(‘The “dsn” option must be specified.’);
}

$key = [__METHOD__, $config[‘dsn’]];
if ($cache instanceof Cache && $cache->get($key)) {
// should not try this dead server now
continue;
}

/* @var $db Connection */
$db = Yii::createObject($config);

try {
$db->open();
return $db;
} catch (\Exception $e) {
Yii::warning(“Connection ({$config[‘dsn’]}) failed: ” . $e->getMessage(), __METHOD__);
if ($cache instanceof Cache) {
// mark this server as dead and only retry it after the specified interval
$cache->set($key, 1, $this->serverRetryInterval);
}
}
}

return null;
}

发表在 开源代码 | 标签为 | 留下评论

innodb错删除表文件后重建提示1050 Table already exists

mysql下误删除innodb数据表的.ibd .frm两个文件后,就无法查看到该表和重新创建同名的新表了。提示1050 – Table ‘xxx’ already exists,关闭mysql服务,找备份的2个文件放上去后,重启后尝试用DROP TABLE 表名;删除,再到目录下查看是否还有表名文件删除,再重启服务,创建表。要不就要尝试导出库,重新建库再导入。无非数据存在ibdata1,而表结构又是另外文件导致的,这点MyISAM方便,怎么复制怎么行。

发表在 数据库 | 标签为 | 留下评论

linux删除文件提示-bash: /bin/rm: Argument list too long

这是linux下文件夹下的文件太多导致的,以下随便执行一个就可以了,我用find挺快的

find . -name “test*” | xargs rm -rf “test*”

模糊查找匹配后删除

ls | xargs -n 10 rm -rf

命令解释为:输出所有的文件名(用空格分割) xargs就是将ls的输出,每10个为一组(以空格为分隔符),作为rm -rf的参数也就是说将所有文件名10个为一组,由rm -rf删除

 

发表在 软件 | 标签为 | 留下评论

vsftpd 530 login incorrect.

除了网上说的pam_service_name=vsftpd 验证方式文件里面的问题外

配置文件也有可能导致
以下userlist_deny和userlist_file不使用的时候都必须注释掉 哪怕user_list文件里面为空也不行,不然也会导致530错误

userlist_enable=YES
#userlist_deny=NO
#userlist_file=/etc/vsftpd/user_list

发表在 软件 | 标签为 | 留下评论

Phalcon模板渲染级别和各级别模板调用

Phalcon 有多种渲染级别,他们的嵌套关系,简单来说就是这张图:

2356393933-56a6050b33630_articlex

我们必须在外层视图文件中调用 <?php echo $this->getContent(); ?>的方法,使他们能够嵌套起来。如果是 volt 引擎的话,可以使用 {{ content() }},它经过 volt 编译后和前面的方法是一样的。

我们可以通过$this->view->setRenderLevel(View::LEVEL_MAIN_LAYOUT);的方法选择渲染级别。

类常量 解释 顺 序
LEVEL_NO_RENDER 表明要避免产生任何形式的显示
LEVEL_ACTION_VIEW 生成显示到视图关联的动作 1
LEVEL_BEFORE_TEMPLATE 生成显示到控制器模板布局之前 2
LEVEL_LAYOUT 生成显示到控制器布局 3
LEVEL_AFTER_TEMPLATE 生成显示到控制器模板布局后 4
LEVEL_MAIN_LAYOUT 生成显示到主布局 5

我们可以在 controller 的 initialize() 方法中,使用下面的方法来指定 Level_After_Template 和 Level_Before_Template 对应的文件。

$this->view->setTemplateBefore('before');
$this->view->setTemplateAfter('after');

也可以在某方法中使用 $this->view->disableLevel(View::LEVEL_AFTER_TEMPLATE);禁用对应的模板调用。

以渲染 testController helloAction 为例,它们的目录结构应该是这样

2866290072-56a6084b9147b_articlex

其中,views 根目录下的 index.phtml 是主布局文件。

layouts 文件夹下的三个文件分别对应,Level_After_Template、Level_Before_Template、Level_Layout。

test 文件夹是对应 testController 下每一个 action 的视图,hello 就是 testController 下 helloAction 对应的视图。

Level_Main_Layout 默认是 index.phtml 或 index.volt,后缀取决去你的模板渲染引擎,而且这个文件必须是视图文件夹的根目录下。我们可以可以通过 setMainView('test/index') 的方法指定为 views 根目录下的其他文件。

下面是有关的部分源码。

protected _mainView = "index";

/**
 * Sets default view name. 
 * Must be a file without extension in the views directory
 *
 * <code>
 *     //Renders as main view views-dir/base.phtml
 *     $this->view->setMainView('base');
 * </code>
 */
public function setMainView(string viewPath) -> <View>
{
    let this->_mainView = viewPath;
    return this;
}

/**
 * Returns the name of the main view
 */
public function getMainView() -> string
{
    return this->_mainView;
}
发表在 开源代码 | 标签为 | 留下评论