January 24, 2010
mysql中使用 MYSQLBINLOG 来恢复数据
"今天在家里做了一下试验,终于搞明白了以前做复制的时候没有搞明白的问题。原来BINLOG就是一个记录SQL语句的过程,和普通的LOG一样。不过只是她是二进制存储,普通的是十进制存储罢了。 1、配置文件里要写的东西: [mysqld] log-bin=yueliangdao_binglog(名字可以改成自己的,如果不改名字的话,默认是以主机名字命名)重新启动MSYQL服务。\n二进制文件里面的东西显示的就是执行所有语句的详细记录,当然一些语句不被记录在内,要了解详细的,见手册页。2、查看自己的BINLOG的名字是什么。 show binlog events;\nquery result(1 records) Log_name\nPos\nEvent_type\nServer_id\nEnd_log_pos\nInfo\nyueliangdao_binglog.000001\n4\nFormat_desc\n1\n106\nServer ver: 5.1.22-rc-community-log, Binlog ver: 4\n3、我做了几次操作后,她就记录了下来。\n又一次 show binlog events 的结果。 …"
January 24, 2010
mysql优化数据库对象
"12.1优化表的数据类型\n表需要使用何种数据类型,是需要根据应用来判断的。虽然应用设计的时候需要考虑字段的长度留有一定的冗余,但是不推荐让很多字段都留有大量的冗余,这样即浪费存储也浪费内存。\n我们可以使用PROCEDUREANALYSE()对当前已有应用的表类型的判断,该函数可以对数据表中的列的数据类型提出优化建议,可以根据应用的实际情况酌情考虑是否实施优化。\n语法:\nSELECT * FROM tbl_name PROCEDURE ANALYSE();SELECT * FROM tbl_name PROCEDURE ANALYSE(16,256);\n输出的每一列信息都会对数据表中的列的数据类型提出优化建议。第二个例子告诉PROCEDUREANALYSE()不要为那些包含的值多于16个或者256字节的ENUM类型提出建议。如果没有这样的限制,输出信息可能很长;ENUM定义通常很难阅读。\n在对字段类型进行优化时,可以根据统计信息并结合应用的实际情况对其进行优化。\n12.2通过拆分,提高表的访问效率这里我们所说的拆分,主要是针对Myisam类型的表,拆分的方法可以分成两种情况:\n1. 纵向 …"
January 24, 2010
mysql的默认查询优先还是更新(insert、update、delete)优先关系
"MySQL还允许改变语句调度的优先级,它可以使来自多个客户端的查询更好地协作,这样单个客户端就不会由于锁定而等待很长时间。改变优先级还可以确保特定类型的查询被处理得更快。\n我们首先应该确定应用的类型,判断应用是以查询为主还是以更新为主的,是确保查询效率还是确保更新的效率,决定是查询优先还是更新优先。\n下面我们提到的改变调度策略的方法主要是针对Myisam存储引擎的,对于Innodb存储引擎,语句的执行是由获得行锁的顺序决定的。\nMySQL的默认的调度策略可用总结如下:\n写入操作优先于读取操作。\n对某张数据表的写入操作某一时刻只能发生一次,写入请求按照它们到达的次序来处理。\n对某张数据表的多个读取操作可以同时地进行。\nMySQL提供了几个语句调节符,允许你修改它的调度策略:\nLOW_PRIORITY关键字应用于DELETE、INSERT、LOADDATA、REPLACE和UPDATE。\nHIGH_PRIORITY关键字应用于SELECT和INSERT语句。\nDELAYED关键字应用于INSERT和REPLACE语句。\n如果写入操作是一个LOW_PRIORITY(低优先级)请求,那么系统就 …"
January 24, 2010
用mysql中的join来优化查询
"Mysql4.1开始支持SQL的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中。使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的SQL操作,同时也可以避免事务或者表锁死,并且写起来也很容易。但是,有些情况下,子查询可以被更有效率的连接(JOIN).. 替代。\n假设我们要将所有没有订单记录的用户取出来,可以用下面这个查询完成:\nSELECT * FROM customerinfo WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo)\n如果使用连接(JOIN)..来完成这个查询工作,速度将会快很多。尤其是当salesinfo 表中对CustomerID建有索引的话,性能将会更好,查询如下:\nSELECT * FROM customerinfo LEFT JOIN salesinfo ON customerinfo.CustomerID=salesinfo.CustomerID WHERE salesinfo.CustomerID IS NULL\n连 …"
January 24, 2010
在mysql中对order by的字段进行优化
"在某些情况中,MySQL可以使用一个索引来满足ORDER BY子句,而不需要额外的排序。where条件和order by使用相同的索引,并且order by的顺序和索引顺序相同, 并且order by的字段都是升序或者都是降序。\n例如:下列sql可以使用索引。\nSELECT * FROM t1 ORDER BY key_part1,key_part2,…;\nSELECT * FROM t1 WHERE key_part1=1 ORDER BY key_part1 DESC,key_part2 DESC;\nSELECT * FROM t1 ORDER BY key_part1 DESC,key_part2 DESC;\n**但是以下情况不使用索引: **\nSELECT * FROM t1 ORDER BY key_part1 DESC,key_part2 ASC;\n–orderby的字段混合ASC和DESC\n** **\nSELECT * FROM t1 WHERE key2=constant ORDER BY key1;\n–用于查询行的关键字与ORDERBY中所使用的不相同\n** ** …"
January 24, 2010
mysql优化一般步聚(教程)
"1.1优化SQL的一般步骤\n11.1.1 通过show status和应用特点了解各种SQL的执行频率\n通过SHOW STATUS可以提供服务器状态信息,也可以使用mysqladminextended- status命令获得。SHOW STATUS可以根据需要显示session级别的统计结果和global 级别的统计结果。\n以下几个参数对Myisam和Innodb存储引擎都计数:\nCom_select 执行select操作的次数,一次查询只累加1;\nCom_insert执行insert操作的次数,对于批量插入的insert操作,只累加一次;\nCom_update执行update操作的次数;\nCom_delete 执行delete操作的次数;\n以下几个参数是针对Innodb存储引擎计数的,累加的算法也略有不同:\nInnodb_rows_read select查询返回的行数;\nInnodb_rows_inserted执行Insert操作插入的行数;\nInnodb_rows_updated执行update操作更新的行数;\nInnodb_rows_deleted 执行delete操作删除的行 …"
January 24, 2010
mysql数据库开发需要注意的问题
"10.1数据库名、表名大小写问题\n在MySQL中,数据库对应数据目录中的目录。数据库中的每个表至少对应数据库目录中的一个文件(也可能是多个,取决于存储引擎)。因此,所使用操作系统的大小写敏感性决定了数据库名和表名的大小写敏感性。这说明在大多数Unix中数据库名和表名对大小写敏感,而在Windows中对大小写不敏感。一个显著的例外情况是MacOSX,它基于Unix但使用默认文件系统类型(HFS+),对大小写不敏感。然而,MacOSX也支持UFS卷,该卷对大小写敏感,就像Unix一样。\n注释:尽管在某些平台中数据库名和表名对大小写不敏感,不应在同一查询中使用不同的大小写来引用给定的数据库或表。下面的查询不会工作,因为它同时引用了表my_tables和as MY_tables:mysql\u0026gt;SELECT* FROMmy_tableWHERE MY_TABLE.col=1;列、索引、存储子程序和触发器名在任何平台上对大小写不敏感,列的别名也不敏感。\n默认情况,表别名在Unix中对大小写敏感,但在Windows或MacOSX中对大小写不敏感。\n下面的查询在Unix中不会工作,因为它同时引用了 …"
January 22, 2010
mysql字符集的设置
"mysql 的字符集和校对规则有 4 个级别的默认设置:服务器级、数据库级、表级 和 字段级。分别在不同的地方设置,作用也不相同。服务器字符集和校对,在 mysql 服务启动的时候确定。\n可以在 my.cnf 中设置: [mysqld] default-character-set=utf8 或者在启动选项中指定: mysqld –default-character-set=utf8 或者在编译的时候指定: ./configure –with-charset=utf8 如果没有特别的指定服务器字符集,默认使用 latin1 作为服务器字符集。上面三种 设置的方式都只指定了字符集,没有指定校对规则,这样是使用该字符集默认的校对规则, 如果要使用该字符集的非默认校对规则,则需要在指定字符集的同时指定校对规则。 可以用 show variables like ‘character_set_server’; 命令查询当前服务器的字符集和校对规则。"
January 22, 2010
用apache来实现限制ip可以访问phpmyadmin
"为了安全,只允许固定ip才可以访问phpmyadmin,这个由于没有找到在phpmyadmin配置的地方,所以这里用apache来实现这个功能\nServerAdmin [email protected] DocumentRoot “D:\\site\\phpMyAdmin” ServerName php.haohtml.com DirectoryIndex index.php index.shtml Options Indexes MultiViews AllowOverride None order deny,allow Allow from 192.168.0.7 Deny from all Allow from all Options FollowSymLinks Includes 经过上面一系列的配置,将只允许ip为192.168.0.7的ip才可以访问phpmyadmin,其它的ip都不允许访问."