Mysql
主键、超键、候选键、外键
数据库事务的四个特性
原子性、一致性、隔离性、持久性
MySQL中,事务是在引擎层实现的,MyISAM不支持事务,InnoDB支持
隔离级别
隔离级别不同,可能会出现脏读、幻度和不可重复读,标准的隔离级别包括读未提交、读提交、可重复读和串行化
读未提交
事务执行的时候,会读到其他未提交的事务的数据,称之为脏读
读提交
事务执行的时候,会读到其他已提交的事务的数据,称之为不可重复读
可重复读
同一个事务里,select语句的结果是基于事务开始的时间点的状态,但是其他操作可能会出现和select结果不一致的情况,称之为幻读。
mysql默认的事务隔离级别就是这个,原因是5.0以前的mysql在主从复制的时候,如果使用读提交的隔离级别,会导致在从数据库使用binlog同步数据的时候不一致的问题
串行化
事务全部串行化,会阻塞,但是避免了以上的问题
设置隔离级别
在配置文件中设置
1 | |
或者通过命令设置
1 | |
查询隔离级别
1 | |
开启事务
1 | |
视图
视图只包含使用时动态检索数据的查询
drop、delete、truncate
1 | |
在删除存在主外键约束的表格的内容的时候,可以先取消主外键约束,删除之后就可以恢复主外键约束
1 | |
给表格添加字段
1 | |
外键约束
查看外键约束关系
1 | |
删除外键约束
1 | |
添加外键约束
1 | |
索引
创建索引
1 | |
mysql主从
优点:1.热备份 2,读写分离
原理
- 将master改变记录到二进制日志
- slave将master的二进制日志拷贝到中继日志(relay log)
- slave重做中继日志的事件,改变自己的数据
配置
- 打开binary log并设置id
修改配置文件,并重启服务
1 | |
- 创建一个同步用户
create user 'rep1'@'slave address' indetified by 'password';
grant replication slave on *.* to 'rep1'@'slave address'; #slave可以复制
- 获取master的二进制日志和数据库备份
将数据库全局读锁定
flush tables with read lock;
退出当前连接会自动解锁
查看二进制日志和当前坐标
show master status;
记住File和Position
备份数据库
在read lock的状态下,使用mysqldump将主数据库中的数据备份
1 | |
释放read lock
unlock tables;
slave节点的配置
修改配置文件,增加server-id,不能和master的一样
1 | |
将master上的备份的数据恢复到slave节点
1 | |
设置slave和master的通信
change master to
MASTER_HOST='master_host_ip',
MASTER_PORT='master_port',
MASTER_USER='replication_user_name',
MASTER_PASSWORD='replocation_password',
MASTER_LOG_FILE='recorded_log_file_name',
MASTER_LOG_POS='recorded_log_position';
启动slave
START SLAVE;
查看同步状态,确认Slave_IO_Running和Slave_SQL_Running都是Yes即可
show slave status;
读写分离
写位于master,读位于slave,用一个代理去判断是读还是写
- MySQL_Proxy
- MaxScale 推荐
- Atlas
- MyCat
安装好MaxScale之后,在master数据库中进行如下配置
1 | |
修改MaxScale中的配置文件
/etc/maxscale.cnf
1 | |
启动
1 | |