MySQL整理

一、MySQL主从复制。

1、MySQL主从复制原理。

基于二进制文件实现。

2、MySQL主从复制类型。

基于语句的复制statement,MySQL默认类型。基于行的复制row。混合类型的复制mixed。

3、MySQL主从复制的工作过程。

1)master节点将数据的改变记录成二进制日志binlog,当master上的数据发生改变时,则将其改变写入二进制日志中。

2)slave节点会在一定时间间隔内对master的二进制日志进行探测,看其是否发生变化,如果发生改变,则开始一个I/O线程请求master的二进制文件。

3)同时master节点为每个I/O线程启动一个dump线程,用于向其发送二进制文件,并保存到slave节点本地的中继日志RelayLog中,slave节点将启动sql线程从中继日志读取二进制日志,在本地重放(即解析成sql语句逐一执行),让slave数据与master节点保持一致,最后I/O线程和sql线程将进入睡眠状态,等待下次被唤醒。

二、MySQL的Binlog录入格式及区别。

1、statement。

该模式下,每一条会修改数据的sql都会记录在binlog中。不需要记录每一行的变化,减少binlog的日志量,节约I/O,提高性能。由于sql执行有上下文,因此在保存时需要保存相关信息,同时有一些使用函数之类的语句无法被记录复制。

2、row。

不记录sql语句上下文相关信息,只保存被修改的那条记录。记录单元为每一行的改动,基本可以全部记录下来,但是由于很多操作会导致大量行的改动(比如alter table),因此这种模式的文件保存信息太多,日志量太大。

3、mixed。

是一种折中方案,普通操作使用statement记录,当无法使用statement的时候使用row。

三、MySQL中InnoDB支持的事务隔离级别。

1、read uncommitted。

读到未提交数据。最低的事务隔离级别,可能会导致脏读幻读不可重复读

2、read committed。

可以阻止脏读,但是仍然有可能发生幻读不可重复读

3、repeatable read。

可重复读,可以阻止脏读,但是仍然可能发生幻读。(MySQL默认事务级别)

4、serializable。

串行事务。最高的隔离级别,完全服从ACID隔离级别。所有的事务依次逐个执行,事务之间互不干扰,该级别可以防止脏读、不可重复读及幻读。

注:

不可重复读:在一个事务内多次读取同一数据得到不一样的结果。读到其他事务执行update delete后的数据。

幻读:多个事务同时进行时,可能会读到其他事务新增(insert)后的数据。

关于幻读不可重复读,网上搜了一篇个人认为写得比较详细的博文,地址如下:一文详解脏读、不可重复读、幻读_脏读 幻读 不可重复读-CSDN博客

四、MySQL的主从延迟。

解决方案

1、提高从库的硬件性能。

2、优化慢SQL,执行时间较长的SQL或者事务,可以修改拆分多次写入。

3、优化网络。主从部署在同一网络下,跨公网容易导致主从延迟。

4、主库写压力大,可以增加缓存。从库读压力大,可以增加从库数量,但从库节点不宜过多,3-5个比较合理。

五、MySQL事务底层原理(ACID)。

原子性(A):是undo log实现的;

一致性(C):是由代码逻辑层面保证的;

隔离性(I):是由mvcc实现的;

持久性(D):是基于redo log实现的。

  • 11
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MySQL语句整理大全如下: 1. 创建数据库: ``` CREATE DATABASE database_name; ``` 2. 删除数据库: ``` DROP DATABASE database_name; ``` 3. 切换到指定数据库: ``` USE database_name; ``` 4. 创建数据表: ``` CREATE TABLE table_name ( column1 datatype, column2 datatype, column3 datatype, ..... ); ``` 5. 删除数据表: ``` DROP TABLE table_name; ``` 6. 插入数据: ``` INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...); ``` 7. 更新数据: ``` UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition; ``` 8. 删除数据: ``` DELETE FROM table_name WHERE condition; ``` 9. 查询数据: ``` SELECT column1, column2, ... FROM table_name WHERE condition; ``` 10. 查询数据并排序: ``` SELECT column1, column2, ... FROM table_name WHERE condition ORDER BY column1 ASC|DESC, column2 ASC|DESC, ...; ``` 11. 查询数据并限制返回结果的数量: ``` SELECT column1, column2, ... FROM table_name WHERE condition LIMIT num; ``` 12. 查询数据并分页: ``` SELECT column1, column2, ... FROM table_name WHERE condition LIMIT start, num; ``` 13. 查询数据并计算统计值: ``` SELECT COUNT(column_name) FROM table_name WHERE condition; ``` 14. 查询数据并计算平均值: ``` SELECT AVG(column_name) FROM table_name WHERE condition; ``` 15. 查询数据并计算最大值: ``` SELECT MAX(column_name) FROM table_name WHERE condition; ``` 16. 查询数据并计算最小值: ``` SELECT MIN(column_name) FROM table_name WHERE condition; ``` 17. 查询数据并计算总和: ``` SELECT SUM(column_name) FROM table_name WHERE condition; ``` 这些是MySQL语句的常见用法,希望对你有帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Showne92

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值