首页 > 编程知识 正文

mysql源码之两阶段提交,数据库两阶段提交

时间:2023-12-28 11:57:11 阅读:328436 作者:BUGB

本文目录一览:

MySQL的事务两阶段提交的技术有什么意义?

主要解决分布式事务时的并发控制问题,两阶段提交协议是分布式事务管理的主要算法

简介mysql之mysql语句执行流程

1.一条查询语句如何执行?

2.一条更新语句如何执行?

3.innodb的redolog是什么?

4.什么是写缓冲

5.写缓冲一定好吗?

6.什么情况会引发刷脏页

关于一条mysql查询语句在mysql中的执行流程

如select name from test where id=10;

1.连接器---先与mysql服务端连接器建立连接,若查询缓存命中则直接返回 (查询缓存的弊端:查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。)

2.分析器---词法分析告诉服务端你要干什么(我要找 test表中id为10的名字) ( 其中sql语法错误在这块暴露 )

3.优化器---服务端会思考该怎么执行最优(索引的选择)

4.执行器---检查用户对库对表的权限

5.存储引擎--存储数据,提供读写接口

以update a set name=1 where id=1;

主要区别在于在查询到数据之后(select name from a where id=1),如果是innodb引擎它会进行日志的两阶段提交:

1.开启事务,写入redolog(innodb引擎特有),并更新内存

3.写入binlog,提交事务,commit

我们知道mysql数据存储包含内存与磁盘两个部分,innodb是按数据页(通常为16k)从磁盘读取到内存中的(剩余操作在内存中执行),当要更新数据时,若目标数据的数据页刚好在内存中,则直接更新。不在呢?

将这个更新操作(也可能是插入) 缓存在change buffer中 (redolog也会记录这个change buffer操作)等到下一次查询要用到这些数据时,再执行这些操作,改变数据(称为合并操作记录称为merge)。

innodb_change_buffer_max_size

innodb_change_buffering

先介绍两个概念

因为redolog是环形日志,当redolog写满时,就需要“擦掉”开头的一部分数据来达到循环写,这里的擦掉指,指将redolog日志的checkpoint位置从 CP推进到CP‘ ,同时将两点之间的脏页刷到磁盘上(flush操作),此时系统要停止所有的更新操作(防止更新操作丢失)

1.系统内存不足。当要读取新的内存页时就要淘汰一些数据页,如果淘汰的正好是脏页,就要执行一次flush操作

2.Mysql认为系统处于“空闲状态”

3.正常关闭Mysql

上述后两者场景(系统空闲和正常关闭)对于性能都没太大影响。

当为第一种redolog写满时,系统无法执行更新操作,所有操作都会堵塞

当为第二种内存不够用时,如果淘汰脏页太多,影响mysql响应时间

后两者刷脏页会影响性能,所以Mysql需要有刷脏页控制策略,可以从以下几个设置项考虑

1.设置innodb_io_capacity告诉innodb所在主机的IO能力

如何动态监控mysql binlog

有两种方法,一种方法使用mysql的check table和repair table 的sql语句,另一种方法是使用MySQL提供的多个myisamchk, isamchk数据检测恢复工具。前者使用起来比较简便。推荐使用。

1. check table 和 repair table

登陆mysql 终端:

mysql -uxxxxx -p dbname

check table tabTest;

如果出现的结果说Status是OK,则不用修复,如果有Error,可以用:

repair table tabTest;

进行修复,修复之后可以在用check table命令来进行检查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。

2. myisamchk, isamchk

其中myisamchk适用于MYISAM类型的数据表,而isamchk适用于ISAM类型的数据表。这两条命令的主要参数相同,一般新的系统都使用MYISAM作为缺省的数据表类型,这里以myisamchk为例子进行说明。当发现某个数据表出现问题时可以使用:

myisamchk tablename.MYI

进行检测,如果需要修复的话,可以使用:

myisamchk -of tablename.MYI

关于myisamchk的详细参数说明,可以参见它的使用帮助。需要注意的时在进行修改时必须确保MySQL服务器没有访问这个数据表,保险的情况下是最好在进行检测时把MySQL服务器Shutdown掉。

另外可以把下面的命令放在你的rc.local里面启动MySQL服务器前:

[ -x /tmp/mysql.sock ] /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI

其中的/tmp/mysql.sock是MySQL监听的Sock文件位置,对于使用RPM安装的用户应该是/var/lib/mysql/mysql.sock,对于使用源码安装则是/tmp/mysql.sock可以根据自己的实际情况进行变更,而pathtochk则是myisamchk所在的位置,DATA_DIR是你的MySQL数据库存放的位置。

需要注意的时,如果你打算把这条命令放在你的rc.local里面,必须确认在执行这条指令时MySQL服务器必须没有启动!检测修复所有数据库(表)

mysql恢复数据mysqlbinlog

有完整备份的话,先用完整备份还原下,然后在用binlog恢复从完整备份到当前时间点的数据。

如果没有完整备份的话,使用binlog也可以恢复,不过10G的数据可能需要很长的时间。

相关语法如下:

mysql -hlocalhost test 完整备份

mybinlog -hlocalhost 1.sql

如何实现mysql 数据库的二进制日志回滚

mysql命令行下怎样实现数据的回滚操作

在MySQL有时执行了错误的update或者delete时导致大量数据错误恢复的办法。执行时没有开启事务,也没有对数据进行。这时就需要使用到sqlbinlog工具。

sqlbinlog需要开启,具体的打开方法就不说了。

使用sqlbinlog会产生bin文件,恢复就需要用到这些文件。文件中记录着数据库的所有操作。(此方法的操作是将数据库之前所执行的语句重新执行一次,以达到恢复效果)

具体步骤:1,先找到bin文件,一般都是在mysql的data文件夹中,结尾以.00000X等形式结束。

2,寻找需要还原的时间点 使用语句 mysqlbinlog 文件名 例(MySQLbinlog xxbin.000001)来查看内容,然后找到对应的具体时间

3,导出sql语句,使用语句 mysqlbinlog 文件名sql文件路径 例(mysqlbinlog xxxbin,00001a.sql | mysql -u root -p )

如果需要指定时间导出--start--date -stop='' --date='' 来导出指定时间执行的语句例(sqlbinlog --start-stop='2015-11-22 10:00:00' xxbin.000001a.sql | mysql -u root -p )这句意思是导出在2015-11-22 10点之前的语句,反之start是导出时间之后的。 start和stop可以同时使用。

如果存在多个bin文件,则按照需要导出。

4,使用mysql将导出的语句执行一次。

如何使用mysql 两阶段提交

第阶段:Java面向象编程

1.Java基本数据类型与表达式支循环

2.StringStringBuffer使用、则表达式

3.面向象抽象封装继承态类与象象初始化收;构造函数、this关键字、参数传递程、static关键字、内部类Java垃极收机制Javadoc介绍

4.象实例化程、覆盖、final关键字、抽象类、接口、继承优点缺点剖析;象态性:类父类间转换、抽象类接口态应用、态带处

5.Java异处理异机制原理

6.用设计模式:Singleton、Template、Strategy模式

7.JavaAPI介绍:种基本数据类型包装类SystemRuntime类DateDateFomat类等

8.Java集合介绍:Collection、Set、List、ArrayList、Vector、LinkedList、Hashset、TreeSet、Map、HashMap、TreeMap、Iterator、Enumeration等用集合类API

9.Java

I/O输入输流:FileFileRandomAccess类字节流InputStreamOutputStream字符流Reader

Writer及相应实现类IO性能析字节字符转化流包装流概念及用包装类计算机编码

10.Java高级特性:反射、代理泛型

11.线程原理:何程序创建线程(Thread、Runnable)线程安全问题线程同步线程间通讯、死锁

12.Socket网络编程

第二阶段:Java

Web发

1.Java解析XML文件DOM4J

2.MySql数据库应用、表连接查询应用

3.JspServlet应用

4.Http协议解析

5.Tomcat服务器应用配置

6.WebService服务配置应用

第三阶段:android UI编程

1、Android发环境搭建:Android介绍Android发环境搭建第Android应用程序Android应用程序目录结构

2、Android初级控件使用:

TextView控件使用

Button控件使用

EditText控件使用

ImageView使用

RadioButton使用

Checkbox使用

Menu使用

3、Android高级控件使用:

Autocompletion使用

ListView使用

GridView使用

Adapter使用

Spinner使用

Gallary使用

ScrollView使用

4、框与菜单使用:

Dialog基本概念

AlertDialog使用

DatePickerDialog使用

Menu使用

自定义Menu实现

5、控件布局:

线性布局使用

相布局使用

表格布局使用

6、Acitivity管理:

AndroidManifest.xml文件作用

Intent使用

使用Intent传递数据

启Activity

IntentFilter使用

Activity Group使用

7、自定义控件实现:

自定义ListView实现

折叠ListView使用

自定义Adapter实现

自定义View实现

态控件布局实现

第四阶段:android网络编程与数据存储

1、基于Android平台HTTP通讯:

Http协议顾

Apache Commons 工具包介绍

使用Get向服务器提交数据

解析服务器响应数据

使用POST向服务器提交数据实现

向服务器提交非文本数据实现

使用Http协议实现线程载

使用Http协议实现断点续传

2、Android数据存储技术:

SQLite3数据库简介

SQL语句顾

SQLite3编程接口介绍

SQLite3事务管理

SQLite3游标使用

SQLite3性能析

访问SDCard

访问SharedPreferences

3、ContentProvider使用:ContentProvider实现共享数据、URI

解析与UriMatcher、ContentUris使用、使用ContentResolver操作ContentProvider、

ContentProvider监听Android异步操作:Handler使用;异步任务基本概念;AsyncTask使用

第五阶段:android手机硬件管理

1、图及定位技术:GPS简介;LocationManager使用;Google Map添加标记;查询某附近建筑;使用Google Map实现点点导航

2、传器使用:向、加速度(重力)、光线、磁场、距离、温度等传器使用

3、近场通信技术:NFC技术简介;NFC技术用场景介绍;NFC技术实现

4、媒体管理技术:MediaPlayer使用

5、触摸屏技术:手势识别;点触摸技术

第六阶段:Android图形编程技术

1、图形处理基础:2D图形编程基础;

2、点、线、面等基本图形元素绘制;

3、Android画框架简介;

4、位移画实现;

5、淡入淡画实现;

6、旋转画实现;

7、Matrix使用

第七阶段:Android游戏发

1、Android游戏发:Android游戏发概述;

2、SurfaceView使用;

3、物理球技术;

4、碰撞检测技术;

5、图片、文字背景音乐等资源使用;

6、游戏引擎基础概念;

7、Cocoa2d-Android引擎使用;

8、OpenGL ES使用

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。