分类目录归档:数据库

解决mysql数据连接超时断开的问题

如果mysql的连接的空闲时间超过wait_timeout设置的时间,就会出现mysql server has gone away的错误,解决方法如下
建立一检测函数,如果mysql_ping不成功则关闭旧连接,然后重新建立一个新的连接。
function check_db_link($conn, $type = ‘center_server’) {
if (! mysql_ping ( $conn )) {
global $config;

mysql_close($conn);
//var_dump($config);

$conn = mysql_connect ( $config [$type] ['db_host'], $config [$type] ['db_user'], $config [$type] ['db_password'] );
mysql_select_db ( $config [$type] ['db_name'], $conn );
mysql_query ( “set names utf8″, $conn );
}
return $conn;
}
注:在新建连接之前必须先使用mysql_close($conn);关闭旧的连接,否则返回的连接依然不能用。

应用程序开机无法自动启动的问题

首先,有几种方法可以让一个应用程序在开机时自动运行。

1。写注册表;

2。写服务;

3。拷贝可执行文件的链接到启动项目录;

不管是哪种方式都有可能受到杀毒软件的提醒和保护,允许即可。

但今天遇到的问题是启动项里已经写进去了,但大部分用户开机还是运行不了,后来发现是因为开机时网络连接还没有连接就启动了程序,在连接数据库时有异常没有捕捉导到程序出错。

可以在开机程序相关的代码里加入判断网络连接重试,或在DAO层加入判断重试都可以。

centos5.5(64bit)下用rpm包安装mysql5.5.8[转]

一 安装文件
MySQL-server-5.5.8-1.rhel5.x86_64.rpm
MySQL-client-5.5.8-1.rhel5.x86_64.rpm
执行安装命令
rpm -ivh MySQL-server-5.5.8-1.rhel5.x86_64.rpm
rpm -ivh MySQL-client-5.5.8-1.rhel5.x86_64.rpm
安装完以后,就可以启动了
service mysql start
service mysql stop
service mysql restart
二 下面说下文件结构
数据目录 /var/lib/mysql
安装目录 /usr/share/mysql
下面就是我们最关心的配置文件了.默认情况下是没有的,但也可以启动,如果不想使用默认的配置,那需要我们手动拷贝/usr/share/mysql 下面任意一个配置文件my-*.cnf到/etc下,并更名为my.cnf
之后启动,就会生效了.
默认情况下,安装完以后,登陆MYSQL是不需要密码的
mysql -uroot -p
登陆后,需要自己配置远程登陆权限
三 如果需要远程访问,我们还需要做一些工作
1.修改配置文件
[mysqld]
skip-name-resolve
2.本地登陆后,需要把mysql库中的表user里的某一用户的host字段,改为%
一般我们会 update user set host=’%’ where user=’root’ and host=’localhost’
3.其他:编码和引擎
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
default-storage-engine=INNODB

Starting MySQL…Manager of pid-file quit without updating

今天突然发现装在centos上的mysql登录不上了,仔细检查发现是mysqld服务没了,手动启动,报下面的错误,

Starting MySQL…Manager of pid-file quit without updating

到/data/mysql/下看了一下错误日志文件:localhost.localdomain.err, 有下面一段

100408  0:45:32 [Note] Event Scheduler: Purging the queue. 0 events
100408  0:45:32  InnoDB: Starting shutdown…
100408  0:45:32  InnoDB: Shutdown completed; log sequence number 0 383861955
100408  0:45:32 [Warning] Forcing shutdown of 1 plugins
100408  0:45:32 [Note] /usr/local/mysql/bin/mysqld: Shutdown complete

100408 00:45:32 mysqld_safe mysqld from pid file /data/mysql/localhost.localdomain.pid ended
100408 00:45:33 mysqld_safe Starting mysqld daemon with databases from /data/mysql
100408  0:45:33 [Note] Plugin ‘FEDERATED’ is disabled.
100408  0:45:33  InnoDB: Started; log sequence number 0 383861955
/usr/local/mysql/bin/mysqld: File ‘./mysql-bin.000056′ not found (Errcode: 13)
100408  0:45:33 [ERROR] Failed to open log (file ‘./mysql-bin.000056′, errno 13)
100408  0:45:33 [ERROR] Could not open log file
100408  0:45:33 [ERROR] Can’t init tc log
100408  0:45:33 [ERROR] Aborting
网上搜了一下,有人说将/etc/my.cnf里面的 skip federated注释掉即可,但我的my.cnf里压根就没有这一项,还有人说/etc/my.cnf中没有设置datadir=/data/mysql,但我看了这一项已经有了。

最后发现一篇文章说data/mysql-bin.index没有删除,data/mysql-bin.index是存放日志文件索引的文件,只删除了日志文件而没有对日志的索引文件做处理显然是不行的。
删除data/mysql-bin.index文件,再service mysqld start就可以了。