mysql的一些笔记

No Comments

Get Chitika Premium

InnoDB表不支持FULLTEXT索引。所以可以使用myisam

如果大致的行数就足够了,则SHOW TABLE STATUS也可被使用。

alert table 重建索引

 

建立主从数据库复制的方法:

FLUSH TABLES WITH READ LOCK; /*清除select*/

tar -cvf /tmp/mysql-snapshot.tar ./data /*备份数据*/

SHOW MASTER STATE /*获取二进制日志信息和偏移量*/

UNLOCK TABLES;/*解锁*/

[mysqld]

log-bin

server-id=1 /*主服务器my.ini的配置*/

server-id=2/*从服务器my.ini的配置*/

CHANGE MASTER TO

-> MASTER_HOST=’master_host_name’,

-> MASTER_USER=’replication_user_name’,

-> MASTER_PASSWord=’replication_passWord’,

-> MASTER_LOG_FILE=”

-> MASTER_LOG_POS=4 /*配置主机信息4是默认配置*/

START SLAVE;/*启动复制线程*/

 

SELECT … FROM … LOCK IN SHARE MODE对读遇到的所有索引记录设置共享的next-key锁定。

SELECT … FROM … FOR UPDATE对读遇到的所有索引记录设置独占的next-key锁定。

mysql的锁定机制

No Comments

SET AUTOCOMMIT=0;设置所有的事务都不会自动提交。
如果没有设置,可以临时用START TRANSACTION来开始事务,这样开始的也不会自动提交,直到这个事务结束。
普通的,用begin开始。

这是一个实验:
CREATE TABLE t (i INT) ENGINE = InnoDB;
START TRANSACTION
在A客户端检索SELECT * FROM t;
结果empty

在B客户端INSERT INTO t VALUES (1, 2);
在A客户端检索SELECT * FROM t;
结果empty (因为B客户端还没有提交)

在A客户端检索SELECT * FROM t LOCK IN SHARE MODE
线程等待B客户端提交
在B客户端commit
A客户端返回
———————
| 1 | 2 |
———————
1 row in set

在A客户端检索SELECT * FROM t
结果empty (因为A客户端还处在事务中,由此可见事务对于select的影响)

在A客户端commit
在A客户端检索SELECT * FROM t
A客户端返回
———————
| 1 | 2 |
———————
1 row in set

结论

  1. LOCK IN SHARE MODE可以绕过本session事务的限制,读取最新的,已经被commit的结果,但是如果有没有commit的部分,就会加入等待列队
  2. 事务对于select也是有很多影响的