今年10月份,Window 7、Ubuntu 9.10和FreeBSD 8.0三者几乎同时发布。谁的性能最优?
9月28日,业界知名的Phoronix实验室公布一项测试数据,表明Ubuntu 9.10在性能上明显优于FreeBSD 8.0。具体做法大致如下:把两者最新的版本放在一台AMD双核CPU的服务器上,使用Phoronix专用测试包(PTS)严格进行24项对比测试,结果显示:19:5(即Ubuntu:19胜5负),Ubuntu明显胜于FreeBSD。具体地说就是,作为服务器版本的Ubuntu 9.10 Alpha 6与FreeBSD 8.0 RC1大比拼,前者胜出。
今年8月3日进行的一项测试(Windows7/Vista/Ubuntu三者大比拼),结果表明,Ubuntu 9.04版本略胜一筹。Ubuntu 9.10最新版本与Windows 7的对比测试,目前还没有进行。但是,根据Phoronix实验室的最新测试结果,Ubuntu的排名不会是最差的一个。大家知道,Phoronix实验室是一个专门的测试机构,书呆子气十足,只会用数据说话。事实上,Apple电脑操作系统就是由FreeBSD演化出来的。坦率地说,Ubuntu 9.10取得如此成绩并不容易,完全仰仗于Linux 2.6.31最新版本的强大威力。
为什么人们如此关注Ubuntu 9.10版本性能的优劣?因为,Ubuntu 9.10版本关乎企业云计算的命运。当前,国内《Ubuntu实验室》已经掌握了Ubuntu企业云计算的关键技术(或者说,关键点),同时,还有其他的一些发现(或体会)。我们认识到,真正学会、用好Ubuntu 9.10版本不是一件简单的事情,其中包含很多新理念、新技术。在技术方面,紧跟发展潮流是创新的前提,创新不是重新发明轮子。
抱歉说明:全球IT技 术发展非常迅速,一日不读书,落后千万里。明日清晨,我就要飞往一个很远很远的地方,那里几乎全是原始森林,冰川和雪峰,人迹罕见,根本没有网络连接。在 那里,我会心中时刻想念着我的读者们(不论是粉丝们还是批评者)。我虽然人已老了,但是,我其实还一个学生,准确地说,是一个数学专业的大学生,什么东西 都要重新学习,因为,我本人只是个数学教员(原人大、后北大),整天在无限小、无限大抽象空间中周旋。C程序我不写了,但是,我现在还能看得懂C程序,而且,很喜欢欣赏C程序的源代码风格。我懂得C程序的伟大力量。时光不能倒流。如若时光果真能够回到1957年,我定将成为一名编程高手,把思想闪光注入程序,与朋友们交流。在我看来,程序就是数学的一种语言,与人交流的工具。有人喜欢说,国产程序。对此,我就是想不通。程序可以写在黑板上,怎么会是国产?我力挺Ubuntu Linux发行版,完全是因为它的源代码可以让我看,让我读,而且,可以讲给学生们听。把一个程序预装在某个特定的计算机上,那叫“呆板程序”;要是一个程序能够随处自动运行,那才叫“Live程序”,这东西才有味道。我不相信Windows 7能够变成为“Live程序”,因为,它不能自动识别周围的硬件环境(需要激活才行)。其实Live技术并不复杂,但是,微软就是不肯这样去做
9月28日,业界知名的Phoronix实验室公布一项测试数据,表明Ubuntu 9.10在性能上明显优于FreeBSD 8.0。具体做法大致如下:把两者最新的版本放在一台AMD双核CPU的服务器上,使用Phoronix专用测试包(PTS)严格进行24项对比测试,结果显示:19:5(即Ubuntu:19胜5负),Ubuntu明显胜于FreeBSD。具体地说就是,作为服务器版本的Ubuntu 9.10 Alpha 6与FreeBSD 8.0 RC1大比拼,前者胜出。
今年8月3日进行的一项测试(Windows7/Vista/Ubuntu三者大比拼),结果表明,Ubuntu 9.04版本略胜一筹。Ubuntu 9.10最新版本与Windows 7的对比测试,目前还没有进行。但是,根据Phoronix实验室的最新测试结果,Ubuntu的排名不会是最差的一个。大家知道,Phoronix实验室是一个专门的测试机构,书呆子气十足,只会用数据说话。事实上,Apple电脑操作系统就是由FreeBSD演化出来的。坦率地说,Ubuntu 9.10取得如此成绩并不容易,完全仰仗于Linux 2.6.31最新版本的强大威力。
为什么人们如此关注Ubuntu 9.10版本性能的优劣?因为,Ubuntu 9.10版本关乎企业云计算的命运。当前,国内《Ubuntu实验室》已经掌握了Ubuntu企业云计算的关键技术(或者说,关键点),同时,还有其他的一些发现(或体会)。我们认识到,真正学会、用好Ubuntu 9.10版本不是一件简单的事情,其中包含很多新理念、新技术。在技术方面,紧跟发展潮流是创新的前提,创新不是重新发明轮子。
抱歉说明:全球IT技 术发展非常迅速,一日不读书,落后千万里。明日清晨,我就要飞往一个很远很远的地方,那里几乎全是原始森林,冰川和雪峰,人迹罕见,根本没有网络连接。在 那里,我会心中时刻想念着我的读者们(不论是粉丝们还是批评者)。我虽然人已老了,但是,我其实还一个学生,准确地说,是一个数学专业的大学生,什么东西 都要重新学习,因为,我本人只是个数学教员(原人大、后北大),整天在无限小、无限大抽象空间中周旋。C程序我不写了,但是,我现在还能看得懂C程序,而且,很喜欢欣赏C程序的源代码风格。我懂得C程序的伟大力量。时光不能倒流。如若时光果真能够回到1957年,我定将成为一名编程高手,把思想闪光注入程序,与朋友们交流。在我看来,程序就是数学的一种语言,与人交流的工具。有人喜欢说,国产程序。对此,我就是想不通。程序可以写在黑板上,怎么会是国产?我力挺Ubuntu Linux发行版,完全是因为它的源代码可以让我看,让我读,而且,可以讲给学生们听。把一个程序预装在某个特定的计算机上,那叫“呆板程序”;要是一个程序能够随处自动运行,那才叫“Live程序”,这东西才有味道。我不相信Windows 7能够变成为“Live程序”,因为,它不能自动识别周围的硬件环境(需要激活才行)。其实Live技术并不复杂,但是,微软就是不肯这样去做
没有最好的操作系统,只有最适合的操作系统~~
我也算得上是个 FREEBSD 的爱好者,虽然第一次使用 UNIX(类 UNIX)系统时是使用 SlackWare,即其中一个 LINUX 发行版。但自从使用了 FREEBSD 后,基本没用过 LINUX 了。 阅读全文
我也算得上是个 FREEBSD 的爱好者,虽然第一次使用 UNIX(类 UNIX)系统时是使用 SlackWare,即其中一个 LINUX 发行版。但自从使用了 FREEBSD 后,基本没用过 LINUX 了。 阅读全文
用于操作数据库的SQL一般分为两种,一种是查询语句,也就是我们所说的SELECT语句,另外一种就是更新语句,也叫做数据操作语句。言外之意,就是对数据进行修改。在标准的SQL中有3个语句,它们是INSERT、UPDATE以及DELETE。在MySQL中又多了一个REPLACE语句,因此,本文以MySQL为背景来讨论如何使有SQL中的更新语句。阅读全文
log-slow-queries=/var/lib/mysql/slowquery.log
long_query_time=2
连接数太多,如果是服务器或者数据库负载太高的异常,如果让程序继续,会有逻辑上的处理会有问题的,那得throw一下异常,然后捕获它,这说明数据库的架构需要进一步优化了,在高并发上处理有问题。
一直以来积累了很多对MySQL优化的心得和经验,计划通过写日志的方式一步一步写出来分享给大家。
MySQL优化的第一步应该做的就是排查问题,找出瓶颈,而通常情况下的瓶颈和问题都需要通过观察MySQL的运行情况来进行分析,《查看MySQL运行状况》这篇文章罗列了一些常用的查看MySQL运行信息的方式。
而对于大多数的程序员来说,最容易发现并解决的问题就是MySQL的慢查询或者没有利用索引的查询,所以这里主要给大家介绍如何利用官方的mysqldumpslow工具方便的查看这些信息。如何打开MySQL的慢查询,请点击《打开MySQL的慢查询记录》。
mysql slow log 是用来记录执行时间较长(超过long_query_time秒)的sql的一种日志工具.
启用 slow log
有两种启用方式:
1, 在my.cnf 里 通过 log-slow-queries[=file_name]
2, 在mysqld进程启动时,指定--log-slow-queries[=file_name]选项
mysqldumpslow命令
/usr/local/mysql/bin/mysqldumpslow -s c -t 10 /database/mysql/slow-log
这会输出记录次数最多的10条SQL语句,其中:
* -s, 是表示按照何种方式排序,c、t、l、r分别是按照记录次数、时间、查询时间、返回的记录数来排序,ac、at、al、ar,表示相应的倒叙;
* -t, 是top n的意思,即为返回前面多少条的数据;
* -g, 后边可以写一个正则匹配模式,大小写不敏感的;
比如
/path/mysqldumpslow -s r -t 10 /database/mysql/slow-log
得到返回记录集最多的10个查询。
/path/mysqldumpslow -s t -t 10 -g “left join” /database/mysql/slow-log
得到按照时间排序的前10条里面含有左连接的查询语句。
小结
使用mysqldumpslow命令可以非常明确的得到各种我们需要的查询语句,对MySQL查询语句的监控、分析、优化是MySQL优化的第一步,也是非常重要的一步。
————————————————————————————————————
mysql开启慢查询方法:
1,配置开启
Linux:
在mysql配置文件my.cnf中增加
log-slow-queries=/var/lib/mysql/slowquery.log (指定日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.log)
long_query_time=2 (记录超过的时间,默认为10s)
log-queries-not-using-indexes (log下来没有使用索引的query,可以根据情况决定是否开启)
log-long-format (如果设置了,所有没有使用索引的查询也将被记录)
Windows:
在my.ini的[mysqld]添加如下语句:
log-slow-queries = E:\web\mysql\log\mysqlslowquery.log
long_query_time = 2(其他参数如上)
2,查看方式
Linux:
使用mysql自带命令mysqldumpslow查看
常用命令
-s ORDER what to sort by (t, at, l, al, r, ar etc), 'at’ is default
-t NUM just show the top n queries
-g PATTERN grep: only consider stmts that include this string
eg:
s,是order的顺序,说明写的不够详细,俺用下来,包括看了代码,主要有 c,t,l,r和ac,at,al,ar,分别是按照query次数,时间,lock的时间和返回的记录数来排序,前面加了a的时倒序 -t,是top n的意思,即为返回前面多少条的数据 -g,后边可以写一个正则匹配模式,大小写不敏感的
mysqldumpslow -s c -t 20 host-slow.log
mysqldumpslow -s r -t 20 host-slow.log
上述命令可以看出访问次数最多的20个sql语句和返回记录集最多的20个sql。
mysqldumpslow -t 10 -s t -g “left join” host-slow.log这个是按照时间返回前10条里面含有左连接的sql语句。
mysql慢查询日志对于跟踪有问题的查询非常有用,可以分析出当前程序里有很耗费资源的sql语句,那如何打开mysql的慢查询日志记录呢?
其实打开mysql的慢查询日志很简单,只需要在mysql的配置文件里(windows系统是my.ini,linux系统是my.cnf)的[mysqld]下面加上如下代码:
log-slow-queries=/var/lib/mysql/slowquery.log
long_query_time=2
注:
log-slow-queries 设置把日志写在那里,为空的时候,系统会给慢查询日志赋予主机名,并被附加slow.log. /var/lib/mysql/slowquery.log为日志存放的文件的位置,一般这个目录要有mysql的运行帐号的可写权限,一般都将这个目录设置为mysql的数据存放目录
long_query_time=2中的2表示查询超过两秒才记录.
如果设置了参数log-long-format,那么所有没有使用索引的查询也将被记录。在文件my.cnf或my.ini中加入下面这一行可以记录这些查询
这是一个有用的日志。它对于性能的影响不大(假设所有查询都很快),并且强调了那些最需要注意的查询(丢失了索引或索引没有得到最佳应用)
# Time: 070927 8:08:52
# User@Host: root[root] @ [192.168.0.20]
# Query_time: 372 Lock_time: 136 Rows_sent: 152 Rows_examined: 263630
select id, name from manager where id in (66,10135);
这是慢查询日志中的一条,用了372秒,锁了136秒,返回152行,一共查了263630行
如果日志内容很多,用眼睛一条一条去看会累死,mysql自带了分析的工具,使用方法如下:
命令行下,进入mysql/bin目录,输入mysqldumpslow –help或--help可以看到这个工具的参数,主要有
Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]
Parse and summarize the MySQL slow query log. Options are
--verbose verbose
--debug debug
--help write this text to standard output
-v verbose
-d debug
-s ORDER what to sort by (t, at, l, al, r, ar etc), 'at' is default
-r reverse the sort order (largest last instead of first)
-t NUM just show the top n queries
-a don't abstract all numbers to N and strings to 'S'
-n NUM abstract numbers with at least n digits within names
-g PATTERN grep: only consider stmts that include this string
-h HOSTNAME hostname of db server for *-slow.log filename (can be wildcard),
default is '*', i.e. match all
-i NAME name of server instance (if using mysql.server startup scrīpt)
-l don't subtract lock time from total time
-s,是order的顺序,说明写的不够详细,俺用下来,包括看了代码,主要有
c,t,l,r和ac,at,al,ar,分别是按照query次数,时间,lock的时间和返回的记录数来排序,前面加了a的时倒叙
-t,是top n的意思,即为返回前面多少条的数据
-g,后边可以写一个正则匹配模式,大小写不敏感的
mysqldumpslow -s c -t 20 host-slow.log
mysqldumpslow -s r -t 20 host-slow.log
上述命令可以看出访问次数最多的20个sql语句和返回记录集最多的20个sql。
mysqldumpslow -t 10 -s t -g “left join” host-slow.log
这个是按照时间返回前10条里面含有左连接的sql语句。
Windows:
当你是第一次开启mysql的慢查询,会在你指定的目录下创建这个记录文件,本文就是mysqlslowquery.log,这个文件的内容大致如下(第一次开启MYSQL慢查询的情况下)
E:\web\mysql\bin\mysqld, Version: 5.4.3-beta-community-log (MySQL Community Server (GPL)). started with:
TCP Port: 3306, Named Pipe: (null)
Time Id Command Argument
可以通过如下的命令来查看慢查询的记录数:
mysql> show global status like ‘%slow%’;
+———————+——-+
| Variable_name | Value |
+———————+——-+
| Slow_launch_threads | 0 |
| Slow_queries | 0 |
+———————+——-+
来自:http://www.cnblogs.com/lavandachen/articles/1929537.html
long_query_time=2
连接数太多,如果是服务器或者数据库负载太高的异常,如果让程序继续,会有逻辑上的处理会有问题的,那得throw一下异常,然后捕获它,这说明数据库的架构需要进一步优化了,在高并发上处理有问题。
一直以来积累了很多对MySQL优化的心得和经验,计划通过写日志的方式一步一步写出来分享给大家。
MySQL优化的第一步应该做的就是排查问题,找出瓶颈,而通常情况下的瓶颈和问题都需要通过观察MySQL的运行情况来进行分析,《查看MySQL运行状况》这篇文章罗列了一些常用的查看MySQL运行信息的方式。
而对于大多数的程序员来说,最容易发现并解决的问题就是MySQL的慢查询或者没有利用索引的查询,所以这里主要给大家介绍如何利用官方的mysqldumpslow工具方便的查看这些信息。如何打开MySQL的慢查询,请点击《打开MySQL的慢查询记录》。
mysql slow log 是用来记录执行时间较长(超过long_query_time秒)的sql的一种日志工具.
启用 slow log
有两种启用方式:
1, 在my.cnf 里 通过 log-slow-queries[=file_name]
2, 在mysqld进程启动时,指定--log-slow-queries[=file_name]选项
mysqldumpslow命令
/usr/local/mysql/bin/mysqldumpslow -s c -t 10 /database/mysql/slow-log
这会输出记录次数最多的10条SQL语句,其中:
* -s, 是表示按照何种方式排序,c、t、l、r分别是按照记录次数、时间、查询时间、返回的记录数来排序,ac、at、al、ar,表示相应的倒叙;
* -t, 是top n的意思,即为返回前面多少条的数据;
* -g, 后边可以写一个正则匹配模式,大小写不敏感的;
比如
/path/mysqldumpslow -s r -t 10 /database/mysql/slow-log
得到返回记录集最多的10个查询。
/path/mysqldumpslow -s t -t 10 -g “left join” /database/mysql/slow-log
得到按照时间排序的前10条里面含有左连接的查询语句。
小结
使用mysqldumpslow命令可以非常明确的得到各种我们需要的查询语句,对MySQL查询语句的监控、分析、优化是MySQL优化的第一步,也是非常重要的一步。
————————————————————————————————————
mysql开启慢查询方法:
1,配置开启
Linux:
在mysql配置文件my.cnf中增加
log-slow-queries=/var/lib/mysql/slowquery.log (指定日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.log)
long_query_time=2 (记录超过的时间,默认为10s)
log-queries-not-using-indexes (log下来没有使用索引的query,可以根据情况决定是否开启)
log-long-format (如果设置了,所有没有使用索引的查询也将被记录)
Windows:
在my.ini的[mysqld]添加如下语句:
log-slow-queries = E:\web\mysql\log\mysqlslowquery.log
long_query_time = 2(其他参数如上)
2,查看方式
Linux:
使用mysql自带命令mysqldumpslow查看
常用命令
-s ORDER what to sort by (t, at, l, al, r, ar etc), 'at’ is default
-t NUM just show the top n queries
-g PATTERN grep: only consider stmts that include this string
eg:
s,是order的顺序,说明写的不够详细,俺用下来,包括看了代码,主要有 c,t,l,r和ac,at,al,ar,分别是按照query次数,时间,lock的时间和返回的记录数来排序,前面加了a的时倒序 -t,是top n的意思,即为返回前面多少条的数据 -g,后边可以写一个正则匹配模式,大小写不敏感的
mysqldumpslow -s c -t 20 host-slow.log
mysqldumpslow -s r -t 20 host-slow.log
上述命令可以看出访问次数最多的20个sql语句和返回记录集最多的20个sql。
mysqldumpslow -t 10 -s t -g “left join” host-slow.log这个是按照时间返回前10条里面含有左连接的sql语句。
mysql慢查询日志对于跟踪有问题的查询非常有用,可以分析出当前程序里有很耗费资源的sql语句,那如何打开mysql的慢查询日志记录呢?
其实打开mysql的慢查询日志很简单,只需要在mysql的配置文件里(windows系统是my.ini,linux系统是my.cnf)的[mysqld]下面加上如下代码:
log-slow-queries=/var/lib/mysql/slowquery.log
long_query_time=2
注:
log-slow-queries 设置把日志写在那里,为空的时候,系统会给慢查询日志赋予主机名,并被附加slow.log. /var/lib/mysql/slowquery.log为日志存放的文件的位置,一般这个目录要有mysql的运行帐号的可写权限,一般都将这个目录设置为mysql的数据存放目录
long_query_time=2中的2表示查询超过两秒才记录.
如果设置了参数log-long-format,那么所有没有使用索引的查询也将被记录。在文件my.cnf或my.ini中加入下面这一行可以记录这些查询
这是一个有用的日志。它对于性能的影响不大(假设所有查询都很快),并且强调了那些最需要注意的查询(丢失了索引或索引没有得到最佳应用)
# Time: 070927 8:08:52
# User@Host: root[root] @ [192.168.0.20]
# Query_time: 372 Lock_time: 136 Rows_sent: 152 Rows_examined: 263630
select id, name from manager where id in (66,10135);
这是慢查询日志中的一条,用了372秒,锁了136秒,返回152行,一共查了263630行
如果日志内容很多,用眼睛一条一条去看会累死,mysql自带了分析的工具,使用方法如下:
命令行下,进入mysql/bin目录,输入mysqldumpslow –help或--help可以看到这个工具的参数,主要有
Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]
Parse and summarize the MySQL slow query log. Options are
--verbose verbose
--debug debug
--help write this text to standard output
-v verbose
-d debug
-s ORDER what to sort by (t, at, l, al, r, ar etc), 'at' is default
-r reverse the sort order (largest last instead of first)
-t NUM just show the top n queries
-a don't abstract all numbers to N and strings to 'S'
-n NUM abstract numbers with at least n digits within names
-g PATTERN grep: only consider stmts that include this string
-h HOSTNAME hostname of db server for *-slow.log filename (can be wildcard),
default is '*', i.e. match all
-i NAME name of server instance (if using mysql.server startup scrīpt)
-l don't subtract lock time from total time
-s,是order的顺序,说明写的不够详细,俺用下来,包括看了代码,主要有
c,t,l,r和ac,at,al,ar,分别是按照query次数,时间,lock的时间和返回的记录数来排序,前面加了a的时倒叙
-t,是top n的意思,即为返回前面多少条的数据
-g,后边可以写一个正则匹配模式,大小写不敏感的
mysqldumpslow -s c -t 20 host-slow.log
mysqldumpslow -s r -t 20 host-slow.log
上述命令可以看出访问次数最多的20个sql语句和返回记录集最多的20个sql。
mysqldumpslow -t 10 -s t -g “left join” host-slow.log
这个是按照时间返回前10条里面含有左连接的sql语句。
Windows:
当你是第一次开启mysql的慢查询,会在你指定的目录下创建这个记录文件,本文就是mysqlslowquery.log,这个文件的内容大致如下(第一次开启MYSQL慢查询的情况下)
E:\web\mysql\bin\mysqld, Version: 5.4.3-beta-community-log (MySQL Community Server (GPL)). started with:
TCP Port: 3306, Named Pipe: (null)
Time Id Command Argument
可以通过如下的命令来查看慢查询的记录数:
mysql> show global status like ‘%slow%’;
+———————+——-+
| Variable_name | Value |
+———————+——-+
| Slow_launch_threads | 0 |
| Slow_queries | 0 |
+———————+——-+
来自:http://www.cnblogs.com/lavandachen/articles/1929537.html
<div class="head_swf">
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="900" height="181">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="/swf/menu.swf" />
<param name="quality" value="high" />
<param name="wmode" value="transparent" />
<embed src="/swf/menu.swf" width="900" height="181" quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" allowscriptaccess="sameDomain" type="application/x-shockwave-flash" wmode="transparent"></embed>
</object>
</div>
永久的数据库连接是指在您的脚本结束运行时不关闭的连接。当收到一个永久连接的请求时。PHP 将检查是否已经存在一个(前面已经开启的)相同的永久连接。如果存在,将直接使用这个连接;如果不存在,则建立一个新的连接。所谓“相同”的连接是指用相同的用户名和密码到相同主机的连接。
对 WEB 服务器的工作和分布负载没有完全理解的读者可能会错误地理解永久连接的作用。特别的,永久连接不会在相同的连接上为您提供建立“用户会话”的能力,也不提供有效建立事务的能力。实际上,从严格意义上来讲,永久连接不会给您提供任何非永久连接无法提供的特殊功能。阅读全文
对 WEB 服务器的工作和分布负载没有完全理解的读者可能会错误地理解永久连接的作用。特别的,永久连接不会在相同的连接上为您提供建立“用户会话”的能力,也不提供有效建立事务的能力。实际上,从严格意义上来讲,永久连接不会给您提供任何非永久连接无法提供的特殊功能。阅读全文
mysql有一个功能就是可以log下来运行的比较慢的sql语句,默认是没有这个log的,为了开启这个功能,
要修改my.cnf或者在mysql启动的时候加入一些参数。如果在my.cnf里面修改,需增加如下几行
long_query_time = 1
log-slow-queries = /var/youpath/slow.log
log-queries-not-using-indexes
long_query_time 是指执行超过多久的sql会被log下来,这里是1秒。
log-slow-queries 设置把日志写在那里,可以为空,系统会给一个缺省的文件host_name-slow.log,
log-queries-not-using-indexes 就是字面意思,log下来没有使用索引的query。
把上述参数打开,运行一段时间,就可以关掉了。
接下来就是分析了,这里的文件名字叫host-slow.log。
先mysqldumpslow –help以下,e它主要用的是
-s ORDER what to sort by (t, at, l, al, r, ar etc), ‘at’ is default
-t NUM just show the top n queries
-g PATTERN grep: only consider stmts that include this string
-s,是order的顺序,说明写的不够详细,主要有
c,t,l,r和ac,at,al,ar,分别是按照query次数,时间,lock的时间和返回的记录数来排序,前面加了a的时倒叙
-t,是top n的意思,即为返回前面多少条的数据
-g,后边可以写一个正则匹配模式,大小写不敏感的
mysqldumpslow -s c -t 20 host-slow.log
mysqldumpslow -s r -t 20 host-slow.log
上述命令可以看出访问次数最多的20个sql语句和返回记录集最多的20个sql。
mysqldumpslow -t 10 -s t -g “left join” host-slow.log
这个是按照时间返回前10条里面含有左连接的sql语句。
用了这个工具就可以查询出来那些sql语句是性能的瓶颈,进行优化,比如加索引,该应用的实现方式等。 ......
要修改my.cnf或者在mysql启动的时候加入一些参数。如果在my.cnf里面修改,需增加如下几行
long_query_time = 1
log-slow-queries = /var/youpath/slow.log
log-queries-not-using-indexes
long_query_time 是指执行超过多久的sql会被log下来,这里是1秒。
log-slow-queries 设置把日志写在那里,可以为空,系统会给一个缺省的文件host_name-slow.log,
log-queries-not-using-indexes 就是字面意思,log下来没有使用索引的query。
把上述参数打开,运行一段时间,就可以关掉了。
接下来就是分析了,这里的文件名字叫host-slow.log。
先mysqldumpslow –help以下,e它主要用的是
-s ORDER what to sort by (t, at, l, al, r, ar etc), ‘at’ is default
-t NUM just show the top n queries
-g PATTERN grep: only consider stmts that include this string
-s,是order的顺序,说明写的不够详细,主要有
c,t,l,r和ac,at,al,ar,分别是按照query次数,时间,lock的时间和返回的记录数来排序,前面加了a的时倒叙
-t,是top n的意思,即为返回前面多少条的数据
-g,后边可以写一个正则匹配模式,大小写不敏感的
mysqldumpslow -s c -t 20 host-slow.log
mysqldumpslow -s r -t 20 host-slow.log
上述命令可以看出访问次数最多的20个sql语句和返回记录集最多的20个sql。
mysqldumpslow -t 10 -s t -g “left join” host-slow.log
这个是按照时间返回前10条里面含有左连接的sql语句。
用了这个工具就可以查询出来那些sql语句是性能的瓶颈,进行优化,比如加索引,该应用的实现方式等。 ......
/etc/my.cnf
#skip-grant-tables=on
update mysql.user set authentication_string=password('MyNewPass') where user='root'; #成功
select host,user,authentication_string from mysql.user;
+-----------+-----------+-------------------------------------------+
| host | user | authentication_string |
+-----------+-----------+-------------------------------------------+
| localhost | root | *xxx |
| localhost | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| 127.0.0.1 | root | *xxx |
+-----------+-----------+-------------------------------------------+
mysql db_eladmin < /tmp/db_eladmin.sql
在打开skip-grant-tables后,这些语句在mysql-5.7基本上用不上了:
mysql> show grants;
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('Asdfjkl;711');
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
mysql修改root密码:
cat /root/.my.cnf
[client]
user=root
password=111111
问题一:Linux下MySQL 的root的密码忘记的解决办法加上 --skip-grant-tables, 重新设置密码:
重新正常启动提示并解决办法如下,改密码为一样还是不行的登录不了 了,这块最新的版本可能是作了安全防范吧:
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql> alter user 'root'@'localhost' identified by 'mysql';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> exitBye
再次提示修改密码和原密码一致进不了了怎么办?出现:
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
mysql> GRANT ALL PRIVILEGES ON *.* TO IDENTIFIED BY '123' WITH GRANT OPTION;
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
这个时候我们只需要flush privileges 一下,在添加用户就OK了,
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
alter user 'root'@'localhost' identified by 'mysql';
ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost',出现:MYSQL ERROR 1396 (HY000) 错误的解决办法 http://blog.sina.com.cn/s/blog_439f80c40100yoln.html
ERROR 1396 (HY000): Operation CREATE USER failed for 'jack'@'localhost',惹毛我了,我直接从其它机器上拷贝一个db目录带mysql表的过来,O了:scp -r mysql root@10.44.150.187:/data/.
[root@iZ25z0ugwgtZ data]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.11-log MySQL Community Server (GPL)
localhost能连接127.0.0.1不能连接的授权命令。
Warning: mysqli_connect(): (HY000/1130): Host '127.0.0.1' is not allowed to connect to this MySQL server
mysql> grant all privileges on jackX_mysql.* to jackX@"127.0.0.1" identified by "jackX2016";
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
[root@iZ25z0ugwgtZ config]# mysql -h127.0.0.1 -ujackX -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.7.11-log MySQL Community Server (GPL)
mysql> \q
Bye
——————————————————————————————————————————————————————————
这样的:
一、RPM包的安装方式:
1.关闭MySQL服务
/etc/init.d/mysqld stop
2.修改MySQL的启动文件
vi /etc/init.d/mysqld
找到Start(){ \\大概在43行左右
让后在下行加入
/usr/bin/mysqld_safe --skip-grant-tables --datadir="$datadir" --socket="$socketfile" --log-error="$errlogfile" --pid-file="$mypidfile
其中加入--skip-grant-tables的意思是启动MySQL服务的时候跳 过权限表认证。启动后,连接到MySQL的root不需要口令
3.重新启动MySQL服务
/etc/init.d/mysqld start
4.修改root用户密码
#mysql
mysql>update mysql.user set password=password('新密码')
->where user=root;
mysql> flush privileges;
mysql> quit
5.把/etc/init.d/mysqld 改回原状重新启动mysql 就可以使用新密码登陆了。
6.重新启动mysql 就可以使用新密码登陆了。
二、如果是源代码编译安装的话
1.stop数据库
service mysqld stop
2.找到源代码编译安装的路径我的是/usr/local/mysql
#cd /usr/local/mysql
#bin/mysqld_safe --skip-grant-tables &
3.启动之后就可以不需要密码进入mysql了
#mysql
mysql>use mysql;
mysql>update user set password=password('new_password')
->where user='root';
mysql>flush privileges;
4.重启mysql,就可以用新密码登陆了。
其实最主要的就是在启动的时候要加上--skip-grant-tables 这样就可以实现无密码登陆了。
祝大家好运!!!
摘自:http://blog.chinaunix.net/uid-23397996-id-115499.html
问题二:相关直接修改Mysql的密码问题答疑
问:password=password("new_pass") 等号后为什么要加password?
答:后面那个password应该是个加密函数,用来加密你输入的密码
-------------MYSQL安装问题无密码,如何添加密码?---------------
没有密码为MYSQL加密码:
mysql -uroot -p
回车
提示输入密码,为空回车
update mysql.user set password=PASSWORD('122198') where user='root';
刷新权限表,输入如下命令
flush privileges;
退出
quit
------------------------实践如下:---------------------------------------------------------
mysql> update mysql.user set password=PASSWORD('WXXXXX5v') where user='root';
Query OK, 4 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.06 sec)
MYSQL 修改root密码命令
------------------------------------------------------------------------------------------------
cmd下切换到 mysql 安装目录
例
d:/mysql/bin
前提:mysql用户root密码为空.
输入 mysql -u root mysql
mysql> 状态下输入 update user set password=password('新密码') where user='root';
回显
Query OK, 0 rows affected (0.00 sec)
Rows matched: 2 Changed: 0 Warnings: 0
mysql> 状态下输入 FLUSH PRIVILEGES;
回显
Query OK, 0 rows affected (0.00 sec)
mysql> 状态下输入 quit
退出 sql
注意每个命令后都要加上一个分号 ";"
mysql 才开始执行该行命令
而第二个指令会让已载入记忆体的 mysql 系统资料库更新
重起 mysql .
在更新 root 密码後,日後要与 MySQL 连线的方法为:
mysql -uroot -p新密码
==================================================
忘记mysql 的root 密码:
先确认已经杀掉mysqld 进程了,然后执行这个
/usr/bin/safe_mysqld --skip-grant-tables &
再这样登录
mysql -h 192.168.1.2 -u root
上边的192.168.1.2 是cloud 的mysqld 运行机器,你换成自己的,这样登录上
去,就可以修改密码了。
修改密码
1.mysql -h hostname –u root 命令登录到mysqld server 用grant 命令改变口令:
grant all privileges on DBNAME.* to USERNAME@localhost identified by 'PASSWORD'
2. mysqladmin -u 用户名-p 旧密码password 新密码
例1:给root 加个密码ab12。首先在DOS 下进入目录mysqlbin,然后键入
以下命令
mysqladmin -uroot password ab12
注:因为开始时root 没有密码,所以-p 旧密码一项就可以省略了。
2、例2:再将root 的密码改为djg345。
mysqladmin –u root -pab12 password djg345 (注意-p 不要和后面的密码分
开写,要写在一起)
3.
use mysql; update user set password =password('yourpass') where user='r
oot'
4. 载入权限表: `mysqladmin -h hostname flush-privileges' ,或者使
用SQL 命令`FLUSH PRIVILEGES'。(当然,在这里,你也可以重启mysqld。)
mysql 的建库,添加数据方法:
mysqi –u root
mysql>create database ttt;
mysql>source 1.txt
mysql>load data local infile "2.txt" into table board;
1.txt 内容:
CREATE TABLE board (
boardid int(11) NOT NULL auto_increment,
boardname char(255),
PRIMARY KEY (boardid)
); ......
-------------------------------------------------------------------------------------------------------------
1. 使用phpmyadmin,这是最简单的了,修改mysql库的user表,不过别忘了使用PASSWORD函数。
2. 使用mysqladmin, mysqladmin -u root -p password mypasswd
3. mysql> REPLACE INTO mysql.user (Host,User,Password) VALUES('%','username',PASSWORD('password'));
mysql> FLUSH PRIVILEGES
4. mysql> SET PASSWORD FORusername@"%" = PASSWORD('password');
这里的username是要修改的用户名称。
5. mysql> GRANT USAGE _disibledevent='mailto:username@"%'>username@"%" IDENTIFIED BY 'password';
这里的username是要修改的用户名称。
最后找到了修改遗失的MySQL的ROOT用户密码,嘿嘿好使了
如果忘记了 MySQL 的 root 密码,可以用以下方法重新设置:
1. KILL掉系统里的MySQL进程;
2. 用以下命令启动MySQL,以不检查权限的方式启动;
mysqld_safe -skip-grant-tables &
3. 然后用空密码方式使用root用户登录 MySQL;
mysql -u root
4. 修改root用户的密码;
mysql> update mysql.user set password=PASSWORD('新密码') where User='root';
mysql> flush privileges;
mysql> quit
5. 重新启动MySQL,就可以使用新密码登录了。
添加
可以设置同一个用户在不同的ip限定下,不同密码来访问,如:root,可以在192.168.38.70上访问:
也可以在其他机器上访问:root,可以在192.168.38.30上访问:
就是统一用户,但授权访问密码可以不同,也可以相同,但IP段不同。
#skip-grant-tables=on
update mysql.user set authentication_string=password('MyNewPass') where user='root'; #成功
select host,user,authentication_string from mysql.user;
+-----------+-----------+-------------------------------------------+
| host | user | authentication_string |
+-----------+-----------+-------------------------------------------+
| localhost | root | *xxx |
| localhost | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| 127.0.0.1 | root | *xxx |
+-----------+-----------+-------------------------------------------+
mysql db_eladmin < /tmp/db_eladmin.sql
在打开skip-grant-tables后,这些语句在mysql-5.7基本上用不上了:
mysql> show grants;
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('Asdfjkl;711');
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
mysql修改root密码:
cat /root/.my.cnf
[client]
user=root
password=111111
问题一:Linux下MySQL 的root的密码忘记的解决办法加上 --skip-grant-tables, 重新设置密码:
重新正常启动提示并解决办法如下,改密码为一样还是不行的登录不了 了,这块最新的版本可能是作了安全防范吧:
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql> alter user 'root'@'localhost' identified by 'mysql';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> exitBye
再次提示修改密码和原密码一致进不了了怎么办?出现:
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
mysql> GRANT ALL PRIVILEGES ON *.* TO IDENTIFIED BY '123' WITH GRANT OPTION;
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
这个时候我们只需要flush privileges 一下,在添加用户就OK了,
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
alter user 'root'@'localhost' identified by 'mysql';
ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost',出现:MYSQL ERROR 1396 (HY000) 错误的解决办法 http://blog.sina.com.cn/s/blog_439f80c40100yoln.html
ERROR 1396 (HY000): Operation CREATE USER failed for 'jack'@'localhost',惹毛我了,我直接从其它机器上拷贝一个db目录带mysql表的过来,O了:scp -r mysql root@10.44.150.187:/data/.
[root@iZ25z0ugwgtZ data]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.11-log MySQL Community Server (GPL)
localhost能连接127.0.0.1不能连接的授权命令。
Warning: mysqli_connect(): (HY000/1130): Host '127.0.0.1' is not allowed to connect to this MySQL server
mysql> grant all privileges on jackX_mysql.* to jackX@"127.0.0.1" identified by "jackX2016";
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
[root@iZ25z0ugwgtZ config]# mysql -h127.0.0.1 -ujackX -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.7.11-log MySQL Community Server (GPL)
mysql> \q
Bye
——————————————————————————————————————————————————————————
这样的:
一、RPM包的安装方式:
1.关闭MySQL服务
/etc/init.d/mysqld stop
2.修改MySQL的启动文件
vi /etc/init.d/mysqld
找到Start(){ \\大概在43行左右
让后在下行加入
/usr/bin/mysqld_safe --skip-grant-tables --datadir="$datadir" --socket="$socketfile" --log-error="$errlogfile" --pid-file="$mypidfile
其中加入--skip-grant-tables的意思是启动MySQL服务的时候跳 过权限表认证。启动后,连接到MySQL的root不需要口令
3.重新启动MySQL服务
/etc/init.d/mysqld start
4.修改root用户密码
#mysql
mysql>update mysql.user set password=password('新密码')
->where user=root;
mysql> flush privileges;
mysql> quit
5.把/etc/init.d/mysqld 改回原状重新启动mysql 就可以使用新密码登陆了。
6.重新启动mysql 就可以使用新密码登陆了。
二、如果是源代码编译安装的话
1.stop数据库
service mysqld stop
2.找到源代码编译安装的路径我的是/usr/local/mysql
#cd /usr/local/mysql
#bin/mysqld_safe --skip-grant-tables &
3.启动之后就可以不需要密码进入mysql了
#mysql
mysql>use mysql;
mysql>update user set password=password('new_password')
->where user='root';
mysql>flush privileges;
4.重启mysql,就可以用新密码登陆了。
其实最主要的就是在启动的时候要加上--skip-grant-tables 这样就可以实现无密码登陆了。
祝大家好运!!!
摘自:http://blog.chinaunix.net/uid-23397996-id-115499.html
问题二:相关直接修改Mysql的密码问题答疑
问:password=password("new_pass") 等号后为什么要加password?
答:后面那个password应该是个加密函数,用来加密你输入的密码
-------------MYSQL安装问题无密码,如何添加密码?---------------
没有密码为MYSQL加密码:
mysql -uroot -p
回车
提示输入密码,为空回车
update mysql.user set password=PASSWORD('122198') where user='root';
刷新权限表,输入如下命令
flush privileges;
退出
quit
------------------------实践如下:---------------------------------------------------------
mysql> update mysql.user set password=PASSWORD('WXXXXX5v') where user='root';
Query OK, 4 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.06 sec)
MYSQL 修改root密码命令
------------------------------------------------------------------------------------------------
cmd下切换到 mysql 安装目录
例
d:/mysql/bin
前提:mysql用户root密码为空.
输入 mysql -u root mysql
mysql> 状态下输入 update user set password=password('新密码') where user='root';
回显
Query OK, 0 rows affected (0.00 sec)
Rows matched: 2 Changed: 0 Warnings: 0
mysql> 状态下输入 FLUSH PRIVILEGES;
回显
Query OK, 0 rows affected (0.00 sec)
mysql> 状态下输入 quit
退出 sql
注意每个命令后都要加上一个分号 ";"
mysql 才开始执行该行命令
而第二个指令会让已载入记忆体的 mysql 系统资料库更新
重起 mysql .
在更新 root 密码後,日後要与 MySQL 连线的方法为:
mysql -uroot -p新密码
==================================================
忘记mysql 的root 密码:
先确认已经杀掉mysqld 进程了,然后执行这个
/usr/bin/safe_mysqld --skip-grant-tables &
再这样登录
mysql -h 192.168.1.2 -u root
上边的192.168.1.2 是cloud 的mysqld 运行机器,你换成自己的,这样登录上
去,就可以修改密码了。
修改密码
1.mysql -h hostname –u root 命令登录到mysqld server 用grant 命令改变口令:
grant all privileges on DBNAME.* to USERNAME@localhost identified by 'PASSWORD'
2. mysqladmin -u 用户名-p 旧密码password 新密码
例1:给root 加个密码ab12。首先在DOS 下进入目录mysqlbin,然后键入
以下命令
mysqladmin -uroot password ab12
注:因为开始时root 没有密码,所以-p 旧密码一项就可以省略了。
2、例2:再将root 的密码改为djg345。
mysqladmin –u root -pab12 password djg345 (注意-p 不要和后面的密码分
开写,要写在一起)
3.
use mysql; update user set password =password('yourpass') where user='r
oot'
4. 载入权限表: `mysqladmin -h hostname flush-privileges' ,或者使
用SQL 命令`FLUSH PRIVILEGES'。(当然,在这里,你也可以重启mysqld。)
mysql 的建库,添加数据方法:
mysqi –u root
mysql>create database ttt;
mysql>source 1.txt
mysql>load data local infile "2.txt" into table board;
1.txt 内容:
CREATE TABLE board (
boardid int(11) NOT NULL auto_increment,
boardname char(255),
PRIMARY KEY (boardid)
); ......
-------------------------------------------------------------------------------------------------------------
1. 使用phpmyadmin,这是最简单的了,修改mysql库的user表,不过别忘了使用PASSWORD函数。
2. 使用mysqladmin, mysqladmin -u root -p password mypasswd
3. mysql> REPLACE INTO mysql.user (Host,User,Password) VALUES('%','username',PASSWORD('password'));
mysql> FLUSH PRIVILEGES
4. mysql> SET PASSWORD FORusername@"%" = PASSWORD('password');
这里的username是要修改的用户名称。
5. mysql> GRANT USAGE _disibledevent='mailto:username@"%'>username@"%" IDENTIFIED BY 'password';
这里的username是要修改的用户名称。
最后找到了修改遗失的MySQL的ROOT用户密码,嘿嘿好使了
如果忘记了 MySQL 的 root 密码,可以用以下方法重新设置:
1. KILL掉系统里的MySQL进程;
2. 用以下命令启动MySQL,以不检查权限的方式启动;
mysqld_safe -skip-grant-tables &
3. 然后用空密码方式使用root用户登录 MySQL;
mysql -u root
4. 修改root用户的密码;
mysql> update mysql.user set password=PASSWORD('新密码') where User='root';
mysql> flush privileges;
mysql> quit
5. 重新启动MySQL,就可以使用新密码登录了。
添加
可以设置同一个用户在不同的ip限定下,不同密码来访问,如:root,可以在192.168.38.70上访问:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.38.70' IDENTIFIED BY 'ads_root';
FLUSH PRIVILEGES;
FLUSH PRIVILEGES;
也可以在其他机器上访问:root,可以在192.168.38.30上访问:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.38.30' IDENTIFIED BY 'ads_root';
FLUSH PRIVILEGES;
FLUSH PRIVILEGES;
就是统一用户,但授权访问密码可以不同,也可以相同,但IP段不同。
一、MYSQL存储引擎大全:
·MyISAM:默认的MySQL插件式存储引擎,它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。注意,通过更改STORAGE_ENGINE配置变量,能够方便地更改MySQL服务器的默认存储引擎。
·InnoDB:用于事务处理应用程序,具有众多特性,包括ACID事务支持。
·BDB:可替代InnoDB的事务引擎,支持COMMIT、ROLLBACK和其他事务特性。
·Memory:将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问。
·Merge:允许MySQL
DBA或开发人员将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用它们。对于诸如数据仓储等VLDB环境十分适合。
·Archive:为大量很少引用的历史、归档、或安全审计信息的存储和检索提供了完美的解决方案。
·Federated:能够将多个分离的MySQL服务器链接起来,从多个物理服务器创建一个逻辑数据库。十分适合于分布式环境或数据集市环境。
·Cluster/NDB:MySQL的簇式数据库引擎,尤其适合于具有高性能查找要求的应用程序,这类查找需求还要求具有最高的正常工作时间和可用性。
·Other:其他存储引擎包括CSV(引用由逗号隔开的用作数据库表的文件),Blackhole(用于临时禁止对数据库的应用程序输入),以及Example引擎(可为快速创建定制的插件式存储引擎提供帮助)。
请记住,对于整个服务器或方案,你并不一定要使用相同的存储引擎,你可以为方案中的每个表使用不同的存储引擎,这点很重要。
二、重点比较MySQL的InnoDB和MyISAM
(1)、InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定。
高级处理:
MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。
执行速度:
MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快。
移值性:
MyISAM类型的二进制数据文件可以在不同操作系统中迁移。也就是可以直接从Windows系统拷贝到linux系统中使用。
(2)、MyIASM是IASM表的新版本,有如下扩展:
1、二进制层次的可移植性。
2、NULL列索引。
3、对变长行比ISAM表有更少的碎片。
4、支持大文件。
5、更好的索引压缩。
6、更好的键码统计分布。
7、更好和更快的auto_increment处理。
InnoDB 是 MySQL 上第一个提供外键约束的引擎,除了提供事务处理外,InnoDB
还支持行锁,提供和 Oracle 一样的一致性的不加锁读取,能增加并发读的用户数?......
·MyISAM:默认的MySQL插件式存储引擎,它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。注意,通过更改STORAGE_ENGINE配置变量,能够方便地更改MySQL服务器的默认存储引擎。
·InnoDB:用于事务处理应用程序,具有众多特性,包括ACID事务支持。
·BDB:可替代InnoDB的事务引擎,支持COMMIT、ROLLBACK和其他事务特性。
·Memory:将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问。
·Merge:允许MySQL
DBA或开发人员将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用它们。对于诸如数据仓储等VLDB环境十分适合。
·Archive:为大量很少引用的历史、归档、或安全审计信息的存储和检索提供了完美的解决方案。
·Federated:能够将多个分离的MySQL服务器链接起来,从多个物理服务器创建一个逻辑数据库。十分适合于分布式环境或数据集市环境。
·Cluster/NDB:MySQL的簇式数据库引擎,尤其适合于具有高性能查找要求的应用程序,这类查找需求还要求具有最高的正常工作时间和可用性。
·Other:其他存储引擎包括CSV(引用由逗号隔开的用作数据库表的文件),Blackhole(用于临时禁止对数据库的应用程序输入),以及Example引擎(可为快速创建定制的插件式存储引擎提供帮助)。
请记住,对于整个服务器或方案,你并不一定要使用相同的存储引擎,你可以为方案中的每个表使用不同的存储引擎,这点很重要。
二、重点比较MySQL的InnoDB和MyISAM
(1)、InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定。
高级处理:
MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。
执行速度:
MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快。
移值性:
MyISAM类型的二进制数据文件可以在不同操作系统中迁移。也就是可以直接从Windows系统拷贝到linux系统中使用。
(2)、MyIASM是IASM表的新版本,有如下扩展:
1、二进制层次的可移植性。
2、NULL列索引。
3、对变长行比ISAM表有更少的碎片。
4、支持大文件。
5、更好的索引压缩。
6、更好的键码统计分布。
7、更好和更快的auto_increment处理。
InnoDB 是 MySQL 上第一个提供外键约束的引擎,除了提供事务处理外,InnoDB
还支持行锁,提供和 Oracle 一样的一致性的不加锁读取,能增加并发读的用户数?......
一、MYSQL存储引擎大全:
·MyISAM:默认的MySQL插件式存储引擎,它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。注意,通过更改STORAGE_ENGINE配置变量,能够方便地更改MySQL服务器的默认存储引擎。
·InnoDB:用于事务处理应用程序,具有众多特性,包括ACID事务支持。
·BDB:可替代InnoDB的事务引擎,支持COMMIT、ROLLBACK和其他事务特性。
·Memory:将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问。
·Merge:允许MySQL
DBA或开发人员将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用它们。对于诸如数据仓储等VLDB环境十分适合。
·Archive:为大量很少引用的历史、归档、或安全审计信息的存储和检索提供了完美的解决方案。
·Federated:能够将多个分离的MySQL服务器链接起来,从多个物理服务器创建一个逻辑数据库。十分适合于分布式环境或数据集市环境。
·Cluster/NDB:MySQL的簇式数据库引擎,尤其适合于具有高性能查找要求的应用程序,这类查找需求还要求具有最高的正常工作时间和可用性。
·Other:其他存储引擎包括CSV(引用由逗号隔开的用作数据库表的文件),Blackhole(用于临时禁止对数据库的应用程序输入),以及Example引擎(可为快速创建定制的插件式存储引擎提供帮助)。
请记住,对于整个服务器或方案,你并不一定要使用相同的存储引擎,你可以为方案中的每个表使用不同的存储引擎,这点很重要。
二、重点比较MySQL的InnoDB和MyISAM
(1)、InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定。
高级处理:
MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。
执行速度:
MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快。
移值性:
MyISAM类型的二进制数据文件可以在不同操作系统中迁移。也就是可以直接从Windows系统拷贝到linux系统中使用。
(2)、MyIASM是IASM表的新版本,有如下扩展:
1、二进制层次的可移植性。
2、NULL列索引。
3、对变长行比ISAM表有更少的碎片。
4、支持大文件。
5、更好的索引压缩。
6、更好的键码统计分布。
7、更好和更快的auto_increment处理。
InnoDB 是 MySQL 上第一个提供外键约束的引擎,除了提供事务处理外,InnoDB
还支持行锁,提供和 Oracle 一样的一致性的不加锁读取,能增加并发读的用户数?......
·MyISAM:默认的MySQL插件式存储引擎,它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。注意,通过更改STORAGE_ENGINE配置变量,能够方便地更改MySQL服务器的默认存储引擎。
·InnoDB:用于事务处理应用程序,具有众多特性,包括ACID事务支持。
·BDB:可替代InnoDB的事务引擎,支持COMMIT、ROLLBACK和其他事务特性。
·Memory:将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问。
·Merge:允许MySQL
DBA或开发人员将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用它们。对于诸如数据仓储等VLDB环境十分适合。
·Archive:为大量很少引用的历史、归档、或安全审计信息的存储和检索提供了完美的解决方案。
·Federated:能够将多个分离的MySQL服务器链接起来,从多个物理服务器创建一个逻辑数据库。十分适合于分布式环境或数据集市环境。
·Cluster/NDB:MySQL的簇式数据库引擎,尤其适合于具有高性能查找要求的应用程序,这类查找需求还要求具有最高的正常工作时间和可用性。
·Other:其他存储引擎包括CSV(引用由逗号隔开的用作数据库表的文件),Blackhole(用于临时禁止对数据库的应用程序输入),以及Example引擎(可为快速创建定制的插件式存储引擎提供帮助)。
请记住,对于整个服务器或方案,你并不一定要使用相同的存储引擎,你可以为方案中的每个表使用不同的存储引擎,这点很重要。
二、重点比较MySQL的InnoDB和MyISAM
(1)、InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定。
高级处理:
MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。
执行速度:
MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快。
移值性:
MyISAM类型的二进制数据文件可以在不同操作系统中迁移。也就是可以直接从Windows系统拷贝到linux系统中使用。
(2)、MyIASM是IASM表的新版本,有如下扩展:
1、二进制层次的可移植性。
2、NULL列索引。
3、对变长行比ISAM表有更少的碎片。
4、支持大文件。
5、更好的索引压缩。
6、更好的键码统计分布。
7、更好和更快的auto_increment处理。
InnoDB 是 MySQL 上第一个提供外键约束的引擎,除了提供事务处理外,InnoDB
还支持行锁,提供和 Oracle 一样的一致性的不加锁读取,能增加并发读的用户数?......
mysql里最常用的日志有4种,分别是:错误日志,二进制日志,查询日志以及满查询日志. 1.错误日志会记录当mysql启动和关闭以及运行中的错误信息,可以使用 --log-error[=file_name]来指定错误日志存放文件.当mysql server异常的时候应该首先查看该日志.其实里面也没什么,我英语四级没过,配上词霸目前为止还没有碰到解决不了的问题,呵呵.默认是存放在datadir里的主机名.err. 2.二进制日志存放了所有的ddl和dml操作记录 --log-bin[=file_name]选项启动时,mysqld写入包含所有更新数据的SQL命令的日志文件。如果未给出file_name值, 默认名为-bin后面所跟的主机名。二进制日志并不可以直接查看,需要客户端工具mysqlbinlog log-file 查看 mysqld在每个二进制日志名后面添加一个数字扩展名。每次你启动服务器或刷新日志时该数字则增加。如果当前的日志大小达到max_binlog_size,还会自动创建新的二进制日志。如果你正使用大的事务,二进制日志还会超过max_binlog_size:事务全写入一个二进制日志中,绝对不要写入不同的二进制日志中。 为了能够知道还使用了哪个不同的二进制日志文件,mysqld还创建一个二进制日志索引文件,包含所有使用的二进制日志文件的文件名。默认情况下与二进制日志文件的文件名相同,扩展名为'.index'。你可以用--log-bin-index[=file_name]选项更改二进制日志索引文件的文件名。当mysqld在运行时,不应手动编辑该文件;如果这样做将会使mysqld变得混乱。 可以用以下语句删除二进制日志 reset master;#删除所有二进制日志 purge master logs to 'mysql-bin.******';#删除******编号之前的二进制日志 purge master logs before 'yyyy-mm-dd hh24:mm:ss'#删除指定日期之前的日志 还可以设置--expire_logs_days=*;#设置日志过期天数,过期自动删除. --binlog-do-db=db_name#指定数据库开启二进制日志,类似的有ignore. innodb有 --innodb-safe-binlog以及--sync-binlog=n(每写n次日志同步磁盘) 可以通过set sql_log_bin=0禁用二进制日志. 3.查询日志,记录所有查询语句,二进制日志不记录之查询的语句 --log[=file_name]可以启动查询日志,默认是在datadir里的主机名.log,由于会消耗大量磁盘io资源,一般情况下建议禁用. 4.慢查询日志 --log-slow-queries[=file_name]默认是在datadir下的主机名.slow.log --log-short-format#忽略掉不使用索引的慢查询 --log-slow-admin-statements#将记录慢管理语句 set long_query_time=n;#设定慢查询的时间,单位为秒. 建议使用客户端工具mysqldumpslow来查看满查询日志.
环境:两台服务器IP:192.168.30.57\192.168.30.58
1、下载mysql-5.0.86-linux-i686-glibc23.tar.gz 到http://dev.mysql.com/downloads/mysql/5.0.html#linux下载
2、解压 tar -zxvf
mysql-5.0.86-linux-i686-glibc23.tar.gz
3、创建链接 ln -s
mysql-5.0.86-linux-i686-glibc23
mysql
4、进入mysql
目录下 cd mysql
5:新建 mysql 用户组
groupadd mysql
6:新建 mysql用户并属于mysql用户组
useradd -g mysql mysql
7:执行安装脚本:
scripts/mysql_install_db --user=mysql
8:改变属组 (注意小数点)
chown -R root . (注意小数点)
9:改变数据属组
chown -R mysql data
10:输入命令 chgrp -R mysql . (注意小数点)
11、拷贝配置文件 cp supports-files/my-lagre.cnf /etc/my.cnf
12、启动mysql阅读全文
1、下载mysql-5.0.86-linux-i686-glibc23.tar.gz 到http://dev.mysql.com/downloads/mysql/5.0.html#linux下载
2、解压 tar -zxvf
mysql-5.0.86-linux-i686-glibc23.tar.gz
3、创建链接 ln -s
mysql-5.0.86-linux-i686-glibc23
mysql
4、进入mysql
目录下 cd mysql
5:新建 mysql 用户组
groupadd mysql
6:新建 mysql用户并属于mysql用户组
useradd -g mysql mysql
7:执行安装脚本:
scripts/mysql_install_db --user=mysql
8:改变属组 (注意小数点)
chown -R root . (注意小数点)
9:改变数据属组
chown -R mysql data
10:输入命令 chgrp -R mysql . (注意小数点)
11、拷贝配置文件 cp supports-files/my-lagre.cnf /etc/my.cnf
12、启动mysql阅读全文
#include <stdio.h>
#include <windows.h>
#include <mysql.h>
#define host "localhost"
#define username "root"
#define password "123"
#define database "oa"
MYSQL *conn;
int main()
{
MYSQL_RES *res_set;
MYSQL_ROW row;
unsigned int i,ret;
FILE *fp;
MYSQL_FIELD *field;
unsigned int num_fields;
conn = mysql_init(NULL);
ret = mysql_options(conn, MYSQL_SET_CHARSET_NAME, "gbk");
mysql_real_connect(conn,host,username,password,database,0,NULL,0);
fp = fopen ( "t_sys_power.out","w");
fprintf(fp,"char set %s\n", mysql_character_set_name(conn));
mysql_query(conn,"SELECT * from t_sys_power ");//WHERE a1='abc'");
res_set = mysql_store_result(conn);
while((field = mysql_fetch_field(res_set)))
{
printf("field name %s\n", field->name);
}
num_fields = mysql_num_fields(res_set);
for(i = 0; i < num_fields; i++)
{
field = mysql_fetch_field_direct(res_set, i);
printf("Field %u is %s\n", i, field->name);
}
while ((row = mysql_fetch_row(res_set)) != NULL)
{
for (i=0; i<mysql_num_fields(res_set); i++)
{
fprintf(fp,"%s\n",row[i] != NULL ? row[i] : "NULL");
}
}
mysql_close(conn);
fclose(fp);
return 0;
}
#include <windows.h>
#include <mysql.h>
#define host "localhost"
#define username "root"
#define password "123"
#define database "oa"
MYSQL *conn;
int main()
{
MYSQL_RES *res_set;
MYSQL_ROW row;
unsigned int i,ret;
FILE *fp;
MYSQL_FIELD *field;
unsigned int num_fields;
conn = mysql_init(NULL);
ret = mysql_options(conn, MYSQL_SET_CHARSET_NAME, "gbk");
mysql_real_connect(conn,host,username,password,database,0,NULL,0);
fp = fopen ( "t_sys_power.out","w");
fprintf(fp,"char set %s\n", mysql_character_set_name(conn));
mysql_query(conn,"SELECT * from t_sys_power ");//WHERE a1='abc'");
res_set = mysql_store_result(conn);
while((field = mysql_fetch_field(res_set)))
{
printf("field name %s\n", field->name);
}
num_fields = mysql_num_fields(res_set);
for(i = 0; i < num_fields; i++)
{
field = mysql_fetch_field_direct(res_set, i);
printf("Field %u is %s\n", i, field->name);
}
while ((row = mysql_fetch_row(res_set)) != NULL)
{
for (i=0; i<mysql_num_fields(res_set); i++)
{
fprintf(fp,"%s\n",row[i] != NULL ? row[i] : "NULL");
}
}
mysql_close(conn);
fclose(fp);
return 0;
}
//选择->目录:include:C:\PROGRAM FILES\MYSQL\MYSQL SERVER 5.0\INCLUDE(compiler option,directories,c++include)
//选择->目录:lib :C:\PROGRAM FILES\MYSQL\MYSQL SERVER 5.0\LIB\OPT(compiler option,directories,libraies)
//工程:设置:link:libmysql.lib(update下载libmysql,安装之后,project,projcect option,parameters,linker中输入-lmysql
)
//libmysql.dll拷贝到可执行文件相同目录,或者系统目录下 ......
来源:http://www.jb51.net/article/15671_2.htm
很多人首先会想从服务器缓存方面着手对程序进行优化,许多不同的服务器缓存方式都有他们自己的特点,像我曾经参与的一些项目中,根据缓存的命中率不同使用过 Com+/Enterprise Libiary Caching/Windows服务,静态文件等方式的服务器端缓存和 HTTP Compression技术,但客户端缓存往往却被人们忽略了,即使服务器的缓存让你的页面访问起来非常地快,但她依然需要依赖浏览器下载并输出,而当你加入客户端缓存时,会给你带来非常多的好处.因为她可以对站点中访问最频繁的页进行缓存充分地提高 Web 服务器的吞吐量(通常以每秒的请求数计算)以提升应用程序性能和可伸缩性。
一个在线购物调查显示,大多数人愿意去商店排队,但在在线购物时却不愿意等待。Websense调查公司称多达70%的上网者表示不愿意在页面读取上超过10秒钟。超过70%的人会因为中途速度过慢而取消当前的订单。 阅读全文
很多人首先会想从服务器缓存方面着手对程序进行优化,许多不同的服务器缓存方式都有他们自己的特点,像我曾经参与的一些项目中,根据缓存的命中率不同使用过 Com+/Enterprise Libiary Caching/Windows服务,静态文件等方式的服务器端缓存和 HTTP Compression技术,但客户端缓存往往却被人们忽略了,即使服务器的缓存让你的页面访问起来非常地快,但她依然需要依赖浏览器下载并输出,而当你加入客户端缓存时,会给你带来非常多的好处.因为她可以对站点中访问最频繁的页进行缓存充分地提高 Web 服务器的吞吐量(通常以每秒的请求数计算)以提升应用程序性能和可伸缩性。
一个在线购物调查显示,大多数人愿意去商店排队,但在在线购物时却不愿意等待。Websense调查公司称多达70%的上网者表示不愿意在页面读取上超过10秒钟。超过70%的人会因为中途速度过慢而取消当前的订单。 阅读全文
Zend Studio for Eclipse 7.0.2提示代码的速度加快了!
大家可以赶紧去看看喔:
http://www.laonb.com/archives/7740/
大家可以赶紧去看看喔:
http://www.laonb.com/archives/7740/
group表有个varchar 的字段groupPower,值为1,2,3,4,有个sql语句为
执行出错将 varchar 值 '1,2,3,4' 转换为数据类型为 int 的列时发生语法错误。
解决方法:
将where 条件改为:
CHAR类型都有个最大长度,超过长度的无法保存,不够长度留空。VARCHAR也有一个最大长度,但是当数据长度不够的时候,按照实际数据长度分配空间,少浪费,但查询的时候效率有影响。
SQL中enum、varchar、int+join查询速度比较 :
http://unix-cd.com/vc/www/26/2009-04/13675.html
select * from dbo.function where
functionId in
(
select groupPower from dbo.group
where groupid=1
)
functionId in
(
select groupPower from dbo.group
where groupid=1
)
执行出错将 varchar 值 '1,2,3,4' 转换为数据类型为 int 的列时发生语法错误。
解决方法:
将where 条件改为:
where charindex(rtrim(functionId), (select top 1 groupPower from loan_group where groupid=1 ))>0
就ok了!CHAR类型都有个最大长度,超过长度的无法保存,不够长度留空。VARCHAR也有一个最大长度,但是当数据长度不够的时候,按照实际数据长度分配空间,少浪费,但查询的时候效率有影响。
SQL中enum、varchar、int+join查询速度比较 :
http://unix-cd.com/vc/www/26/2009-04/13675.html
赋予普通用户挂载光驱的权限阅读全文