Database

mysql创建用户并分配到某个数据库上

create user ‘kent’@’%’ identified by ‘kentpassword’; create user ‘kent’@’localhost’ identified by ‘kentpassword’; grant all privileges on kentdb.* to ‘kent’@’%’ with grant option; grant all privileges on kentdb.* to ‘kent’@’localhost’ with grant option;

mysql全文搜索的注意事项

1. 调整一下可索引term的最小长度,mysql默认是4,即4个以上字符的词才会被索引;但对中文来说,两个字就应该索引了。 查看 引用 mysql > SHOW VARIABLES LIKE ‘ft_min_word_len’ 修改: 引用 #/etc/mysql/my.cnf [mysqld] ft_min_word_len = 2 最后重启一下mysql server 2. mysql全文索引只能通过空格、标点符号之类的进行分词,这对中文来说不可接受。为了解决中文分词问题,可以把字符转为unicode后再存储: http://www.xingdonghai.cn/mysql-fulltext-index-with-unicode/. 3. 默认的搜索模式会返回看起来严重不相关的东西;最好用boolean mode. 使用这种模式时应该过滤掉空格和加号(UCS-2编码分别是"8192"和"11008"),否则会影响命中率。

MySQL通信模块中的packet分类及关键源码

packet类型 职能 关键函数 所在源码文件 OK 成功执行客户端的命令 send_ok() sql/protocol.h, sql/protocol.c Error 执行客户端命令时出错 send_error() sql/net_pkg.cc EOF resultset中的行结尾/所有数据结尾,其它 send_eof() sql/net_pkg.cc Data resultset中的元数据、数据,其它 ? ?

MySQL主干流程中涉及到的代码的位置

1. main()在sql/mysqld.cc中 2. 接收请求的函数是: handle_connetions_sockets() , sql/mysqld.cc 3. 处理请求的入口:handle_one_connection() , sql/sql_parse.cc 4. 分发:command: do_command()和dispatch_command(), sql/sql_parse.cc 5. 解析query: mysql_parse(), sql/sql_parse.cc 6. 优化:mysql_select(),  sql/sql_select.cc 7. 表锁相关:mysql_lock_table() in sql/lock.cc及其它 8. 表数据变更:mysql_update() sql/sql_update.cc 及其它 9. 存储引擎接口: handler类及其部分函数的实现, sql/handler.h,  sql/handler.cc 10. Innodb实现:sl/ha_innodb.h, sql/ha_innodb.cc 11. 状态回送: mysqld_show() in sql/sql_sow.cc 及其它

MySQL InnoDB适宜存放的最多记录数

InnoDB允许一张表最多只有64TB的大小。 如果你1行有10个字段,每个字段平均25个byte,每行250个byte;可容纳的最大行数是 256000000.0 ( 2亿5千万行) 不过这只是理论上的最大值,实际上, 按经验来说,数据超过1千万行,性能就会比较差了。 大表具体如何影响性能? 一个不完整的列表: 1.索引过大,使得b+树层数变深;另外,小索引本来可以完整放到内存的,索引大了后就放不了了,查询性能可想而知 2.一些全表改动,如alter table, optimize table会导致更长的down time

MySQL 5.5 的TPS

摘自《MySQL 5.5: Storage Engine Performance Benchmark for MyISAM and InnoDB》 Benchmark环境: 硬件: (CPU总核数从6核到36核都分别测过) 引用 –  4 Sockets, 4 8 cores total, 4 x 12 – core AMD Opteron 6172 “Magny – Cours” 2.1GHz CPUs.  (Note: 36 cores were allocated to MySQL and the remaining 12 the Sysbench processes).  –   64 GB DDR3 RAM –   2 …

MySQL 5.5 的TPS Read More »

我对ACID的理解

发现自己对数据库事务ACID的理解其实点模糊。今天参阅了Kroenke的《数据库原理》和其它一些材料后,总结如下: Atomicity 这个最好理解,不用说 ====================================================== Durability 这个有两层意思:   1.事务一旦完成,改动就被持久化了,数据库重启后,数据还在那 (简直是废话,但正因为像废话,才容易让人迷惑)   2. 有的DBMS可以在突然断电时根据事务日志什么的修复数据 ====================================================== Isolation 如果你问自己“什么叫两个事务有互相隔离,什么叫无互相隔离?”,你就会陷入晕眩。 因为这是个伪问题。隔离性不是有没有的问题,而是高不高的问题。 ANSI定义了4种隔离级别,最低叫脏读,最高叫序列化。 并发事务可能在最低级别上运行,也可能在最高级别上运行。 而即使在最低级别上运行,它们也是事务。 ======================================================= Consistency 这是最难让人迷惑的问题,因为"Consistent"在汉语里其实没有关于它的用法。如果你跟人说“一致”,别人只能想到“两个值相同就叫一致”,但这跟事务的一致性好像没什么联系。。。 在我看来, 数据库的一致性是指 事务看到的两个值“总是同一个时间点的值”,也就是说,你在10点钟读记录A,11点钟读记录B,如果读得的B的值是10点钟的B的值,那就是有了一致性;如果读的是11点钟的值,那就可能不一致。 引用 初始值: Ra=100, Rb=50 10点钟执行语句:select R … where id in (a, b) ,先读到了Ra=100 由于某种原因,11点前本查询暂时卡住了 10点半:另一个事务set Rb = 200 并提交 11点钟本查询才继续执行,并读到了Rb. Rb = ?  如果Rb=200,就是不一致,因为200并不是本查询语句启动时的值(10点钟,50) 上面就是“Statement-Level Read Consistency”,即同一个语句里面读到的所有值都是同一个时间点的值 另外有一种级别的一致性,叫“Transaction-Level Read Consistency” …

我对ACID的理解 Read More »