近两年没用mysql了,最新需要为新项目配一套全新的开发环境。
使用了最新的mysql5.6。根目录带的是一个my-default.ini文件。复制出一份my.ini。添加以下配置

[mysqld]
basedir=D:/MYSQL
datadir=D:/MYSQL/data
default-character-set=utf8

然后安装服务

mysqld --install mysql --defaults-file=d:\mysql\my.ini

再启动服务的时候报1067错误:

A system error has occurred.
System error 1067 has occurred.
The process terminated unexpectedly.

这个错误一般是配置文件错误,仔细检查了编。仍没发现错误所在,上网搜索,大部分指出是basedir与datadir的配置问题,经过多次尝试还是没有解决。

最后再data目录下的xxx.err文件里发现了问题…

2013-03-12 11:14:42 8040 [ERROR] D:\mysql\bin\mysqld: unknown variable 'default-character-set=utf8'

找了下官方文档,发现原来5.5之后的版本配置属性有所改变。

default-character-set   -->   character_set_server

变量名修改之后重新注册服务,启动…… OK!

正确配置:

[mysqld]
basedir=D:/MYSQL
datadir=D:/MYSQL/data
character_set_server = utf8
[client]
default-character-set=utf8
PS:[client]里的属性名没有改变

由此可见… 不要遇上什么问题就立马上网找,一是网上的信息比较老且重复内容太多。还是先自己仔细检查的比较好 。 阿弥陀佛

对Wordpress做一次迁移,
现有服务器A ,B 两台,zhourongyu.me运行在A上,现在需要转移到B之上。
流程如下:
一,首先导出A之上的mysql数据。进入phpmyadmin里选导出即可,需要通过ftp传到B之上。
另一种方法使用命令

mysqldump -u root -p wpblog > zdata.sql

二,打包A之上的wp目录,可以选择通过ftp拷到本地,再打包上传到B。
另一种使用tar打包

tar -cvf zwp.tar zhourongyu.me

三,把sql文件tar目录文件转移到zhourongyu.me WEB目录之下
四,在B服务器上通过wget把两个文件下载过来

wget http://zhourongyu.me/zwp.tar http://zhourongyu.me/zdata.sql

五,进入B的mysql 创建同名数据库,并通过sql文件导入数据

>create database wpblog
>use wpblog
>source /home/zhourongyu/zdata.sql

这样数据库就成功导
六,解压tar文件到wwwroot目录

tar xvf zwp.tar zhourongyu.me

修改nginx配置文件修改对应路径。
如果想配置成A一样,同理可以把A上的nginx配置文件wget过来。

最后,修改域名A记录,指向新的IP。
至此基本已经完成了数据的迁移。

如果需要更换新域名则需要在之上的步骤里多做一些操作:
一,需要修改nginx配置文件替换域名
二,修改数据库中对应的URL,
最笨的办法是进入phpmyadmin中修改相应URL 主要是wp_options表级wp_posts表
可以直接修改sql文件替换文件中对应的URL全部换成新的域名。
还可以用sql替换命令来替换相应的路径
UPDATE 表名 SET 字段 = REPLACE(字段,’替换内容’,’替换值’);

示例(切换到新域名:http://ooxx.me)如下:

> UPDATE wp_options SET option_value = REPLACE(option_value,'zhourongyu.me','ooxx.me');

注意上面的标点要都要用英文半角。其中wp_options就是表名,option_value就是表wp_options里的一个字段,wp_options里有siteurl和home的值。

修改option_value里的站点url和主页地址:

> update wp_options set option_value = replace(option_value, 'http://zhourongyu.me','http://ooxx.me') where option_name='home' or option_name='siteurl'

更正文章中内部链接及附件的地址:

> UPDATE wp_posts SET post_content = replace(post_content, 'http://zhourongyu.me', 'http://ooxx.me');

更正wordpress文章默认的永久链接:

> UPDATE wp_posts SET guid = replace(guid, 'http://zhourongyu.me','http://ooxx.me');

最后进入B的wp后台修改wordpress地址为新域名

今天写一个页面的时候发现代码竟然原封不动的出现了,怀疑是Jinja的自动转义。结果发现Jinja2的Escaping是自动关闭的,下面是Jinja官方文档中描述的,默认自动转义是关闭的,可以手动转义或者开启自动转义。

HTML Escaping

When generating HTML from templates, there’s always a risk that a
variable will include characters that affect the resulting HTML. There
are two approaches: manually escaping each variable or automatically
escaping everything by default.

Jinja supports both, but what is used depends on the application
configuration. The default configuaration is no automatic escaping for
various reasons:

escaping everything except of safe values will also mean that Jinja is
escaping variables known to not include HTML such as numbers which is
a huge performance hit. The information about the safety of a variable
is very fragile. It could happen that by coercing safe and unsafe
values the return value is double escaped HTML.

转而搜索发现是Flask的原因,Flask的自动转义是默认开启的,如需要关闭需要以下操作(来自官方文档):

自动转义就是自动帮你将特殊的字符替换成转义符号。HTML(或者XML, XHTML)的特殊字符有 &, >, <, “, ‘ 。因为这些字符在文档中有它自己特殊的含义,所以如果你想在文章中使用这些符号,必须将它替换成转义符号。如果不这样做,不仅用户使用不了这些符号,还会导致安全问题。(更多 :ref:xss)

但是有时候你需要在模版中禁用自动转义。如果你想直接将HTML插入页面,比如将markdown语言转换成HTML,那么你就需要这样做了。

有3种方法可以关闭自动转义:

  • 在Python文件中进行转义。先在 :class:~flask.Markup 对象中进行转义,然后将它传送给模版。一般推荐使用这个方式。
  • 在模版文件中进行转义。通过 |safe 过滤器来表示字符串是安全的()
  • 暂时禁用全局的自动转义功能。

要想在模版中禁用全局自动转义功能,可以用 语句块:
{\% codeblock lang:python \%}
{\% autoescaping false \%}
autoescaping is disableed here
{\% endautoescape \%}
{\% endcodeblock \%}

在这么做的时候,要语句块中使用到的变量非常小心。

自动开始转义也是不错的,这方面的安全就可以少考虑了,关闭也很简单。我直接使用第二种方式,在需要禁止转义的部分加上safe标记,很方便。其他的两种目前还没用上~