记录长时间的查询很有必要,这个对检查问题发生的原因有很大帮助,因为一般是长时间的查询会导致排队严重或者导致表锁定。

在配置文件里面加上几句即可:

long_query_time = 2
log_slow_queries = slow_queries
#log_queries_not_using_indexes = true


看字面即可理解设置的含义了,设置多长时间算是长时间的查询,设置日志名称,最后是否记录没有使用索引的查询。

日志名称如果是用/开头的,要注意日志写入权限,否则会出错。用一个名称则会放置在数据库目录var内。
没有使用索引的查询可能会很多,如果有必要那可以记录,但日志会出现好多

分析日志主要是查找到哪些查询占用时间比较长,这样可以优化数据库和程序。

比如如下日志片段:
引用
# Time: 090511 11:57:19
# User@Host: user[password] @  [192.168.1.2]
# Query_time: 5  Lock_time: 0  Rows_sent: 10  Rows_examined: 414839
SELECT (XXXX省略) ORDER BY s.friendnum DESC LIMIT 0,10;


最简单的改善方案是给该表的 friendnum 字段加索引。

日志分析没有做过,可以参考一下别人写的工具介绍:五款常用mysql slow log分析工具的比较
Tags:
一直有一个数据库没有同步的,非常的奇怪。

1 重新做一次同步,其它数据库都同步正常,唯独此数据库不同步
2 在phpmyadmin上操作,是可以正常同步到slave

由此可以大概判断是程序上可能有点问题了,可能是使用上的问题。

程序是uchome1.5版本的,经过检查,是数据库操作是没有选择相应的数据库:

文件:uc_client/model/base.php

/**
* 实例化数据库类
*
*/
function init_db() {
  require_once UC_ROOT.'lib/db.class.php';
  $this->db = new db();
  $this->db->connect(UC_DBHOST, UC_DBUSER, UC_DBPW, '', UC_DBCHARSET, UC_DBCONNECT, UC_DBTABLEPRE);
}


上面居然强制传了空的数据库名称,所以导致程序没有操作选择数据库:
文件:uc_client/lib/db.class.php

function connect($dbhost, $dbuser, $dbpw, $dbname = '', $dbcharset = '', $pconnect = 0, $tablepre='', $time = 0) {
  //省略部分代码
  if($dbname) {
    mysql_select_db($dbname, $this->link);
  }

}


没有dbname,所以没有进行mysql_select_db操作导致master没有记录,从而没有参与同步到slave。
小修改即可:

$this->db->connect(UC_DBHOST, UC_DBUSER, UC_DBPW, UC_DBNAME, UC_DBCHARSET, UC_DBCONNECT, UC_DBTABLEPRE);


这样就修复了程序的错误,重新处理同步即可。
Tags: ,
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]

阅读推荐

服务器相关推荐

开发相关推荐

应用软件推荐