第二课——解析mysqldump命令和mysqlbinlog命令+innodb和Myisam存储引擎简介
环境说明
mysql版本:Percona-Server-5.6.30
IP:10.7.15.167
端口:3306
安装目录:/httx/run/mysql
数据目录:/httx/run/mysql/data/
mysqldump的常用参数
mysqldump测试——–研究加–single_transaction参数的区别
开启general_log日志,跟踪mysql操作日志
(general_log日志可以方便跟踪所有mysql上的操作,但是生产环境不建议开启,占用资源、消耗内存)
mysql> show variables like '%general%';
+------------------+--------------------------------------+
| Variable_name | Value |
+------------------+--------------------------------------+
| general_log | OFF |
| general_log_file | /httx/run/mysql/data/web-test-46.log |
+------------------+--------------------------------------+
2 rows in set (0.00 sec)
mysql> set global general_log=on;
Query OK, 0 rows affected (0.00 sec)
数据库test情况表情况如下:
mysql> use test
Database changed
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| cv |
| cv2 |
| dept |
+----------------+
mysqldump命令导出test库数据,不带–single_transaction参数
[root@web-test-46 run]#mysqldump --socket=/httx/run/mysql/data/mysql.sock test >/tmp/test-nosingle.sql
不带--single-transaction参数的mysqldump备份过程:
备份前准备:连接到数据库后,设置sql_mode、time_zone等;
开始备份:先查看数据库有哪些表(show tables),根据表挨个备份:备份前先锁表(LOCK TABLES),且一个表备份完不会释放锁,而 是继续备份下一个表,直到全部备份好,才会UNLOCK tables.
注意:不带--single-transaction参数的mysqldump,备份过程全程锁表且没有创建数据一致性快照,这样会导致备份过程会阻塞数据库和数据不一致。
mysqldump命令导出数据,带–single_transaction参数
[root@web-test-46 run]#mysqldump --socket=/httx/run/mysql/data/mysql.sock test >/tmp/test-nosingle.sql
带上--single-transaction参数的mysqldump备份过程:
备份前准备:连接到数据库后,设置sql_mode、time_zone,设置事务隔离级别为RR;开启一个事务,生成一致性快照,保存数据库此刻的 状态。
开始备份:创建保存点(savepoint sp),先查看数据库有哪些表(show tables),根据表挨个备份:备份过程先备份表结构(show create t able)再备份数据(select * from),查询时不使用缓存以免备份脏数据(SQL_NO_CACHE)。备份完之后需要回滚到保存点(ROLL BACK TO SAVEPOINT sp),然后接着备份下一个表。
注意:备份一个表前都要回滚到保存点,这样是为了保证数据的一致性,即使数据没有更新也要回滚。
======================================================================================================
mysqldump命令
1、mysqlbinlog常用参数
推荐查看row模式二进制日志的方式:
mysqlbinlog --base64-output=decode-rows
mysqlbinlog -v或者mysqlbinlog -vv
============================================================================================================
其他常用命令
====================================================================================================================
常用存储引擎
1、INNODB存储引擎
innodb存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比myisam存储引擎,innodb写的处理效率差一些且会占用更多的磁盘空间以保留数据和索引。
innodb通过使用MVCC来获取高并发性,且实现SQL标准的4种隔离级别,同时使用一种被称为next-key locking(间隙锁)的策略来避免幻读(phantom)现象。除此之外innodb存储引擎还提供插入缓冲(insert buffer)、二次写(double write)、自适应哈希索引(adaptive hash index)、预读(read ahead)等高性能技术。
(1)MVCC:Multi-Version Concurrency Control 多版本并发控制。大多数的MySQL事务型存储引擎,例如innodb、Falcon都不使用一种简单的行锁机制,而是和MVCC一起使用。MVCC不仅在MySQL中,在oracle、postgreSQL里也同样使用MVCC.
MVCC会保存某个时间点上的数据快照,这意味着事务可以看成一个一致的数据视图,不管他们需要跑多久。这也意味着不同的事务在同一个时间点看到的同一个表的数据可能是不同的。各个存储引擎对于MVCC的实现各不相同,这些不同种的一些包括乐观和悲观并发控制。
我们将通过一个简化的InnoDB版本的行为来展示MVCC工作的一个侧面。InnoDB:通过为每一行记录添加两个额外的隐藏的值来实现MVCC,这两个值一个记录这行数据何时被创建,另外一个记录这行数据何时过期(或者被删除)。但是InnoDB并不存储这些事件发生时的实际时间,相反它只存储这些事件发生时的系统版本号。这是一个随着事务的创建而不断增长的数字。每个事务在事务开始时会记录它自己的系统版本号。每个查询必须去检查每行数据的版本号与事务的版本号是否相同。让我们来看看当隔离级别是REPEATABLE READ时这种策略是如何应用到特定的操作的:
(1.1)SELECT: InnoDB必须保证每行数据符合以下2个条件:a、InnoDB必须找到一个行的版本,它至少要和事务的版本一样老(也即它的版本号不大于事务的版本号)。这保证了不管是事务开始之前,或者事务创建时,或者修改了这行数据的时候,这行数据是存在的。b、这行数据的删除版本必须是未定义的或者比事务版本要大。这可以保证在事务开始之前这行数据没有被删除。这里的不是真正的删除数据,而是标志出来的删除。真正意义的删除是在commit的时候。符合这两个条件的行可能会被当作查询结果而返回。
(1.2)INSERT:InnoDB为这个新行记录当前的系统版本号。
(1.3)DELETE:InnoDB将当前的系统版本号设置为这一行的删除ID。
(1.4)UPDATE:InnoDB会写一个这行数据的新拷贝,这个拷贝的版本为当前的系统版本号。它同时也会将这个版本号写到旧行的删除版本里。这种额外的记录所带来的结果就是对于大多数查询来说根本就不需要获得一个锁。他们只是简单地以最快的速度来读取数据,确保只选择符合条件的行。这个方案的缺点在于存储引擎必须为每一行存储更多的数据,做更多的检查工作,处理更多的善后操作。
MVCC只工作在REPEATABLE READ和READ COMMITED隔离级别下。READ UNCOMMITED不是MVCC兼容的,因为查询不能找到适合他们事务版本的行版本;它们每次都只能读到最新的版本。 SERIABLABLE也不与MVCC兼容,因为读操作会锁定他们返回的每一行数据[1] 。
(2)next-key locaking策略:MySQL innodb的间隙锁定(next-key locking)是为了防止幻读(phantom read),当MySQL的isolation level设为repeatable read的时候会触发间隙锁定。next-key的具体工作方式为:a、 选择一个不存在的行,则锁住所有的insert行为;b、用范围select,如select * from test where id>100,会锁住所有id>100的insert行为。
在行级锁定中,InnoDB 使用一个名为next-key locking的算法。InnoDB以这样一种方式执行行级锁定:当它搜索或扫描表的索引之时,它对遇到的索引记录设置共享或独占锁定。因此,行级锁定事实上是索引记录锁定。
InnoDB对索引记录设置的锁定也映像索引记录之前的“间隙”。如果一个用户对一个索引上的记录R有共享或独占的锁定,另一个用户不能紧接在R之前以索引的顺序插入一个新索引记录。这个间隙的锁定被执行来防止所谓的“幽灵问题”。假设你想要从有一个标识符值大于100的子表读并锁定所有子记录,并想着随后在选定行中更新一些列:
SELECT * FROM child WHERE id > 100 FOR UPDATE;
假设在id列有一个索引。查询从id大于100的第一个记录开始扫描。如果设置在索引记录上的锁定不把在间隙生成的插入排除在外,一个新行可能与此同时被插进表中。如果你在同一事务内执行同样的SELECT,你可能会在该查询返回的结果包里看到一个新行。这与事务的隔离原则是相反的:一个事务应该能够运行,以便它已经读的数据在事务过程中不改变。
当InnoDB扫描一个索引之时,它也锁定所以记录中最后一个记录之后的间隙。刚在前一个例子中发生:InnoDB设置的锁定防止任何插入到id可能大过100的表。
你可以用next-key锁定在你的应用程序上实现一个唯一性检查:如果你以共享模式读数据,并且没有看到你将要插入的行的重复,则你可以安全地插入你的行,并且知道在读过程中对你的行的继承者设置的next-key锁定与此同时阻止任何人对你的行插入一个重复。因此,the next-key锁定允许你锁住在你的表中并不存在的一些东西。
innodb特性:
——支持外键
——支持行锁
——支持事务
——非锁定读(读操作不会产生锁)
——聚集索引结构存储数据
2、MyISAM存储引擎
myisam存储引擎,不支持事务也不支持外键,访问速度快。对事务完整性没有要求或者以select、insert为主的应用基本都可以使用这个存储引擎来创建表。
每个myisam在磁盘上存储成3个文件,其中文件名和表名都相同,但是扩展名分别为:.frm .MYI .MYD
第二课——解析mysqldump命令和mysqlbinlog命令+innodb和Myisam存储引擎简介的更多相关文章
- 红帽学习笔记[RHCSA] 第二课[文件、目录、相关命令]
第二课 常用的目录结构与用途 / 根目录 /boot 存储的是系统起动时的信息和内核等 /dev 存储的是设备文件 /etc 存储的是系统的配置文件 /root 存储的是root用户的家目录 /hom ...
- 【Mongodb教程 第二课 】 MongoDB 创建数据库 use 命令
use 命令 MongoDB use DATABASE_NAME 用于创建数据库.该命令将创建一个新的数据库,如果它不存在,否则将返回现有的数据库. 语法: use DATABASE 语句的基本语法如 ...
- 【Linux探索之旅】第二部分第二课:命令行,世界尽在掌握
内容简介 1.第二部分第二课:命令行,世界尽在掌握 2.第二部分第三课预告:文件和目录,组织不会亏待你 命令行,世界尽在掌握 今天的标题是不是有点霸气侧漏呢? 读者:“小编,你为什么每次都要起这么非主 ...
- 第二课补充01——redis-cli命令行详解、string类型、list类型、hash类型命令操作详解
一. redis-cli命令行参数 1.-x参数:从标准输入读取一个参数: [问题] [解决] 因为echo命令是默认带有回车\n的,不带回车需要echo –n命令: echo -n "ha ...
- Mysql: mysqlbinlog命令查看日志文件
想查看mysql的binlog文件,但是裸的binlog文件是无法直视的,mysqlbinlog这个工具是用来查看binlog文件内容的(使用方式man mysqlbinlog查看),但是使用mysq ...
- 超级有用的15个mysqlbinlog命令
在MySQL或MariaDB中,任意时间对数据库所做的修改,都会被记录到日志文件中.例如,当你添加了一个新的表,或者更新了一条数据,这些事件都会被存储到二进制日志文件中.二进制日志文件在MySQL主从 ...
- centos 特殊权限 各种搜索命令 lsattr ,chattr,suid,sgid,sbit,file,type是否是内置命令,stat文件属性 ,whereis,locate,find,ln 内部命令和外部命令 第五节课
centos 特殊权限 各种搜索命令 lsattr ,chattr,suid,sgid,sbit,file,type是否是内置命令,stat文件属性 ,whereis,locate,find,ln ...
- CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令
相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...
- Mysql的binlog日志与mysqlbinlog命令
binlog相关 MySQL 的二进制日志 binlog 可以说是 MySQL 最重要的日志,它记录了所有的 DDL 和 DML 语句(除了数据查询语句select.show等),以事件形式记录,还包 ...
随机推荐
- leetcode——Lowest Common Ancestor of a Binary Tree
题目 Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. 思路 这一次 ...
- PsExec使用
01. 创建一个 Process Process.FileName ="文件路径及文件名称" Process.Arguments ="\\PC PI地址 -u 用户名 - ...
- setTime
var getTime = function() { var _ = ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09'], //补 ...
- Atitit.php nginx页面空白 并返回500的解决
Atitit.php nginx页面空白 并返回500的解决 1.1. 空白问题起源1 1.2. Php.ini 开启display_err1 1.3. 修改www.conf ,并重启动.重启php ...
- android studio - 修改logcat颜色字体
修改logcat 颜色 (1) 在Android Studio 菜单栏 打开 Preferences -> Editer -> Colors & Fonts -> Andr ...
- iptables 使用
原文链接 本文介绍25个常用的iptables用法.如果你对iptables还不甚了解,可以参考上一篇iptables详细教程:基础.架构.清空规则.追加规则.应用实例,看完这篇文章,你就能明白ipt ...
- python学习之getdefaultlocale()函数
def getdefaultlocale(envvars=('LC_ALL', 'LC_CTYPE', 'LANG', 'LANGUAGE')) 返回一个二元组. >>> local ...
- 快速解读GC日志
本文是 Plumbr 发行的 Java垃圾收集指南 的部分内容.文中将介绍GC日志的输出格式, 以及如何解读GC日志, 从中提取有用的信息.我们通过 -XX:+UseSerialGC 选项,指定JVM ...
- 使用AccessibilityService实现微信自己主动抢红包
近期要实现微信自己主动抢红包的功能.使用AccessibilityService来开发,这里主要写一下逻辑以及注意点. 注意点 1.搜索keyword 我们实现某个功能比方点击等须要找到相应的对象然后 ...
- Android Intent 用法全面总结(转载)
1. [代码]调用拨号程序 1 2 3 4 // 给移动客服10086拨打电话 Uri uri = Uri.parse("tel:10086"); Intent intent = ...