一月 13, 2009 at 1:48 下午
by Kim Chow · Filed under MySQL, 数据库
相信很多朋友都试过需要从老版本升级到新版本或新版本降到老版本的事。
我现在需要把mysql4.1的升级为Mysql5.1,用Mysqldump然后再mysql导入,怎样也出错。直接复制库文件也不行。
最后通过官方找到一个方法
先通过mysqldump导出
- shell> mkdir DUMPDIR
- shell>mysqldump --tab=DUMPDIR db_name
然后到目标机器运行
- shell> mysqladmin create db_name # create database
- shell> cat DUMPDIR/*.sql | mysql db_name # create tables in database
- shell> mysqlimport db_name DUMPDIR/*.txt # load data into tables
这方法适用于旧版本迁移到新版本,同样适用于新版本降级
Permalink
五月 22, 2008 at 6:14 下午
by Kim Chow · Filed under MySQL, 数据库
1.复制表结构及数据到新表
CREATE TABLE 新表
SELECT * FROM 旧表 |
2.只复制表结构到新表
CREATE TABLE 新表
SELECT * FROM 旧表 WHERE 1=2 |
即:让WHERE条件不成立.
CREATE TABLE 新表
LIKE 旧表 //tianshibao |
3.复制旧表的数据到新表(假设两个表结构一样)
INSERT INTO 新表
SELECT * FROM 旧表 |
4.复制旧表的数据到新表(假设两个表结构不一样)
INSERT INTO 新表(字段1,字段2,…….)
SELECT 字段1,字段2,…… FROM 旧表 |
Permalink
五月 22, 2008 at 1:52 下午
by Kim Chow · Filed under MySQL, 数据库
看标题就知道,我接下来要干什么了。呵呵。。今天无意中发现使用Replace原来可以这么简单的。呵呵。先看下,我从网上找过来的资料。
Read the rest of this entry »
Permalink
五月 25, 2007 at 11:46 下午
by Kim Chow · Filed under freebsd, linux, MySQL, 操作系统, 数据库
申请了MySQL版主,说要15天的考察期
看来要好好表现了。不能再潜水了。
看到很多朋友问MySQL的性能分析器
因为MySQL在这方面做得比较差,也可能我不知道
没有Microsoft的SQL Profiler,也没有Oracle的Audit和AWR
所以我们很难得到一些SQL语句的统计,这也给我们调优带来了困难
更难的是对MySQL的追踪
以前写过个,不过在看过mysql网站上的一个bash脚本后,觉得自己的那个就是小巫见大巫了
现拿来分享给大家,很简单
# 取得网卡eth0上的所有操作
- time tcpdump -i rl0 -s 1500 -w 20060427-db-traffic-01.dmp
# 这个可以指定特定IP请求的操作,可用于追踪
time tcpdump -i eth0 -s 1500 src host 192.168.2.10 -w 20060427-db-traffic-01.dmp
# 这个是格式化输出你要结果
- strings 20060427-db-traffic-01.dmp | grep -i 'select' | awk '{printf("%s %s %s %s\n", $1,$2,$3, $4);}'| sort| uniq -c | awk '{printf("%06ld %s %s %s %s\n", $1,$2,$3,$4,$5);}'|sort
得到的结果:
cpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 1500 bytes
12000 packets captured
12000 packets received by filter
0 packets dropped by kernel
real 0m8.666s
user 0m0.006s
sys 0m0.016s
——–
000001 select last_insert_id() from system_parameter
…
000122 select count(1) from visit_tracking
000122 select visitor_id
000800 select web_page_id , web_page_type_id
000800 select web_page_type_id , name
003200 select count(1) from hit_count
006400 select pd.parameter_value,
006400 select rp.user_id , rp.update_time
可以看到执行各种select的次数,当然改一下就可以看insert,update这种操作次数
配合log-slow-queries,你可以进一步的优化
Permalink
二月 13, 2007 at 2:21 下午
by Kim Chow · Filed under MySQL, 数据库
把多余的日志删除了。只保留当前一个日志文件。
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 99 to server version: 5.0.24-community-nt-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> show master logs;
+------------------+------------+
| Log_name | File_size |
+------------------+------------+
| mysql-bin.000026 | 1073742051 |
| mysql-bin.000027 | 675531614 |
+------------------+------------+
2 rows in set (0.03 sec)
mysql> purge master logs to 'mysql-bin.000027';
Query OK, 0 rows affected (0.31 sec) <------------- 这里 ---------
mysql> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000027 | 675627704 |
+------------------+-----------+
1 row in set (0.00 sec)
mysql>
Permalink
十月 28, 2006 at 1:21 上午
by Kim Chow · Filed under MySQL, 数据库
Super-smack 是一个强大的广受赞誉的压力测试工具,支持MySQL和PostgreSQL。这个工具程序现在由 Tony Bourke 维护。
Read the rest of this entry »
Permalink
十月 28, 2006 at 1:09 上午
by Kim Chow · Filed under freebsd, MySQL, 操作系统, 数据库
I hate to start the blog post with the same "I’ve been really busy excuse" but honestly that’s the truth. Ever since I wrote the last post, one important thing happened to me. My dentist prescribed me a mouth wash and it turned out that I was severely allergic to it. My upper lip became extremely swollen and remained like that for couple of days until I got a shot of steroid. Ughh, it was really painful. Anyways, time has just been flying by and I have a lot of catching up to do.
This is the part 4 of MySQL Benchmarking series. In the last post I showed you how you can compile Sysbench on Solaris 10. In this post, I will be showing you how you can compile Super-Smack on Solaris 10.
MySQL Super Smack was originally developed by Sasha Pachev (sasha at surveypro dot com), a former MySQL employee. After Sasha, Jeremy Zawodny of Yahoo! took over the maintenance of Super Smack. When Jeremey got really busy with Yahoo! stuff, Tony Bourke took over the Super Smack project.
Getting Super Smack to compile on Solaris 10 was really a headache even though a Sun blog post claimed it wasn’t. Nonetheless, I finally succeeded with the help of Andy.
Download Super Smack source (the current version is 1.3).
Read the rest of this entry »
Permalink
十月 21, 2006 at 9:56 上午
by Kim Chow · Filed under MySQL, 数据库
注意:这里说的delete是指不带where子句的delete语句
相同点
truncate和不带where子句的delete, 以及drop都会删除表内的数据
不同点:
1. truncate和 delete只删除数据不删除表的结构(定义)
drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态.
2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发.
truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.
3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动
显然drop语句将表所占用的空间全部释放
truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage; truncate会将高水线复位(回到最开始).
4.速度,一般来说: drop>; truncate >; delete
5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及
使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大.
想删除表,当然用drop
想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete.
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据
Permalink
十月 16, 2006 at 10:58 上午
by Kim Chow · Filed under MySQL, 数据库
以前在群里讨论过这个问题,比较的有意思.mysql的语法真好玩.他们原来都想用PHP的实现随机,但取出多条好像要进行两次以上查询.翻了手册,找到了下面这个语句,可以完成任务了。
SELECT * FROM table_name ORDER BY rand() LIMIT 5;
rand在手册里是这么说的:
RAND() ,RAND(N) :返回在范围0到1.0内的随机浮点值。如果一个整数参数N被指定,它被用作种子值。
mysql> select RAND(); -> 0.5925 mysql> select RAND(20); -> 0.1811 mysql> select RAND(20); -> 0.1811 mysql> select RAND(); -> 0.2079 mysql> select RAND(); -> 0.7888
你不能在一个ORDER BY子句用RAND()值使用列,因为ORDER BY将重复计算列多次。然而在MySQL3.23中,你可以做:
SELECT * FROM table_name ORDER BY RAND(),这是有利于得到一个来自SELECT * FROM table1,table2 WHERE a=b AND c
但我试了一下,8千条记录的表,执行一次需要0.08 sec,.慢了些
后来请教了google,得到如下代码
SELECT * FROM table_name AS r1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM table_name)) AS id) AS r2 WHERE r1.id >= r2.id ORDER BY r1.id ASC LIMIT 5;
执行效率需要0.02 sec.可惜的是,只有mysql 4.1.*以上才支持这样的子查询.
Permalink
十月 8, 2006 at 11:49 上午
by Kim Chow · Filed under MySQL, 数据库
一、问题的提出
在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目前系统需要解决的最主要的问题之一。系统优化中一个很重要的方面就是SQL语句的优化。对于海量数据,劣质SQL语句和优质SQL语句之间的速度差别可以达到上百倍,可见对于一个系统不是简单地能实现其功能就可,而是要写出高质量的SQL语句,提高系统的可用性。
在多数情况下,Oracle使用索引来更快地遍历表,优化器主要根据定义的索引来提高性能。但是,如果在SQL语句的where子句中写的SQL代码不合理,就会造成优化器删去索引而使用全表扫描,一般就这种SQL语句就是所谓的劣质SQL语句。在编写SQL语句时我们应清楚优化器根据何种原则来删除索引,这有助于写出高性能的SQL语句。
Read the rest of this entry »
Permalink