One Number:同时监测 Gmail, Reader, Wave 和 Voice 的 Chrome 扩展

我相信作为Google的忠实用户,各位的Chrome上一定安装了若干的Google服务提醒扩展吧:比如Gmail的Google Reader的Google Wave的Google Voice的。。。那么多图标堆在工具栏,看着就头大。。。

one_number

One Number这个扩展正是为了解决这个问题而来,从此我们只需要一个图标就可以查看四个Google服务的未读信息数目了。安装这个扩展后,点击扩展图标跳转到Google输入Google账户用户名和密码即可启用。监视的服务列表,检查频度,未读数显示颜色等等也都可以在扩展的设置中自己设定,相当的方便。另外,One Number的Gmail提醒也支持使用Google Apps的邮件监视。

点击这里进入One Number在官方Chrome扩展中心的页面,点击INSTALL安装。

mysql中使用 MYSQLBINLOG 来恢复数据

今天在家里做了一下试验,终于搞明白了以前做复制的时候没有搞明白的问题。原来BINLOG就是一个记录SQL语句的过程,和普通的LOG一样。不过只是她是二进制存储,普通的是十进制存储罢了。
1、配置文件里要写的东西:
[mysqld]
log-bin=yueliangdao_binglog(名字可以改成自己的,如果不改名字的话,默认是以主机名字命名)
重新启动MSYQL服务。
二进制文件里面的东西显示的就是执行所有语句的详细记录,当然一些语句不被记录在内,要了解详细的,见手册页。

2、查看自己的BINLOG的名字是什么。
show binlog events;

query result(1 records)

Log_name Pos Event_type Server_id End_log_pos Info
yueliangdao_binglog.000001 4 Format_desc 1 106 Server ver: 5.1.22-rc-community-log, Binlog ver: 4


3、我做了几次操作后,她就记录了下来。
又一次 show binlog events 的结果。

query result(4 records)

Log_name Pos Event_type Server_id End_log_pos Info
yueliangdao_binglog.000001 4 Format_desc 1 106 Server ver: 5.1.22-rc-community-log, Binlog ver: 4
yueliangdao_binglog.000001 106 Intvar 1 134 INSERT_ID=1
yueliangdao_binglog.000001 134 Query 1 254 use `test`; create table a1(id int not null auto_increment primary key, str varchar(1000)) engine=myisam
yueliangdao_binglog.000001 254 Query 1 330 use `test`; insert into a1(str) values (‘I love you’),(‘You love me’)
yueliangdao_binglog.000001 330 Query 1 485 use `test`; drop table a1

4、用mysqlbinlog 工具来显示记录的二进制结果,然后导入到文本文件,为了以后的恢复。
详细过程如下:
D:\LAMP\MYSQL5\data>mysqlbinlog –start-position=4 –stop-position=106 yueliangd
ao_binglog.000001 > c:\\test1.txt
test1.txt的文件内容:

/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#7122 16:9:18 server id 1  end_log_pos 106     Start: binlog v 4, server v 5.1.22-rc-community-log created 7122 16:9:18 at startup
# Warning: this binlog was not closed properly. Most probably mysqld crashed writing it.
ROLLBACK/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
第二行的记录:
D:\LAMP\MYSQL5\data>mysqlbinlog –start-position=106 –stop-position=134 yuelian
gdao_binglog.000001 > c:\\test1.txt
test1.txt内容如下:

/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 106
#7122 16:22:36 server id 1  end_log_pos 134     Intvar
SET INSERT_ID=1/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

第三行记录
D:\LAMP\MYSQL5\data>mysqlbinlog –start-position=134 –stop-position=254 yuelian
gdao_binglog.000001 > c:\\test1.txt
内容:
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 134
#7122 16:55:31 server id 1  end_log_pos 254     Query    thread_id=1    exec_time=0    error_code=0
use test/*!*/;
SET TIMESTAMP=1196585731/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
SET @@session.sql_mode=1344274432/*!*/;
/*!\C utf8 *//*!*/;
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
create table a1(id int not null auto_increment primary key,
str varchar(1000)) engine=myisam/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

/*!40019 SET @@session.max_insert_delayed_threads=0*/;

第四行的记录:
D:\LAMP\MYSQL5\data>mysqlbinlog –start-position=254 –stop-position=330 yuelian
gdao_binglog.000001 > c:\\test1.txt
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 254
#7122 16:22:36 server id 1  end_log_pos 330     Query    thread_id=1    exec_time=0    error_code=0
use test/*!*/;
SET TIMESTAMP=1196583756/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
SET @@session.sql_mode=1344274432/*!*/;
/*!\C utf8 *//*!*/;
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
use `test`; insert into a1(str) values (‘I love you’),(‘You love me’)/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

5、查看这些东西是为了恢复数据,而不是为了好玩。所以我们最中还是为了要导入结果到MYSQL中。

D:\LAMP\MYSQL5\data>mysqlbinlog –start-position=134 –stop-position=330 yuelian
gdao_binglog.000001 | mysql -uroot -p

或者
D:\LAMP\MYSQL5\data>mysqlbinlog –start-position=134 –stop-position=330 yuelian
gdao_binglog.000001 >test1.txt
进入MYSQL导入
mysql> source c:\\test1.txt
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Database changed
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Charset changed
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.03 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)
6、查看数据:
mysql> show tables;
+—————-+
| Tables_in_test |
+—————-+
| a1             |
+—————-+
1 row in set (0.01 sec)

mysql> select * from a1;
+—-+————-+
| id | str         |
+—-+————-+
|  1 | I love you  |
|  2 | You love me |
+—-+————-+
2 rows in set (0.00 sec)

来源:http://blog.chinaunix.net/u/29134/showart_434296.html

mysql优化数据库对象

12.1优化表的数据类型

表需要使用何种数据类型,是需要根据应用来判断的。虽然应用设计的时候需要考虑字段的长度留有一定的冗余,但是不推荐让很多字段都留有大量的冗余,这样即浪费存储也浪费内存。

我们可以使用PROCEDUREANALYSE()对当前已有应用的表类型的判断,该函数可以对数据表中的列的数据类型提出优化建议,可以根据应用的实际情况酌情考虑是否实施优化。

语法:

SELECT * FROM tbl_name PROCEDURE ANALYSE();

SELECT * FROM tbl_name PROCEDURE ANALYSE(16,256);

输出的每一列信息都会对数据表中的列的数据类型提出优化建议。第二个例子告诉PROCEDUREANALYSE()不要为那些包含的值多于16个或者256字节的ENUM类型提出建议。如果没有这样的限制,输出信息可能很长;ENUM定义通常很难阅读。

在对字段类型进行优化时,可以根据统计信息并结合应用的实际情况对其进行优化。

12.2通过拆分,提高表的访问效率这里我们所说的拆分,主要是针对Myisam类型的表,拆分的方法可以分成两种情况:

1.  纵向拆分:

纵向拆分是只按照应用访问的频度,将表中经常访问的字段和不经常访问的字段拆分成两个表,经常访问的字段尽量是定长的,这样可以有效的提高表的查询和更新的效率。

2.  横向拆分:

横向拆分是指按照应用的情况,有目的的将数据横向拆分成几个表或者通过分区分到多个分区中,这样可以有效的避免Myisam表的读取和更新导致的锁问题。

12.3逆规范化

数据库德规范化设计强调数据的独立性,数据应该尽可能少地冗余,因为存在过多的冗余数据,这就意味着要占用了更多的物理空间,同时也对数据的维护和一致性检查带来了问题。

但是对于查询操作很多的应用,一次查询可能需要访问多表进行,如果通过冗余纪录在相同表中,更新的代价增加不多,但是查询操作效率可以有明显提高,这种情况就可以考虑通过冗余数据来提高效率。

12.4使用冗余统计表

使用createtemporarytable语法,它是基于session的表,表的数据保存在内存里面,当session断掉后,表自然消除。

对于大表的统计分析,如果统计的数据量不大,利用insert。。。select将数据移到临时表中比直接在大表上做统计要效率更高。

12.5选择更合适的表类型

1、如果应用出现比较严重的锁冲突,请考虑是否更改存储引擎到innodb,行锁机制可以有效的减少锁冲突的出现。

2、如果应用查询操作很多,且对事务完整性要求不严格,则可以考虑使用Myisam存储引擎。

更多存储引擎选择的原则,请参考开发篇的相关章节。

mysql的默认查询优先还是更新(insert、update、delete)优先关系

MySQL还允许改变语句调度的优先级,它可以使来自多个客户端的查询更好地协作,这样单个客户端就不会由于锁定而等待很长时间。改变优先级还可以确保特定类型的查询被处理得更快。

我们首先应该确定应用的类型,判断应用是以查询为主还是以更新为主的,是确保查询效率还是确保更新的效率,决定是查询优先还是更新优先。

下面我们提到的改变调度策略的方法主要是针对Myisam存储引擎的,对于Innodb存储引擎,语句的执行是由获得行锁的顺序决定的。

MySQL的默认的调度策略可用总结如下:

1. 写入操作优先于读取操作。

2. 对某张数据表的写入操作某一时刻只能发生一次,写入请求按照它们到达的次序来处理。

3. 对某张数据表的多个读取操作可以同时地进行。

MySQL提供了几个语句调节符,允许你修改它的调度策略:

1. LOW_PRIORITY关键字应用于DELETE、INSERT、LOADDATA、REPLACE和UPDATE。

2. HIGH_PRIORITY关键字应用于SELECT和INSERT语句。

3. DELAYED关键字应用于INSERT和REPLACE语句。

如果写入操作是一个LOW_PRIORITY(低优先级)请求,那么系统就不会认为它的优先级高于读取操作。在这种情况下,如果写入者在等待的时候,第二个读取者到达了,那么就允许第二个读取者插到写入者之前。只有在没有其它的读取者的时候,才允许写入者开始操作。这种调度修改可能存在LOW_PRIORITY写入操作永远被阻塞的情况。

SELECT查询的HIGH_PRIORITY(高优先级)关键字也类似。它允许SELECT插入正在等待的写入操作之前,即使在正常情况下写入操作的优先级更高。另外一种影响是,高优先级的SELECT在正常的SELECT语句之前执行,因为这些语句会被写入操作阻塞。

如果你希望所有支持LOW_PRIORITY选项的语句都默认地按照低优先级来处理,那么请使用–low-priority-updates选项来启动服务器。通过使用INSERTHIGH_PRIORITY来把INSERT语句提高到正常的写入优先级,可以消除该选项对单个INSERT语句的影响。

用mysql中的join来优化查询

Mysql4.1开始支持SQL的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中。使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的SQL操作,同时也可以避免事务或者表锁死,并且写起来也很容易。但是,有些情况下,子查询可以被更有效率的连接(JOIN).. 替代。

假设我们要将所有没有订单记录的用户取出来,可以用下面这个查询完成:

SELECT * FROM customerinfo WHERE CustomerID NOT in (SELECT CustomerID  FROM salesinfo)

如果使用连接(JOIN)..来完成这个查询工作,速度将会快很多。尤其是当salesinfo 表中对CustomerID建有索引的话,性能将会更好,查询如下:

SELECT * FROM customerinfo
LEFT JOIN salesinfo ON customerinfo.CustomerID=salesinfo.CustomerID
WHERE salesinfo.CustomerID IS NULL

连接(JOIN)..之所以更有效率一些,是因为MySQL不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作。

在mysql中对order by的字段进行优化

在某些情况中,MySQL可以使用一个索引来满足ORDER BY子句,而不需要额外的排序。where条件和order by使用相同的索引,并且order by的顺序和索引顺序相同, 并且order by的字段都是升序或者都是降序。

例如:下列sql可以使用索引。

SELECT * FROM t1 ORDER BY key_part1,key_part2,…;

SELECT * FROM t1 WHERE key_part1=1 ORDER BY key_part1 DESC,key_part2 DESC;

SELECT * FROM t1 ORDER BY key_part1 DESC,key_part2 DESC;

但是以下情况不使用索引:

SELECT * FROM t1 ORDER BY key_part1 DESC,key_part2 ASC;

–orderby的字段混合ASC和DESC


SELECT * FROM t1 WHERE key2=constant ORDER BY key1;

–用于查询行的关键字与ORDERBY中所使用的不相同


SELECT * FROM t1 ORDER BY key1,key2;

–对不同的关键字使用ORDERBY

mysql优化一般步聚(教程)

1.1优化SQL的一般步骤

11.1.1 通过show status和应用特点了解各种SQL的执行频率

通过SHOW STATUS可以提供服务器状态信息,也可以使用mysqladminextended- status命令获得。SHOW STATUS可以根据需要显示session级别的统计结果和global 级别的统计结果。

以下几个参数对Myisam和Innodb存储引擎都计数:

1. Com_select 执行select操作的次数,一次查询只累加1;

2. Com_insert执行insert操作的次数,对于批量插入的insert操作,只累加一次;

3. Com_update执行update操作的次数;

4. Com_delete 执行delete操作的次数; Continue reading

mysql数据库开发需要注意的问题

10.1数据库名、表名大小写问题

在MySQL中,数据库对应数据目录中的目录。数据库中的每个表至少对应数据库目录中的一个文件(也可能是多个,取决于存储引擎)。因此,所使用操作系统的大小写敏感性决定了数据库名和表名的大小写敏感性。这说明在大多数Unix中数据库名和表名对大小写敏感,而在Windows中对大小写不敏感。一个显著的例外情况是MacOSX,它基于Unix但使用默认文件系统类型(HFS+),对大小写不敏感。然而,MacOSX也支持UFS卷,该卷对大小写敏感,就像Unix一样。

注释:尽管在某些平台中数据库名和表名对大小写不敏感,不应在同一查询中使用不同的大小写来引用给定的数据库或表。下面的查询不会工作,因为它同时引用了表my_tables和as
MY_tables:mysql>SELECT* FROMmy_tableWHERE MY_TABLE.col=1;列、索引、存储子程序和触发器名在任何平台上对大小写不敏感,列的别名也不敏感。

默认情况,表别名在Unix中对大小写敏感,但在Windows或MacOSX中对大小写不敏感。

下面的查询在Unix中不会工作,因为它同时引用了别名a和A:

mysql>SELECT col_nameFROM tbl_nameASa

->WHEREa.col_name=1ORA.col_name=2;

然而,该查询在Windows中是可以的。要想避免出现差别,最好采用一致的转换,例如总是用小写创建并引用数据库名和表名。在大多数移植和使用中建议使用该转换。

在MySQL中如何在硬盘上保存和使用表名和数据库名lower_case_tables_name系统变量确定,可以在启动mysqld时设置。lower_case_tables_name可以采用下面的任一值:

含义
0 使用CREATETABLE或CREATEDATABASE语句指定的大写和小写在硬盘上保存表名和数据 库名。名称比较对大小写敏感。在Unix系统中的默认设置即如此。请注意如果在大小写

不敏感的文件系统上用–lower-case-table-names=0强制设为0,并且使用不同的大小写访问MyISAM表名,会导致索引破坏。

1 表名在硬盘上以小写保存,名称比较对大小写敏感。MySQL将所有表名转换为小写以便存 储和查找。该行为也适合数据库名和表的别名。该值为Windows和MacOSX系统中的默认值。
2 表名和数据库名在硬盘上使用CREATETABLE或CREATEDATABASE语句指定的大小写进行保存,但MySQL将它们转换为小写以便查找。名称比较对大小写敏感。注释:只在对大

小写不敏感的文件系统上适用!InnoDB表名以小写保存,例如 lower_case_tables_name=1。

在Windows和MacOSX中,lower_case_tables_name的默认值是1。

如果只在一个平台上使用MySQL,通常不需要更改lower_case_tables_name变量。

然而,如果你想要在对大小写敏感不同的文件系统的平台之间转移表,会遇到困难。例如,在Unix中,my_tables和MY_tables是两个不同的表,但在Windows中,这两个表名相同。

要想避免由于数据库或表名的大小写造成的数据转移问题,可使用两个选项:

在任何系统中可以使用lower_case_tables_name=1。使用该选项的不利之处是当使用SHOW
TABLES或SHOWDATABASES时,看不出名字原来是用大写还是小写。

在Unix中使用lower_case_tables_name=0,在Windows中使用lower_case_tables_name=2。

这样了可以保留数据库名和表名的大小写。不利之处是必须确保在Windows中查询总是用正确大小写引用数据库名和表名。如果将查询转移到Unix中,由于在Unix中大小写很重要,如果大小写不正确,它们不工作。

例外:如果你正使用InnoDB表,在任何平台上均应将lower_case_tables_name设置为1,以强制将名转换为小写。

请注意在Unix中将lower_case_tables_name设置为1之前,重启mysqld之前,必须先将旧的数据库名和表名转换为小写

10.2使用外键需注意的地方

在MySQL中,InnoDB表支持对外部关键字约束条件的检查。

对于除InnoDB类型的表,当使用REFERENCEStbl_name(col_name)子句定义列时可以使用外部关键字,该子句没有实际的效果,只作为备忘录或注释来提醒,你目前正定义的列指向另一个表中的一个列。执行该语句时,实现下面很重要:

MySQL不执行表tbl_name中的动作,例如作为你正定义的表中的行的动作的响应而删除行;

换句话说,该句法不会致使ONDELETE或ONUPDATE行为(如果你在REFERENCES子句中写入ONDELETE或ONUPDATE子句,将被忽略)。

该句法可以创建一个column;但不创建任何索引或关键字。

如果用该句法定义InnoDB表,将会导致错误。

你可以使用作为联接列创建的列,如下所示:

CREATE TABLE person(

idSMALLINTUNSIGNEDNOTNULLAUTO_INCREMENT,

nameCHAR(60)NOTNULL,

PRIMARYKEY(id)

);
CREATE TABLE shirt(

id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,

style ENUM(‘t-shirt’,’polo’,’dress’) NOT NULL,

color ENUM(‘red’,’blue’,’orange’,’white’,’black’) NOT NULL,

owner SMALLINT UNSIGNED NOT NULL REFERENCES person(id),

PRIMARYKEY(id)

);
INSERT INTO person VALUES(NULL,’AntonioPaz’);
SELECT@last:=LAST_INSERT_ID();

INSERT INTO shirt VALUES

(NULL,’polo’,’blue’,@last),

(NULL,’dress’,’white’,@last),

(NULL,’t-shirt’,’blue’,@last);

INSERT INTO person VALUES(NULL,’LillianaAngelovska’);

SELECT@last:=LAST_INSERT_ID();

INSERT INTO shirt VALUES

(NULL,’dress’,’orange’,@last),

(NULL,’polo’,’red’,@last),

(NULL,’dress’,’blue’,@last),

(NULL,’t-shirt’,’white’,@last);
SELECT*FROMperson;

+—-+———————+

|id|name             |

+—-+———————+

| 1|AntonioPaz          |

| 2|LillianaAngelovska|+—-+———————+
SELECT * FROM shirt;

+—-+———+——–+——-+

|id|style |color |owner|

+—-+———+——–+——-+

| 1|polo  |blue |  1|

| 2|dress |white |  1|

| 3|t-shirt|blue |  1|

| 4|dress |orange|  2|

| 5|polo  |red  |  2|

| 6|dress |blue |  2|

| 7|t-shirt|white |  2|

+—-+———+——–+——-+

SELECT s.* FROM personp,shirts

WHERE p.name LIKE ‘Lilliana%’

AND s.owner=p.id

AND s.color<>’white’;

+—-+——-+——–+——-+

|id|style|color |owner|

+—-+——-+——–+——-+

| 4|dress|orange|  2|

| 5|polo |red  |  2|

| 6|dress|blue |  2|

+—-+——-+——–+——-+

按照这种方式使用,REFERENCES子句不会显示在SHOWCREATETABLE或DESCRIBE的

输出中:
SHOW CREATE TABLE shirt\G

***************************1.row***************************

Table:shirt

Create Table:CREATE TABLE `shirt`(

`id` smallint(5) unsigned NOT NULL auto_increment,

`style `enum(‘t-shirt’,’polo’,’dress’) NOT NULL,

`color `enum(‘red’,’blue’,’orange’,’white’,’black’) NOT NULL,

`owner `smallint(5)unsigned NOT NULL,

PRIMARYKEY (`id`)

)ENGINE=MyISAMDEFAULTCHARSET=latin1;

在列定义中,按这种方式使用REFERENCES作为注释或“提示”适用于表MyISAM和BerkeleyDB。

mysql字符集的设置

mysql 的字符集和校对规则有 4 个级别的默认设置:服务器级、数据库级、表级 字段级。分别在不同的地方设置,作用也不相同。服务器字符集和校对,在 mysql 服务启动的时候确定。

可以在 my.cnf 中设置:
[mysqld]
default-character-set=utf8
或者在启动选项中指定:
mysqld –default-character-set=utf8
或者在编译的时候指定:
./configure –with-charset=utf8
如果没有特别的指定服务器字符集,默认使用 latin1 作为服务器字符集。上面三种 设置的方式都只指定了字符集,没有指定校对规则,这样是使用该字符集默认的校对规则, 如果要使用该字符集的非默认校对规则,则需要在指定字符集的同时指定校对规则。
可以用 show variables like ‘character_set_server’; 命令查询当前服务器的字符集和校对规则。

用apache来实现限制ip可以访问phpmyadmin

为了安全,只允许固定ip才可以访问phpmyadmin,这个由于没有找到在phpmyadmin配置的地方,所以这里用apache来实现这个功能

<VirtualHost *:80>
ServerAdmin www@163.com
DocumentRoot “D:\site\phpMyAdmin”
ServerName php.haohtml.com
DirectoryIndex index.php index.shtml

<Directory “D:\site\phpMyAdmin”>
Options Indexes MultiViews
AllowOverride None
order deny,allow
Allow from 192.168.0.7
Deny from all
#    Allow from all
Options FollowSymLinks Includes
</Directory>

</VirtualHost>

经过上面一系列的配置,将只允许ip为192.168.0.7的ip才可以访问phpmyadmin,其它的ip都不允许访问.