Home mail me! Syndicate this site using RSS

Archive for Database


1146 – Table ‘mysql.proc’ doesn’t exist

如果MySQL升级到新的版本后,出现”1146 – Table ‘mysql.proc’ doesn’t exist”的错误,那么还需要升级一下系统表,可使用MySQL自带的mysql_fix_privilege_tables或mysql_upgrade命令来修复一下.

注:自5.0.19版本起,mysql_fix_privilege_tables已经被mysql_upgrade命令代替!

相关信息可访问:http://dev.mysql.com/doc/refman/5.0/en/mysql-fix-privilege-tables.html

MySQL Sandbox

如果想在一台服务器上安装多个MySQL服务的话,MySQL Sandbox是个不错的选择,相比较MySQL自带的mysqld_multi而言要方便不少。

mysqld_multi方式需要安装多次,并且需要对每个服务进行相应的配置,而MySQL Sandbox一个命令即可搞定。

这里有个MySQL Sandbox的PPT介绍:http://datacharmer.org/presentations/mysqluniv_2008/sandbox_2_0.html

感兴趣的朋友可以访问官方网站:https://launchpad.net/mysql-sandbox

High Availability with DRBD and Heartbeat Presentation

这是Chris Barber 发布在Twin Cities MySQL and PHP User Group上的演讲,演讲内容很不错,关于采用DRBD和Heartbeat结束架构的高可用性集群,非常适合数据库应用,感兴趣的朋友可以看看。

原文地址:http://www.cb1inc.com/2008/06/10/high-availability-with-drbd-and-heartbeat-presentation

[小技巧]MYSQL中查找重复记录

先来录入一些测试数据

CREATE TABLE news(
	ID INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
	Title VARCHAR(255) NOT NULL,
	PRIMARY KEY(ID)
);
 
INSERT INTO news (Title) VALUES ('aaa');
INSERT INTO news (Title) VALUES ('aaa');
INSERT INTO news (Title) VALUES ('aaa');
INSERT INTO news (Title) VALUES ('bbb');
INSERT INTO news (Title) VALUES ('bbb');
INSERT INTO news (Title) VALUES ('ccc');

列出所有Title字段重复的记录

SELECT * FROM news WHERE Title IN (
	SELECT Title FROM news GROUP BY Title HAVING (COUNT(*)) >1
)

Howto Install Oracle Berkeley DB on Linux

Berkeley DB是由美国Sleepycat Software公司开发的一套开放源代码的嵌入式数据库管理系统(已被Oracle收购),它为应用程序提供可伸缩的、高性能的、有事务保护功能的数据管理服务。

Berkeley DB为许多编程语言提供了实用的api接口,包括c、c++、java、perl、tcl、python和php等。所有同数据库相关的操作都由Berkeley DB函数库负责统一完成。

官方地址为:http://www.oracle.com/technology/products/berkeley-db/db/index.html

本文就先讲一下如何在CentOS下安装Berkeley DB数据库(其他系统类似)。

1、安装Berkeley DB

# cd /usr/local/src
# wget http://download.oracle.com/berkeley-db/db-4.6.18.tar.gz
# tar -zxvf db-4.6.18.tar.gz
# cd db-4.6.18
# cd build_unix

Berkeley DB默认是安装在/usr/local/BerkeleyDB.4.6目录下,其中4.6就是版本号,你也可以指定–prefix参数来设置安装目录。

# ../dist/configure --prefix=/usr/local/berkeleydb --enable-cxx

其中–enable-cxx就是编译C++库,这样才能编译Berkeley DB数据库的PHP扩展php_db4。

# make
# make install
# echo '/usr/local/berkeleydb/lib/' >> /etc/ld.so.conf
# ldconfig

这2句的作用就是通知系统Berkeley DB的动态链接库在/usr/local/berkeleydb/lib/目录。

至此,Berkeley DB数据库已经安装完成。

Read more…

[小技巧]INSERT … ON DUPLICATE KEY UPDATE

MySQL 自4.1版以后开始支持INSERT … ON DUPLICATE KEY UPDATE语法,使得原本需要执行3条SQL语句(SELECT,INSERT,UPDATE),缩减为1条语句即可完成。

例如ipstats表结构如下:

CREATE TABLE ipstats (
ip varchar(15) not null unique,
clicks smallint(5) unsigned not null default '0'
);

原本需要执行3条SQL语句,如下:

IF (SELECT * FROM ipstats WHERE ip='192.168.0.1') {
    UPDATE ipstats SET clicks=clicks+1 WHERE ip='192.168.0.1';
} else {
    INSERT INTO ipstats (ip, clicks) VALUES ('192.168.0.1', 1);
}

而现在只需下面1条SQL语句即可完成:

INSERT INTO ipstats VALUES('192.168.0.1', 1) ON DUPLICATE KEY UPDATE clicks=clicks+1;

注意,要使用这条语句,前提条件是这个表必须有一个唯一索引或主键。

MySQL集群(NDB)安装脚本

Jim Dowling为我们写了一个安装和管理MySQL集群(MySQL Cluster)的BASH脚本,支持安装本地集群和分布式集群,提问式的安装方式,非常方便,相信每个人都很容易上手。

http://www.jimdowling.info/ndbinstaller-trac/wiki/DetailedLocalhostInstall这里以图文的方式介绍了这个脚本的整个安装过程。

更多资料请访问:http://www.jimdowling.info/ndbinstaller-trac/

安装脚本下载(右键另存为)

wget http://www.jimdowling.info/ndbinstaller/ndbinstaller.sh
# or
svn co http://www.jimdowling.info/ndbinstaller/

Howto change runtime variables without restart MySQL Server

比方说在一些实际生产环境中,想改个MYSQL的配置,但是又不想停止服务重起MYSQL,有什么办法呢?使用SET命令可以做到,请看下面几个例子:

1.设置key_buffer_size的大小为10M。

SET GLOBAL key_buffer_size = 10485760;

SET @@global.key_buffer_size = 10485760;

2.设置最大连接数为200

SET GLOBAL max_connections=200;

SET @@global.max_connections=200;

3.更改慢查询SQL日志时间

SET @@long_query_time=3;

要查看有哪些变量,可执行SHOW VARIABLES;获得。

MySQL 5.1新特性之事件调度器(Event Scheduler)

一、前言

自MySQL5.1.6起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务(例如:删除记录、对数据进行汇总等等),来取代原先只能由操作系统的计划任务来执行的工作。更值得一提的是MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精确到每分钟执行一次。对于一些对数据实时性要求比较高的应用(例如:股票、赔率、比分等)就非常适合。

事件调度器有时也可称为临时触发器(temporal triggers),因为事件调度器是基于特定时间周期触发来执行某些任务,而触发器(Triggers)是基于某个表所产生的事件触发的,区别也就在这里。

在使用这个功能之前必须确保event_scheduler已开启,可执行

SET GLOBAL event_scheduler = 1;

SET GLOBAL event_scheduler = ON;

来开启,也可以直接在启动命令加上“–event_scheduler=1”,例如:

mysqld ... --event_scheduler=1

Read more…

GROUP_CONCAT()妙用

GROUP_CONCAT()是MySQL数据库提供的一个函数,通常跟GROUP BY一起用,具体可参考MySQL官方文挡:http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

先来看一下这个函数的语法:

GROUP_CONCAT([DISTINCT] expr [,expr ...]
             [ORDER BY {unsigned_integer | col_name | expr}
                 [ASC | DESC] [,col_name ...]]
             [SEPARATOR str_val])

下面就演示一下这个函数所带来的方便之处,首先建立一个学生选课表student_courses,并填充一些测试数据。
Read more…


Next Page »