MYAQL:
事务:事务是并发控制的基本单元,事务是一个操作序列,要么都执行,要么都不执行, 他是一个不可分割的工作单位,事务是维护数据库一致性的单位。
四个ACID基本性质:
1.原子性:要么都执行,要么都不执行。 2.一致性:合法的数据才可以被写入。 3.隔离性:允许多个用户并发访问。
4.持久性:事务结束后,事务处理的结果必须得到固化。即一旦提交,对数据库改变是永久的。
事物的语句:
开始事务:BEGIN TRANSACTION 提交事务:COMMIT TRANSACTION 回滚事务:ROLLBACK TRANSACTION
慢查询:
开启慢查询,可以让mysql记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好地优化数据库系统的性能。 slow_query_log
慢查询开启状态 slow_query_log_file 慢查询日志的存放位置 long_query_time查询超过多少秒才记录
可以通过设置全局变量的方法设定: 例如:set gloable slow_query_long on 开启慢查询状态 service mysqld
restart 即可 查询对应值: show variables like'slow_query%'; show variables like
'long_query_time'; 测试慢查询是否正确开启: select sleep(2); 执行慢查询语句,查看是否有对应的慢查询日志生成。
常见的sql语句:(sql语句中大小写均可执行,规范是大写)
说明:创建数据库 create database westos; 说明:删除数据库 drop database westos;
说明:查询user表中的Host,User,Password信息 select host,user,password from user;
说明:查询user表的数据结构 desc user; 说明:新建数据库westos中的表格 use westos; create table linux(
username varchar(50) not null, password varchar(50) noe null );
说明:在linux表格中插入信息 insert into linux values('xyy','123'); 说明:修改linux表格中的信息 update
linux set password '456' where username='xyy'; 说明:在linux表格中添加age字段 alter table
linux add age varchar(4) after username; 说明:在linux表格中移除age字段 alter table linux
drop age; 说明:修改表格名字 alter table linux rename haha; 说明:删除表格中的某一行 delete from
haha where username='xyy'; 说明:删除表格 drop table haha;
数据库的锁机制:
数据库的大并发要考虑锁和锁的性能问题,加锁是为了实现并发控制。数据库是一个多用户资源,
若对并发控制不加控制会读取和存储不正确的数据,破坏数据的一致性(脏读,不可重复读,幻读等)可能会产生死锁。
锁机制保证在一个事务释放锁之前其他事务不可以进行修改。 锁:行级锁,表级锁,悲观锁,乐观锁
悲观锁:事务每次操作之前假设有其他事务会修改需访问的数据,会要求上锁。 乐观锁:事务每次操作之前假设没有其他事务会修改需访问的数据,不会要求上锁。
共享锁:对某一资源加共享锁,自身可以读该资源,其他人也可以读该资源
共享锁(S锁):如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的 事务只能读数据,不能修改数据。
排他锁(X锁):如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务 既能读数据,又能修改数据。
共享锁下其它用户可以并发读取,查询数据。但不能修改,增加,删除数据。资源共享。
mysql两种引擎的区别:
Innodb引擎:提供了对数据库ACID事务的支持,并且实现了sql标准的四种隔离级别,事务安全的,支持行级锁,不支持全文索引。
MyIASM引擎:mysql的默认引擎,没有提供对数据库事务的支持,非事务安全的,锁的粒度是表级的,支持全文索引类型,相对简单性能优。 总结:
MYIASM管理非事务表,提供高速存储和检索,以及全文搜索能力,如果在应用中执行大量的select操作,应选择MYIASM引擎
Innodb用于事务处理,具有ACID事务支持等特性,如果在应用中执行大量的insert和update操作,应选择innodb引擎。
四种隔离级别:
未提交读:读数据时不会检查使用任何锁。 已提交读:只读取提交的数据并等待其他事务释放锁。 可重复读:会保持共享锁到事务结束。
可序列化:不仅会锁定影响的数据,还会锁定这个范围
mysql的四种日志:
1.错误日志:Error Log.记录mysql运行过程ERROR,WARING等信息,系统出错或某条记录出问题可查看ERROR日志。
2.日常运行日志:General query log记录mysql中每条请求数据。 3.二进制日志:Binary log,包含一些事件,数据库的改动等。
4.慢查询日志:slow query log,用于mysql的性能调优。
mysql优化:
1.定期分析检查表: analyze table tbl_name; check table tbl_name; 2.定期优化表: optimize
table tbl_name;
SQL语句:group by
通过一定的规则将一个数据集划分成若干个小区域,然后针对若干个小区域进行数据处理。 例:分别计算男女性用户平均年龄: select 性别,avg(年龄) as
average from 表名 group by 性别
关系型数据库的三大范式:
第一范式:只要是关系型数据库的表,都满足第一范式。 性质:第一范式的数据表中的所有字段都是单一属性,不可分割。 第二范式:不可使用组合键,确保唯一主键。
第三范式:要求数据表中不存在非关键字段对任一候选关键字段的传递函数依赖,表分开。
mysql主从复制:
mysql主从复制的原理就是把主服务器上的bin日志复制到从服务器上执行一遍,这样从服务器上的数据就和
主服务器上的数据一致。编辑/etc/my.cnf文件确保server_id不同即可。 GTID强化了数据库的主备一致性,故障恢复,容错能力。
主库数据丢失---->使用半同步复制 mysql主从复制开启了IO线程和SQL线程。
mysql同步复制,异步复制,半同步复制的原理
在mysql5.5版本之前,复制都是异步复制。 该复制经常遇到的问题是:因为binlog日志是推送的,所有主库和从库 之间存在一定的延迟。
这样就会造成很多问题,比如主库因为磁盘损坏等故障突然崩掉,导致binlog日志不存在,
同时因为延迟binlog还没有推送到从库,从库也就会丢失很多被主库提交的事物,从而造成主从不一致。
解决如上的问题,mysql5.5版本之后引入了半同步复制机制。
异步复制:主库写入一个事务commit提交并执行完之后,,将日志记录到binlog,将结果反馈给客户端, 最后将日志传输到从库。
半同步复制:主库写入一个事务commit提交并执行完之后,并不直接将请求反馈给前端应用用户,而是等待从库也接收
到binlog日志并成功写入中继日志后,主库才返回commit操作成功给客户端。半同步复制保障了事物执行后,至少有两份 日志记录,一份在主库的binlog上
,另一份至少在从库的中继日志Relay log上,这样就极大的保证了数据的一致性。
同步复制:指的是客户端连接到MySQL主服务器写入一段数据,MySQL主服务器同步给MySQL从服务器需要等待从服务器 发出同步完成的响应才返回客户端OK,
这其中等待同步的过程是阻塞的, 如果有N台从服务器, 效率极低。 异步复制:
指的是客户端连接到MySQL主服务器写入一段数据,MySQL主服务器将写入的数据发送给MySQL从服务器, 然后 直接返回客户端OK,
可能从服务器的数据会和主服务不一致。 半同步复制:指的是客户端连接到MySQL主服务器写入一段数据, MySQL主服务器只将数据同步复制给其中一台从服务器,
半同步复制给其他的从服务器, 来达到其中一台从服务器完全同步的效果。
MHA主从原理,选举机制:
MHA目的在于维持master库的高可用性,最大特点是可以修复多个slave之间的差异日志,最终使所有的slave
保持一致,然后从中选择一个新的充当新的master,并使其他的slave指向它。
热备份和冷备份的区别:
1.冷备份是发生在数据库正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份时将要害性文件拷贝 到另一个位置的一种说法。
2.热备份是在数据库运行的情况下,采用archivelog mode方式来备份数据库的方法。
热门工具 换一换