《高性能MySQL》1:浅析MySQL基本常识

一、并发控制

二、事物

2.1、什么是事物

事物是逻辑上的一组操作,要么都执行,要么都不执行。

事物的四大特性(ACID):

(1)原子性:事物是最小执行单元不可再分割,原子性确保动作要么全部完成,要么全部不完成;

(2)一致性:执行事物前后数据保持一致,多个事物对同一个数据读取结果相同;

(3)隔离性:并发访问数据库时,一个用户的事物不被其他事物干扰,彼此间独立;

(4)持久性:一个事物提交后,它对数据库中的数据改变是持久的,即使数据库发生故障也不用改对其有影响。

 

MySQL 命令行的默认配置中事务都是自动提交的,执行SQL语句后马上执行 COMMIT 操作,而Oracle不会)

2.3、并发事物带来的问题

经常会出现多个事物并发运行,操作相同的数据来完成各自的任务,也就是多个用户对同一数据操作,可能会导致如下问题:

(1)脏读:当一个事物正在访问数据并且对数据进行了修改,这种修改还没有提交到数据库中,这时另一个事物也访问并使用了这个数据。因为读的是还没有提交的数据所以读取的是“脏数据”,脏数据可能是不正确的。

(2)丢失修改:一个事物读取一个数据时另一个事物也访问了该数据。第一个事物修改了这个数据后,第二个事物也修改了这个数据,这样第一个事物修改的结果就被丢失

(3)不可重复读:一个事物内多次读取同一个数据。这个事物还没有结束时另一个事物也访问了该数据,在第一个事物两次读取数据之间,由于第二个事物的修改导致第一个事物两次读取的数据可能不太一样。导致同一个事物内两次读取到数据不一样,就是不可重复读。(重点在修改)

4)幻读:与不可重复读类似。它发生在一个事物读取了几行数据,接着另一个并发事物插入一些数据。对吼查询中第一个事物发现多了一些不存在的记录就好像发生幻觉一样。(重点在新增或者删除)

 

不可重复读和幻读区别:

不可重复读重点是修改,比如多次读取一条记录发现其中某些列值被修改;幻读重点是新增或者删除,比如多次读取一条记录发现记录增多或者减少了。

2.4、事物隔离级别

(1)READ_UNCOMMITTED(最低隔离级别)——读取未提交——脏读、幻读、不可重复读

允许读取尚未提交数据,可能会导致脏读、幻读、不可重复读

(2)READ_COMMITTED——Oracle默认——读取已提交——幻读、不可重复读

允许读取并发事物已提交的数据,可阻止脏读,但幻读和不可重复读仍可发生。

(3)REPEATABLE_READ——MySQL默认——可重复读——幻读

对同一字段多次读取结果一致(除非被本身事物修改),可以阻止脏读和不可重复读,幻读仍可发生

(4)SERIALIZABLE(最高隔离级别)——可串行化——都可防止

完全服从ACID的隔离级别,所有事物依次执行,可防止脏读、不可重复读、幻读。但是性能不好不常用

 

2.5、数据库三大范式

第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列;

第二范式(2NF):首先是 1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分;

第三范式(3NF):首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。

(2NF与3NF容易混淆:2NF——非主键列是否完全依赖于主键,还是依赖于主键的一部分;3NF——非主键列是直接依赖于主键,还是直接依赖于非主键列)

三、多版本并发控制(MVCC)

仅 InnoDB 支持。应对高并发事务, MVCC比单纯的加锁更高效,MVCC只在“读取已提交”和“可重复读”隔离级别工作,MVCC可以使用乐观锁、悲观锁来实现,各数据库MVCC并不统一。

案例1:例如在商品表里边有个乐观锁字段,在高并发时用于版本控制:

......待更新

四、存储引擎

4.1、MyISAM与InnoDB的区别

(1)MySQL不同版本默认存储引擎不同:MyISAM是5.5版本之前的默认引擎,InnoDB是5.5版本之后的;

(2)是否支持行级锁:MyISAM只支持表级锁,而InnoDB即支持表级锁又支持行级锁,默认是行级锁;

(3)是否支持事物和崩溃后恢复:MyISAM强调的是性能,每次查询具有原子性,速度比InnoDB更快(不是绝对的),但不提供事物支持,不可崩溃恢复;InnoDB 提供事物支持和外部键等功能,具有事物(commit)、回滚、崩溃恢复、事物安全(ACID)

(4)是否支持外键:MyISAM不支持、InnoDB支持;

(5)是否支持多版本并发控制(MVCC):仅InnoDB支持,应对高并发事物MVCC比单纯加锁更高效。

 

 

五、MySQL主从复制(自带的工功能)

Mysql 环境安装参考: https://blog.csdn.net/a774630093/article/details/79270080

关闭防火墙 systemctl stop firewalld.service

5.1、主从复制原理 

MySQL有一种日志叫bin日志(二进制日志binLog),这个日志会记录所有修改了数据库的SQL语句。主从复制原理就是把主服务器上的bin日志复制到从服务器上执行一遍,这样从服务器上的数据就和主服务器上的数据相同了。

 

疑问1:如果MySQL集群,需要考虑哪些问题?——数据实时同步问题,通过主从复制可实现。

疑问2:不小心删表了怎么办?——所有变更都可到binLog文件找日志,然后恢复就行了

5.2、主从复制目的

通过主从复制可以实现数据备份、故障转移、高可用、集群、读写分离

5.3、主从复制配置

主服务器节点:

vi /etc/my.cnf  新增以下内容
server_id=177  ###服务器id
log-bin=mysql-bin   ###开启日志文件
重启mysql服务 service mysqld restart
验证是否已经配置成功
show variables like '%server_id%';
能够查询对应配置文件中的server_id 说明已经配置成功
show master status;
能够看到同步的文件,和行数 说明已经配置成功。

从服务器节点:

克隆服务器
vi /etc/my.cnf
server_id=178  ###从服务器server_id
log-bin=mysql-bin  ###日志文件同步方式
binlog_do_db=test   ###同步数据库


重启mysql服务 service mysqld restart
验证是否已经配置成功
show variables like '%server_id%';
能够查询对应配置文件中的server_id 说明已经配置成功

从服务器同步主服务器配置
change master to master_host='192.168.212.200',master_user='root',master_password='root',
         master_log_file='mysql-bin.000002',master_log_pos=216;
开始同步 
start slave
检查从服务器复制功能状态
SHOW SLAVE STATUS

Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

解决办法
因为服务器克隆的时候交UUID产生了重复 ,解决办法

Cat  /etc/my.cnf
cd /var/lib/mysql
rm -rf auto.cnf
重启服务器即可
service mysqld restart

 

 

下一篇:https://blog.csdn.net/RuiKe1400360107/article/details/103778112

  参考资料:《高性能MySQL 第三版》

 

### 若对你有帮助的话,欢迎点赞!评论!转发!谢谢!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《高性能MySQL》一书是一本涵盖MySQL性能优化方方面面的经典著作,对MySQL性能优化、架构设计等方面有着深入浅出的介绍,为MySQL从入门到精通的一本好书。 本书总共分为四个部分,包括MySQL架构与历史、查询性能优化、服务器性能优化、高可用性架构。 在第一部分中,回顾了MySQL的历史背景以及MySQL的架构和技术栈,帮助读者建立MySQL的知识框架。 在第二部分中,主要介绍了如何通过索引、查询优化、外部程序优化等手段来实现查询性能优化。 在第三部分中,主要介绍了服务器参数优化、MySQL主从同步、复制、高可用性以及MySQL的安全策略等内容。 在第四部分中,讲述了MySQL高可用性的实现方案和技术实现。 总之,《高性能MySQL》的价值在于它全面系统地介绍了如何使MySQL运行得更快、更可靠、更可用。本书内容丰富,适合DBA、开发人员等技术人员学习和使用。同时,本书也是管理相对资料比较全面的MySQL性能百科全书,是一本非常值得投资的技术书籍。 ### 回答2: CSDN高性能MySQL是一本介绍MySQL数据库相关优化的书籍。MySQL是一种常见的关系型数据库,但在实际使用中,可能会面临性能问题。这本书介绍了如何通过优化MySQL的配置、调整参数、设计表结构、使用索引、使用存储引擎等方式,来提升MySQL数据库的性能。 书中介绍了MySQL的基本原理和内部结构,以及MySQL的架构模式和使用场景。同时,书中也详细介绍了如何使用MySQL的命令行工具和GUI工具来管理和优化MySQL数据库。书中包含了很多具体的操作步骤和实例代码,读者可以根据自己的需要进行实践和测试。 CSDN高性能MySQL还介绍了一些高级的MySQL优化技术,比如使用分区表、使用多个MySQL实例、使用缓存技术等。这些技术可以进一步提升MySQL的性能和稳定性,但需要一定的专业知识和经验。因此,读者需要根据自身的实际情况和需要,选择合适的优化方案和技术。 总的来说,CSDN高性能MySQL是一本非常实用的MySQL优化指南。通过学习这本书,读者可以了解到MySQL数据库的基本原理和常见性能问题,掌握MySQL的优化技术和方法,提升MySQL数据库的性能和稳定性,为实际应用提供更好的支持。 ### 回答3: CSDN是一个开发人员的社区,涵盖了各种主题。本文主要讨论高性能MySQL数据库方面的主题。 MySQL是当今最流行的关系型数据库,其高植入性和广泛使用使得MySQL具有很高的性能和可扩展性。本文从多个角度探讨了如何使MySQL高效运行,包括MySQL体系结构、数据库设计、查询优化和缓存机制等方面。同时,还涵盖了MySQL的高可用性、备份和恢复、以及数据安全和保护等主题。 高性能MySQL内部原理的深入探讨让读者了解MySQL架构的核心,并为其开发和维护MySQL应用程序提供了宝贵的指引。读者可以通过阅读本文,从中获得一些性能优化的想法和技巧,并将其应用于实际的MySQL项目中。 总之,高性能MySQL是CSDN社区上一个非常有价值的主题,为MySQL开发者提供了详实的指导和经验分享。如果你是一个MySQL开发者,那么我非常建议你读一下这篇文章,相信你会从中受益匪浅。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值