一切福田,不離方寸,從心而覓,感無不通。

Category Archives: MySQL

详解Mysql安全配置

目录 1. 前言 2. Mysql账户权限安全 3. Mysql数据的网络安全配置 4. 密码策略安全 5. Mysql日志 6. Mysql数据库服务所在主机安全配置 7. 部署SQL注入检测、防御模块 8. mysqld安全相关启动选项 9. mysql备份策略 1. 前言 Mysql数据库安全配置、或者叫加固属于风险模型中的一环,它需要安全人员在理论和实践的学习中不断发现新的问题,并针对这些问题对数据的各个方面的配置进行强化。本文试图围绕着数据库风险识别、数据库安全加固这个问题,探讨可以采取的措施来最大程度的保证我们的数据库的安全控制处在一个较好的水平。 2. Mysql账户权限安全 mysql中存在4个控制权限的表,分别为 1. mysql.USER表 2. mysql.DB表 3. mysql.TABLES_PRIV表 4. mysql.COLUMNS_PRIV表 要注意的是,Mysql中有一个数据库"information_schema",似乎里面保存的也是一些权限信息,但是要明白的是,这个数据库"information_schema"是为系统管理员提供元数据的一个简便方式,它实际上是一个视图,可以理解为对Mysql中的一个信息的封装,对于Mysql主程序来说,身份认证和授权的信息的来源只有一个,就是"mysql"。 http://www.cnblogs.com/hzhida/archive/2012/08/08/2628826.html 0×1. mysql.USER表 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 select * from USER; desc USER; mysql> desc USER;+————————+———————————--+——+—--+———+——-+ | Field                  | Type                              | […]

龙生   31 Mar 2015
View Details

解决wordpress中文标签tag翻页404错误问题

前面有一篇文章已经介绍过中文标签打开404错误的解决方法《解决中文标签打不开404错误问题》,这个只能解决中文标签的问题,当同一个标签中文章较多的时候,就存在标签页面分页的问题了,发现如果仅按照上文的方法修改,标签页面分也无法正常打开,同样会有404错误的问题,下面提供几种方法解决标签tag页面中文分页404错误问题。

注意:别用windows自带的记事本修改(推荐UltraEdit,Dreamweaver,notepad++等)。


 

1、如果你已经修改过wp-includes目录中的classes.php,可以正常访问中文标签。

代码的140行左右,将

  1. $pathinfo = $_SERVER[‘PATH_INFO’];

替换为:

  1. $pathinfo = mb_convert_encoding($_SERVER[‘PATH_INFO’], “UTF-8″, “GBK”);

  1. $req_uri = $_SERVER[‘REQUEST_URI’];

替换为:

  1. $req_uri = mb_convert_encoding($_SERVER[‘REQUEST_URI’], “UTF-8″, “GBK”);

那么下面你只需要修改wp-includes目录中的link-template.php文件的(1425行左右)

  1. $result = $base . $request . $query_string;

替换为

  1. $result = $base . mb_convert_encoding($request, ‘UTF-8‘, ‘GBK’) . $query_string;

这种方式替换后的tag翻页里面含有中文,不符合url标准,不太利于搜索引擎收录,建议采用下面方法解决。


 

2、如果你什么都未修改,现在还无法访问中文标签tag。

可以通过安装插件iis-chinese-tag-permalink解决这个问题。

iis-chinese-tag-permalink下载地址:http://wordpress.org/extend/plugins/iis-chinese-tag-permalink/

这个插件函数很少只有几个替换函数而已,不会占用太多资源,如果你不想用插件,可以下载后把插件里面的几个函数拷贝到主题目录的functions.php中,本博就是采用这种方式。

 

from:http://www.52qingyin.cn/chinese-tag-page-problem.html

超详细mysql left join,right join,inner join用法分析

下面是例子分析 表A记录如下: aID        aNum 1           a20050111 2           a20050112 3           a20050113 4           a20050114 5           a20050115 表B记录如下: bID        bName 1            2006032401 2           2006032402 3           2006032403 4           2006032404 8           2006032408 创建这两个表SQL语句如下: CREATE TABLE  a aID int( 1 ) AUTO_INCREMENT PRIMARY KEY , aNum char( 20 ) ) CREATE TABLE b( bID int( 1 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , bName char( 20 ) ) INSERT INTO a VALUES ( 1, 'a20050111' ) , ( 2, 'a20050112' ) , ( 3, 'a20050113' ) , ( 4, 'a20050114' ) , ( 5, 'a20050115' ) ; INSERT INTO b VALUES ( 1, ' 2006032401' ) , ( 2, '2006032402' ) , ( 3, '2006032403' ) , ( 4, '2006032404' ) , ( 8, '2006032408' ) ; 实验如下: 1.left join(左联接) sql语句如下: SELECT * FROM a LEFT JOIN  b ON a.aID =b.bID 结果如下: aID        aNum                   bID           bName 1            a20050111         1               2006032401 2            a20050112         2              2006032402 3            a20050113         3              2006032403 4            a20050114         4              2006032404 5            a20050115         NULL       NULL (所影响的行数为 5 行) 结果说明: left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的. 换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID). B表记录不足的地方均为NULL. 2.right join(右联接) sql语句如下: SELECT  * FROM a RIGHT JOING b ON a.aID = b.bID 结果如下: aID        aNum                   bID           bName 1            a20050111         1               2006032401 2            a20050112         2              2006032402 3            a20050113         3              2006032403 4            a20050114         4              2006032404 NULL    NULL                   8              2006032408 (所影响的行数为 5 行) 结果说明: 仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充. 3.inner join(相等联接或内联接) sql语句如下: SELECT * FROM  a INNER JOIN  b ON a.aID =b.bID 等同于以下SQL句: SELECT * FROM a,b WHERE a.aID = b.bID 结果如下: aID        aNum                   bID           bName 1            a20050111         1               2006032401 2            a20050112         2              2006032402 3            a20050113         3              2006032403 4            a20050114         4              2006032404 结果说明: 很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录. LEFT JOIN操作用于在任何的 FROM 子句中, 组合来源表的记录。使用 LEFT JOIN 运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即 使在第二个(右边)表中并没有相符值的记录。 语法:FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2 说明:table1, table2参数用于指定要将记录组合的表的名称。 field1, field2参数指定被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的 名称。 compopr参数指定关系比较运算符:"=", "<", ">", "<=", ">=" 或 "<>"。 如果在INNER JOIN操作中要联接包含Memo 数据类型或 OLE Object 数据类型数据的字段,将会发生错误。   […]

龙生   27 Mar 2015
View Details

wordpress“您没有足够的权限访问该页面”

错误原因 WordPress程序可以通过设置不同的数据表前缀来实现一个数据库安装多个WordPress网站。 由于本地测试环境使用此方法同时安装了多个WordPress测试程序,在一次将网站数据库备份到本地并使用phpmyadmin修改完表前缀后出现“您没有足够的权限访问该页面”的错误提示。 出现这个错误是因为修改前缀不够彻底,某些数据表中字段的值也包含了之前的前缀。所以我们要一并将之前的前缀改为现用的前缀,问题即可得到解决。 解决方案  包含了前缀的数据表有两个:“前缀_options”和“前缀_usermeta”。本实例为:test_options和test_usermeta。  首先进入表test_options,使用phpmyadmin的搜索功能。搜索option_name字段,运算符选择:LINK%…%  值填入之前的前缀名:wp_ 得到如下结果:  将wp_user_roles修改为test_user_roles;并继续对表test_usermeta进行修改。同样使用phpmyadmin的搜索功能。搜索meta_key字段,运算符选择:REGEXP^…$  值填入之前的前缀名+.*:wp_.* 得到如下结果: 将所有以前前缀名:wp_开头(如:wp_capabilities,wp_user-settings,wp_user_level,wp_user-settings-time等)的字段全部改为现前缀名:test_(如:test_capabilities,test_user-settings,test_user_level,test_user-settings-time等) 至此问题解决完毕。 FROM:http://jingyan.baidu.com/article/e2284b2b3b5085e2e7118d47.html

龙生   19 Mar 2015
View Details

解决MySql Error Code: 2006 – MySQL 服务器已离线 错误

再用SQLYog进行10w用户数据sql导入的时候,出错,后查看日志找到错误代码为: MySQL 服务器已离线 后经过google发现时mysql设置的问题. 这个问题是因为MySql的默认max_allowed_packet过小所致,修改大一些即可 max_allowed_packet = 100M 另外,可以增加一下两个参数,来扩大相应时间 interactive_timeout=28800000 wait_timeout=28800000   from:http://blog.csdn.net/gumanren/article/details/8449794

龙生   19 Mar 2015
View Details

利用mysql的binlog恢复数据

MySQL Binary Log也就是常说的bin-log, ,是mysql执行改动产生的二进制日志文件,其主要作用有两个: * 数据回复 * 主从数据库。用于slave端执行增删改,保持与master同步。 1.开启binary log功能 需要修改mysql的配置文件,本篇的实验环境是win7,配置文件为mysql安装目录\MySQL Server 5.1下的my.ini,添加一句log_bin = mysql_bin即可 eg: [mysqld] …… log_bin = mysql_bin …… log_bin是生成的bin-log的文件名,后缀则是6位数字的编码,从000001开始,按照上面的配置,生成的文件则为: mysql_bin.000001 mysql_bin.000002 …… 配置保存以后重启mysql的服务器,用show variables like  '%bin%’查看bin-log是否开启,如图: 2.查看产生的binary log bin-log因为是二进制文件,不能通过记事本等编辑器直接打开查看,mysql提供两种方式查看方式,在介绍之前,我们先对数据库进行一下增删改的操作,否则log里边数据有点空。 create table bin( id int(10) primary key auto_increment,name varchar(255));(测试前我已经建表) insert into bin(name) values ('orange'); 1.在客户端中使用  show binlog events in 'mysql_bin.000001'  语句进行查看,为了排序美观,可以在结尾加\G使结果横变纵,此时结尾无需加;语句结束符。 eg: mysql> show binlog events in 'mysql_bin.000001’\G ……………省略…………… *************************** 3. row *************************** Log_name: mysql_bin.000001 Pos: 174 Event_type: Intvar Server_id: 1 End_log_pos: 202 Info: INSERT_ID=2 *************************** 4. row *************************** Log_name: mysql_bin.000001 Pos: 202 Event_type: Query […]

龙生   12 Nov 2014
View Details

binlog文件分析与mysqlbinlog工具的修改

问题 本文主要带着以下问题进行学习: 1、什么是binlog,有什么作用 2、binlog有哪些格式 3、分析一条典型binlog ,说明从binlog中可以得到哪些信息 4、如何修改mysqlbinlog,使得可以显示最后一条记录 这里主要考虑binlog的使用及相关格式,而不是关注binlog的写入时机。   一、简介 binlog又叫二进制日志文件,它会将mysql中所有修改数据库数据的Query以二进制的形式记录到日志文件中,如:create,insert,drop,update等;(对于select操作则不会被记录到binlog里,因为它并没有修改数据库的数据)。binlog一般存储在数据目录下,并且命名为:mysql-bin.***(这个可以在配置文件中修改my.cnf:log-bin=mysql-bin,就是文件名的前缀;mysqld在每个 binlog 名后面添加一个数字扩展名。每次启动服务器或刷新日志时增加文件的大小大于max_binlog_size,一个事务不会被拆分开)。 binlog主要是用于保证数据完整的,如主从备份,通过从binlog文件中读取操作来在salve机上进行同样的操作,保证主从备份,当然不可能每次都从开始的地方redo,所以每条记录都有一个时间截TIMESTAMP。   二、简单的使用binlog show binary logs;    #显示binlog文件 purge binary logsto 'mysql-bin.**'  #删除到**文件 bin/mysqlbinlog binlogfile    #解析binlog文件   利用binlog恢复数据: bin/mysqlbinlog  --start-datetime=’2011-7-7 18:0:0′--stop-datetime=’2011-7-7 20:07:13′ data/mysql-bin.000008 |mysql -u root   三、类型 binlog的格式有三种,这也反应了mysql的复制技术:基于SQL语句的复制(statement-based replication, SBR),基于行的复制(row-based replication, RBR),混合模式复制(mixed-based replication, MBR)。相应地,binlog的格式也有三种:STATEMENT,ROW,MIXED。 mysql>showvariables like 'binlog_format'    #查看binlog的格式   使用mysqlbinlog解析的binlog: MIXED(STATEMENT): # at 193(开始位置) #110708 10:03:06(时间截) server id(产生该事件的服务id) 1  end_log_pos(日志的结束位置) 280  Query(事件类型)  thread_id=10    exec_time=0     error_code=0 SETTIMESTAMP=1310090586/*!*/; insert into tvalues(17) /*!*/;   ROW模式: BEGIN /*!*/; # at 174 # at 214 #110708 10:49:22server id 1  end_log_pos 214   Table_map: […]

龙生   12 Nov 2014
View Details

Mysql Binlog三种格式介绍及分析

一.Mysql Binlog格式介绍       Mysql binlog日志有三种格式,分别为Statement,MiXED,以及ROW! 1.Statement:每一条会修改数据的sql都会记录在binlog中。 优点:不需要记录每一行的变化,减少了binlog日志量,节约了IO,提高性能。(相比row能节约多少性能与日志量,这个取决于应用的SQL情况,正常同一条记录修改或者插入row格式所产生的日志量还小于Statement产生的日志量,但是考虑到如果带条件的update操作,以及整表删除,alter表等操作,ROW格式会产生大量日志,因此在考虑是否使用ROW格式日志时应该跟据应用的实际情况,其所产生的日志量会增加多少,以及带来的IO性能问题。) 缺点:由于记录的只是执行语句,为了这些语句能在slave上正确运行,因此还必须记录每条语句在执行的时候的一些相关信息,以保证所有语句能在slave得到和在master端执行时候相同 的结果。另外mysql 的复制,像一些特定函数功能,slave可与master上要保持一致会有很多相关问题(如sleep()函数, last_insert_id(),以及user-defined functions(udf)会出现问题). 使用以下函数的语句也无法被复制: * LOAD_FILE() * UUID() * USER() * FOUND_ROWS() * SYSDATE() (除非启动时启用了 --sysdate-is-now 选项) 同时在INSERT …SELECT 会产生比 RBR 更多的行级锁 2.Row:不记录sql语句上下文相关信息,仅保存哪条记录被修改。 优点: binlog中可以不记录执行的sql语句的上下文相关的信息,仅需要记录那一条记录被修改成什么了。所以rowlevel的日志内容会非常清楚的记录下每一行数据修改的细节。而且不会出现某些特定情况下的存储过程,或function,以及trigger的调用和触发无法被正确复制的问题 缺点:所有的执行的语句当记录到日志中的时候,都将以每行记录的修改来记录,这样可能会产生大量的日志内容,比如一条update语句,修改多条记录,则binlog中每一条修改都会有记录,这样造成binlog日志量会很大,特别是当执行alter table之类的语句的时候,由于表结构修改,每条记录都发生改变,那么该表每一条记录都会记录到日志中。 3.Mixedlevel: 是以上两种level的混合使用,一般的语句修改使用statment格式保存binlog,如一些函数,statement无法完成主从复制的操作,则采用row格式保存binlog,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在Statement和Row之间选择一种.新版本的MySQL中队row level模式也被做了优化,并不是所有的修改都会以row level来记录,像遇到表结构变更的时候就会以statement模式来记录。至于update或者delete等修改数据的语句,还是会记录所有行的变更。   二.Binlog基本配制与格式设定 1.基本配制 Mysql BInlog日志格式可以通过mysql的my.cnf文件的属性binlog_format指定。如以下: binlog_format           = MIXED                 //binlog日志格式 log_bin                  =目录/mysql-bin.log    //binlog日志名 expire_logs_days    = 7                //binlog过期清理时间 max_binlog_size    100m                    //binlog每个日志文件大小 2.Binlog日志格式选择 Mysql默认是使用Statement日志格式,推荐使用MIXED. 由于一些特殊使用,可以考虑使用ROWED,如自己通过binlog日志来同步数据的修改,这样会节省很多相关操作。对于binlog数据处理会变得非常轻松,相对mixed,解析也会很轻松(当然前提是增加的日志量所带来的IO开销在容忍的范围内即可)。 3.mysqlbinlog格式选择 mysql对于日志格式的选定原则:如果是采用 INSERT,UPDATE,DELETE 等直接操作表的情况,则日志格式根据 binlog_format 的设定而记录,如果是采用 GRANT,REVOKE,SET PASSWORD 等管理语句来做的话,那么无论如何 都采用 SBR 模式记录 三.Mysql Binlog日志分析 通过MysqlBinlog指令查看具体的mysql日志,如下: /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// SET TIMESTAMP=1350355892/*!*/; BEGIN /*!*/; # at 1643330 #121016 10:51:32 server […]

龙生   12 Nov 2014
View Details

Windows下MySQL日志的启用

1.    首先连接上mysql,查看日志服务是否开启 点击(此处)折叠或打开 show global variables like \’log_bin%\'; 输入上面的命令可以查看当前mysql的日志服务是否开启,图为OFF状态,表示还未开启,MySQL默认状态下是未开启日志服务的。 2.    开启日志服务 配置MySQL根目录下的my.ini文件,在[mysqld]下面添加存放日志的路径,此处我写的是绝对路径,在MySQL的根目录下我创建了log/log-bin/logbin.log路径, 创建目录时要注意以下两点: a)    目录的文件夹命名中不能有空格,否则在访问日志时会报错。 b)    指定目录时要以*.log结尾,即不能仅仅指定到文件夹的级别,上面我创建的路径写了logbin.log,那么在log/log-bin/目录下会产生logbin.000001和logbin.index两个日志文件; 否则不会有日志文件产生。 3.    重启mysql服务 my.ini文件修改后保存,需要重启mysql服务才能生效。windows下右键“计算机”->“管理”->“服务和应用程序”->“服务”里面,选择“MySQL”,然后点击“重启动”,即完成重启服务。 4.    再次查看mysql的日志服务状态,就会看到开启状态 5.    查看日志 在DOS状态下,进入MySQL的bin目录下执行mysqlbinlog命令,可以查看指定的日志文件,例如查看logbin.000001日志 要注意查看日志的目录,因为我的日志目录是和bin在同一级别中,因此先../返回上级目录,再查找log/log-bin/logbin.000001日志。 from:http://blog.itpub.net/29660208/viewspace-1188431/

龙生   12 Nov 2014
View Details

MySQL中时间-->数字转换和IP地址-->数字转换

后台有很字段都是采用时间戳的形式,二者如何转换的,每次都搜索,真麻烦,就记下来吧。其实时间和IP类型的字段都有数字来存储的话,还是优点还是很大的,最直接的就是会省掉不少的存储空间。 1、将时间转换为时间戳 select unix_timestamp('2009-10-26 10-06-07') 如果参数为空,则处理为当前时间 2、将时间戳转换为时间 select from_unixtime(1256540102) 有些应用生成的时间戳是比这个多出三位,是毫秒表示,如果要转换,需要先将最后三位去掉(标准的10位数字,如果是13位的话可以以除以1000的方式),否则返回NULL 还有就是IP地址和数字之间的转换: 1.将IP地址转化为数字 select inet_aton('210.30.0.103'); 2.将数字转化为IP地址 select inet_ntoa(3525181543); ___________________________________________________________________ mysql日期和时间格式转换 对于每个类型拥有的值范围以及并且指定日期何时间值的有效格式的描述见7.3.6 日期和时间类型。 这里是一个使用日期函数的例子。下面的查询选择了所有记录,其date_col的值是在最后30天以内: mysql> SELECT something FROM table WHERE TO_DAYS(NOW()) – TO_DAYS(date_col) <= 30; DAYOFWEEK(date) 返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。 mysql> select DAYOFWEEK('1998-02-03'); -> 3 WEEKDAY(date) 返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。 mysql> select WEEKDAY('1997-10-04 22:23:00'); -> 5 mysql> select WEEKDAY('1997-11-05'); -> 2 DAYOFMONTH(date) 返回date的月份中日期,在1到31范围内。 mysql> select DAYOFMONTH('1998-02-03'); -> 3 DAYOFYEAR(date) 返回date在一年中的日数, 在1到366范围内。 mysql> select DAYOFYEAR('1998-02-03'); -> 34 MONTH(date) 返回date的月份,范围1到12。 mysql> select MONTH('1998-02-03'); -> 2 DAYNAME(date) 返回date的星期名字。 mysql> select DAYNAME("1998-02-05"); -> 'Thursday' MONTHNAME(date) 返回date的月份名字。 mysql> […]

龙生   30 Oct 2014
View Details
1 18 19 20 22