$(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'); });
jQuery跨域访问方式提示XMLHttpRequest cannot load
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 有多种渲染级别,他们的嵌套关系,简单来说就是这张图:
我们必须在外层视图文件中调用 <?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 为例,它们的目录结构应该是这样
其中,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;
}