本文目录一览:
- 1、MySQL的事务两阶段提交的技术有什么意义?
- 2、简介mysql之mysql语句执行流程
- 3、如何动态监控mysql binlog
- 4、mysql恢复数据mysqlbinlog
- 5、如何实现mysql 数据库的二进制日志回滚
- 6、如何使用mysql 两阶段提交
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使用