MySQL事务及字符集介绍

原文 http://www.abcdocker.com/abcdocker/77


事务介绍

简单来说,事务就是指逻辑上的一组SQL语句操作,组成这组操作的各个SQL语句,执行时要么全成功要么全失败。 
  MySQL5.5支持事务的引擎:Innodb/ndb

事务四大特性(ACID)

1.原子性(Atomicity)
事务是一个不可分割的单位,事务中的所有SQL等操作要么全都发生,要么都不发生
2.一致性(Consistency)
事务发生前和发生后,数据的完整性必须保持一致
3.隔离性(Isolation)
当并发访问访问数据库时,一个正在执行的事务在执行完毕前,对于其他的会话是不可见的,多个并发事务之间的数据库是相互隔离的。
4.持久性(Durability)
一个事务一旦被提交,它对数据库中的数据改变就是永久性的。如果出了错误,事务也不允许撤销,只能通过“补偿性事务”

事务的开启

数据库默认事务是自动提交的,也就是发一条sql它就执行一条。如果想多条sql放在一个事务中执行,则需要使用事务进行处理。当我们开启一个事务,并且没有提交,mysql会自动回滚事务,或者我们使用rolback命令回滚事务。
MySQL默认是自动提交的,也就是提交一个QUERY,它就直接执行!我们可以通过以下命令进行查询:
  1. mysql> show variables like "%autocommit%";
  2. +---------------+-------+
  3. | Variable_name | Value |
  4. +---------------+-------+
  5. | autocommit    | ON    |
  6. +---------------+-------+
  7. 1 row in set (0.00 sec)

禁止自动提交

mysql>set global autocommit=OFF
mysql>set global autocommit=NO 开启自动提交
rolback回滚事务(oracle)
commit提交事务(oracle)

MySQL引擎概述

1.1 什么是存储引擎?

我们先来个比喻,我们都知道录制一个视频文件,可以转成不同的格式如mp4、avi、wmv等,而存在我们电脑的磁盘上也会存在不同类型的文件系统中windows里常见的nfs,fat32.存在于linux常见的ext3,ext4,xfs。但是我们活着用户看到实际视频内容是一样的。直观区别是,占用系统的空间大小与清晰程度可能不一样

1.2 MySQL存储引擎架构

MySQL的存储引擎是MySQL数据库的重要组成部分,MySQL常用的表的引擎为MyISAM和InnoDB两种。MySQL的美中存储引擎在MySQL里通过插件的方式使用的。MySQL可以同时支持多种存储引擎。

MyISAM引擎介绍

1.1什么是MyIASM引擎?

MyIASM引擎是MySQL关系数据库管理系统的默认存储引擎(MySQL 5.5.5以前)这种MySQL表的存储结构从旧的IASM代码扩展出许多有用的功能。在新版本的MySQL中,InnoDB引擎由于对事物参考完成行,以及更好的并发性等优点开始逐渐的取代MyIASM引擎。
可以使用show create table 库名\G,查看创建表
  1. mysql> show create table user\G
  2. ENGINE=MyISAM

  3. mysql> show create table wp_users\G
  4. ENGINE=InnoDB
提示:MySQL5.1数据库的默认存储引擎为MyIASM
每一个MyIASM的表都对应与硬盘上的三个文件。这三个文件有一样的文件名,但是有不同的扩展名指示其类型用途:frm文件保存表的定义,这个文件并不是MyISAM引擎的一部分,而是服务器的一部分;MYD保存表的数据;MYI是表的索引文件。MYD和MYI是MyIASM的关键
  1. [root@db02 /]# ll /data/3306/data/mysql
  2. -rw-rw---- 1 mysql mysql   9996 Jun 20  2016 proc.frm
  3. -rw-rw---- 1 mysql mysql      0 Jun 20  2016 proc.MYD
  4. -rw-rw---- 1 mysql mysql   2048 Jun 20  2016 proc.MYI
  5. ---------------------分割线----------------------
  6. [root@db02 mysql]# file user.MYI 
  7. user.MYI: MySQL MISAM compressed data file Version 1
  8. [root@db02 mysql]# file user.MYD 
  9. user.MYD: DBase 3 data file (167514107 records)
  10. [root@db02 mysql]# file user.frm 
  11. user.frm: MySQL table definition file Version 9
提示:系统大多数用的是MyISAM引擎
1、为什么MySQL5.5 以前默认是mysiasm引擎,而mysql5.5.5 以后默认是innodb?
2、为什么mysql库内部表默认是mysqlisam引擎?

1.2 MyISAM引擎特点(此处面试最好全说出来)

1.不支持事务
(事务是指逻辑上的一组操作,组成这组操作的各个单元,要么全成功要么全失败)
2.表级锁定,数据更新时锁定整个表:其锁表机制是表级锁定,这虽然可以让锁定的实现成本很小但是也同时大大降低了其并发性能。
3.读写互相阻塞:不仅会在写入的时候阻塞读取,MyIASM还会在读取的时候阻塞写入,但读本身并不会阻塞另外的读。
4.只会缓存索引:MyIASM可以通过key_buffer_size缓存索引,以大大提高访问性能减少磁盘IO。但是这个缓存区只会缓存索引,而不会缓存数据。
  1. [root@db01 ~]# grep key_buffer_  /etc/my.cnf 
  2. key_buffer_size = 16K
5.读取速度较快,占用资源相对少
6.不支持外键约束,但支持全文索引
7.MyISAM引擎是MySQL5.5.5 前缺省的存储引擎

1.3 MyIASM引擎适用的生产业务场景

1)不需要事务支持的业务(例如转账就不行)
2)一般为读数据比较多的应用,读写都频繁场景不适合,读多或者写多的都适合。
3)读写并发访问相对较低的业务(纯读纯写高并发也可以)(锁定机制问题)
4)数据修改相对较少的业务(阻塞问题)
5)以读为主的业务,例如:数据库系统表、www、blog图片信息数据库,用户数据库。商品库等业务
6)对硬件一致性要求不是非常高的业务(不支持事务)
7)硬件资源比较差的机器可以用MySAM(占用资源少)
8)使用读写分离的MySQL从库可以使用MyIASM
小结:单一对数据库的操作都可以使用MyIASM,所以单一就是尽量纯读,或纯写(insert,update,delete)等

1.4 MyIASM引擎调优精要

1.设置合适的索引(缓存机制)
2.调整读写优先级,根据实际需求确保重要操作更优先执行。
3.启用延迟插入改善大批量写入性能(降低写入频率,尽可能多条数据一次性写入)
4.尽量顺序操作让insert数据都写入到尾部,减少阻塞
5.分解大的时间长的SQL操作,降低单个操作的阻塞时间。
6.降低并发数(减少对MySQL访问),某些高并发场景通过应用进行排队队列机制
7.对于相对静态(更改不频繁)的数据库数据,充分利用Query Cache或memcached缓存服务可以极大的提高访问效率,网站动态内容静态化,减少对数据库的访问。
  1. [root@db02 oldboy]# grep query /data/3306/my.cnf
  2. query_cache_size = 2M
  3. query_cache_limit = 1M
  4. query_cache_min_res_unit = 2k
8.MyISAM的Count只有在全表扫描的时候特别搞笑,带有其他条件的count都需要进行实际的数据访问
  1. mysql> select count(*) from mysql.user;
  2. +----------+
  3. | count(*) |
  4. +----------+
  5. |       11 |
  6. +----------+
  7. 1 row in set (0.00 sec)
9.可以把主从同步的主库使用innodb,从库使用MyIASM引擎(不推荐)

InnoDB引擎

1.1 什么是InnoDB引擎?

InnoDB引擎是MySQL数据库的另一个重要的存储引擎,整成为目前MySQL AB所发行新版的标准,被包含在所有二进制安装包里。和其他的存储引擎相比,InnoDB引擎的优点是支持兼容ACID的事务(类似于PostgerSQL)以及参数完整性(即对外键的支持)
Oracle公司2005年10月收购了Innobase。Innobase采用双认证授权,它使用GUN发行,也允许其他想将InnoDB结合到商业软件的团体获得授权。
MySQL5.5.5以后数据库的默认存储引擎为InnoDB
  1. [root@db02 oldboy]# ll /data/3306/data/oldboy
  2. total 16
  3. -rw-r--r-- 1 root root   65 Jul  4 00:03 db.opt
  4. -rw-r--r-- 1 root root 8644 Jul  4 00:03 student.frm
提示:只有student.from没有MyIASM对应的数据文件和索引文件了,这是为什么?
  1. [root@db02 oldboy]# ll /data/3306/data/
  2. total 143432
  3. drwxr-xr-x 2 root  root       4096 Jul  4 00:03 aaa
  4. drwxr-xr-x 2 root  root       4096 Jul  4 00:03 cyh
  5. drwxr-xr-x 2 root  root       4096 Jul  4 00:03 dadadadadadad
  6. -rw-r--r-- 1 root  root  134217728 Jul  4 00:03 ibdata1 存放InnoDB数据的文件
配置路径
  1. [root@db02 oldboy]# grep ibdata /data/3306/my.cnf
  2. innodb_data_file_path = ibdata1:128M:autoextend
  3. 可以修改为:
  4. ibdata1:128M:ibdata2:128M:autoextend
  5. 企业场景尽量调大一点

InnoDB引擎特点

1.支持事务:支持4个事务隔离级别,支持多版本读。
2.行级锁定(更新时一定是锁定当前行):通过索引实现,全表扫描仍然会是表锁,注意间隙锁的影响。
3.读写阻塞与事务隔离级别相关。
4.具有非常搞笑的缓存特性:能缓存索引,也能缓存数据。
5.整个表和主键以Cluster方式存储,组成一颗平衡树。
6.所有Secondary Index都会保存主键信息
7.支持分区,表空间,类似oracle数据库
8.支持外键约束 5.5 以后不支持全文索引,以后支持了。
9.和MyIASM引擎相比,InnoDB对硬件资源要求比较高。

InnoDB特点:面试必答题

1.Row-level locking        #行级锁
2.Full-text search indexs  #全文索引
3.Data caches              #缓存数据
4.Index caches            #索引缓存
5.Transactions            #支持事务
6.占用资源多
7.读写阻塞与事务隔离级别相关。
8.外键

InnoDB引擎使用的生产业务场景

1、需要事务支持的业务(具有较好的事务特性)
2、行级锁定对高并发有很好的适应能力,但需要确保查询是通过索引完成
3、数据读写及更新都较为频繁的场景,如:BBS。SNA。微博,微信等。
4、数据一致性要求较高的业务,例如:充值转账、银行卡转账。
5、硬件设备内存较大,可以利用InnoDB较好的缓存能力来提高内存利用率,尽可能减少磁盘IO
  1. [root@db02 oldboy]# grep -i innodb /data/3306/my.cnf
  2. #default_table_type = InnoDB
  3. innodb_additional_mem_pool_size = 4M
  4. innodb_buffer_pool_size = 32M
  5. innodb_data_file_path = ibdata1:128M:autoextend
  6. innodb_file_io_threads = 4
  7. innodb_thread_concurrency = 8
  8. innodb_flush_log_at_trx_commit = 2
  9. innodb_log_buffer_size = 2M
  10. innodb_log_file_size = 4M
  11. innodb_log_files_in_group = 3
  12. innodb_max_dirty_pages_pct = 90
  13. innodb_lock_wait_timeout = 120
  14. innodb_file_per_table = 0
共享表空间对应物理数据文件:
  1. [root@db02 oldboy]# ll /data/3306/data/ibdata1 
  2. -rw-r--r-- 1 root root 134217728 Jul  4 00:03 /data/3306/data/ibdata1
独立表空间对应物理数据文件:
  1. innodb_file_per_table
  2. innodb_data_home_dir

InnoDB引擎调优精要

1、主键尽可能小,避免给Secondary index 带来过大的空间负担
2、建立有索引避免全表扫描,因为会使用表锁。
3、尽可能缓存所有的索引和数据,提高响应速度,减少磁盘IO消耗
4、在大批量小插入的视乎,尽量自己控制事务而不要使用autocommit自动提交,有开关可以控制提交方式:
5、合理设置innodb_flush_log_at_trx_commit参数值,不要过度追求安全性。
如果Innodb_flush_log_at_trx_commit的值为0,log buffer每秒就会被刷写日志文件到磁盘,提交事务的时候不会任何操作。
6、避免主键更新,因为这会带来大量的数据移动
  1. innodb_buffer_pool_size = 2048 
  2. innodb_flush_log_at_trx_commit = 1  #设置为0就等于innodb_log_buffer_size队列满后在统一存储,默认为1,也是最安全的设置。
  3. innodb_file_per_table = 0  #InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间。0关闭,1开启。
  4. 独立表空间优点:
  5. 1、每个表都有自己独立的表空间。
  6. 2、每个表的数据和索引都会存在自己的表空间中。
  7. 3、可以实现单表在不同的数据库中移动。
  8. 4、空间可以回收(除drop table操作处,表空不能自己回收。)

生产环境中如何批量更改MySQL引擎

一般来说这样的需求不多见,但偶尔也会有。
(1)M月SQL语句修改
  1. 创建后引擎的更改,5.0以上
  2. ALTER TABLE OLDBOY ENGINE = INNODB;
  3. ALTER TABLE OLDBOY ENGINE = MyISAM;
更改引擎实例
  1. mysql> ALTER TABLE pre_ucenter_vars ENGINE = INNODB;
  2. Query OK, 0 rows affected (0.33 sec)
  3. Records: 0  Duplicates: 0  Warnings: 0
  4. 查看修改后结果
  5. mysql>show create table pre_ucenter_vars\G
(2)使用sed对备份内容进行引擎切换
  1. mysqldump >bak.sql
  2. nohup sed -e 's/MyIASM/InnoDB/g' bak.sql >innodb.sql &
  3. mysql< innodb.sql
  4. 数据量不好
(3)mysql convert table format命令修改
  1. 独立命令:
  2. mysql_conver_table_format --user=root --password=123456 --socket=/data/3306/mysql.sock --engine=MyIASM oldboy t2
  3. 依赖:yum -y install perl-DBI perl-DBD-MySQL  perl-Time-Hires
或者在建表时的语句加上指定引擎
  1. CREATE TABLE `test` (
  2.   `id` bigint(12) NOT NULL auto_increment COMMENT '主键',
  3.   `name` varchar(12) NOT NULL COMMENT '姓名',
  4.   PRIMARY KEY  (`id`)
  5. ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 

有关MySQL企业常见企业面试题

1.MySQL有哪些存储引擎,各自有什么特点和区别?
MySQL5.5 :MyIASM Memory InnoDB NDB
2.生产环境中应如何选用MySQL的引擎?
在一般生产既有读又有写的业务中,建议使用Innodb引擎,一句话尽可能多的使用innodb引擎
纯写,纯写可用myisam。例如系统的MySQL库
3.不同的引擎如何备份?混合引擎如何备份。
myisam或者混合
  1. mysqldump -uroot -p123456 -A -x -B -F -R --master-data=2|gzip >/data/bak$(date +%F).sql.gz
innodb
  1. mysqldump -uroot -p123456 -A -b -f -r --master-data=2 --single-transaction|gzip >/data/bak.sql.gz
4.设置my.cnf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576004.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为了IT人的荣耀,请大力支持《中国人的紧箍咒》!理由如下——

博友们请注意——老孙又出新书了&#xff01; 先前&#xff0c;老孙从技术跨界到管理&#xff0c;出了一本《知道力》&#xff1b;如今又从管理跨界到文化&#xff0c;新出一本文化书《中国人的紧箍咒》。 作为登陆文化新战场的IT第一人&#xff0c;老孙正在诺曼底滩头独自奋战…

MyCat介绍与配置(精)

Mycat 前生今世如果我有一个32核心的服务器&#xff0c;我就可以实现1个亿的数据分片&#xff0c;我有32核心的服务器么&#xff1f;没有&#xff0c;所以我至今无法实现1个亿的数据库分片。---Mycats Plan Mycat 简介Mycat是什么&#xff1f; 从定义和分类来看&#xff0c;它是…

mysql-mmm 集群高可用软件介绍

mysql-mmm 集群高可用软件介绍 MMM即Master-Master Replication Manager for MySQL&#xff08;mysql主主复制管理器&#xff09;关于mysql主主复制配置的监控、故障转移和管理的一套可伸缩的脚本套件&#xff08;在任何时候只有一个节点可以被写入&#xff09;&#xff0c;这个…

高可用MySQL MHA介绍

MySQL MHA介绍 MHA简介 MHA是一位日本MySQL大牛用Perl写一套MySQL故障切换方案&#xff0c;来保证数据库系统的高可用&#xff0c;在宕机的事件内&#xff08;通常10-30秒&#xff09;&#xff0c;完成故障转意&#xff0c;部署MHA&#xff0c;可避免主从一致性问题&#xff0c…

Xtrabackup安装以及应用

Xtrabackup是一个对InnoDB做数据备份的工具&#xff0c;支持在线热备份&#xff08;备份时不影响数据读写&#xff09;&#xff0c;是商业备份工具InnoDB Hotbackup的一个很好的替代品。 xtrabackup官方网址&#xff1a;https://www.percona.com/downloads/XtraBackup/MySQL Ba…

MySQL双主配置

双机热备的概念简单说一下&#xff0c;就是要保持两个数据库的状态自动同步。对任何一个数据库的操作都自动应用到另外一个数据库&#xff0c;始终保持两个数据库数据一致。 这样做的好处多。 1. 可以做灾备&#xff0c;其中一个坏了可以切换到另一个。 2. 可以做负载均衡&…

DSPBuilder笔记

一、位宽设置 在DSPBuilder中&#xff0c;数据在内部采用二进制定点数表示方法&#xff0c;数据可以设置成无符号整数、有符号整数和有符号小数等&#xff0c;其中有符号数由符号位、整数位和小数位组成&#xff08;有符号整数的小数位为0&#xff09;&#xff0c;位宽根据需求…

MySQL主从复制原理、半同步操作步骤及原理

1.1 企业Linux运维场景数据同步方案 1.1.1 文件级别的异机同步方案 1、scp/sftp/nc 命令可以实现远程数据同步。2、搭建ftp/http/svn/nfs 服务器&#xff0c;然后在客户端上也可以把数据同步到服务器。3、搭建samba文件共享服务&#xff0c;然后在客户端上也可以把数据同步到服…

基于.Net 写我自己的Ajax后台框架AjaxFramework

小小目录: 为什么要写自己的Ajax后台框架 框架的简单设计说明 框架如何使用 框架使用效果图 框架的优缺点 框架源码下载1、为什么要写自己的Ajax后台框架 现在Ajax在web应用方面已经用的稀巴烂了&#xff0c;如果你做一个网站没有用到ajax都不好意思拿出手&…

MySQL备份恢复与日志

MySQL 数据库的备份与恢复 1.1 备份数据的意义 第一是保护公司的数据&#xff0c;第二是网站7*24小时提供服务1.2 备份单个数据库参数使用 MySQL数据库自带了一个很好用的备份命令&#xff0c;就是mysqldump&#xff0c;它的基本使用如下&#xff1b;语法&#xff1a;mysqldum…

MySQL入门介绍

数据库介绍 1.1 什么是数据库&#xff1f; 简单的说&#xff0c;数据库&#xff08;英文Dtabase&#xff09;就是一个存放数据的仓库&#xff0c;这个仓库是按照一定的数据结果&#xff08;数据结构是指数据的组织形式或数据之间的联系&#xff09;来组织、存储的、我们可以通…

zoj 2526(一道很好的最短路应用题)

题目链接&#xff1a;http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId1538 题意&#xff1a;最短路问题&#xff0c;但是要求出最短路的条数&#xff0c;同时要求出所有可能的最短路选择中javabean最多的情况。 思路&#xff1a;求到终点的最短路径用Dijkstra&am…

MySQL常用命令大全

登录MySQL方法 单实例MySQL登录的方法 mysql #刚装完系统无密码情况登录方式&#xff0c;不需要密码 mysql -u root #刚装完系统无密码的情况登录 mysql -uroot -p #这里标准的dba命令行登录 mysql -uroot -poldboy #非脚本里一般不这样用&#xff0c;密码明文会泄露密码…

服务器安全之iptables iptables

服务器安全之iptables 感谢老男孩老师为我们讲解iptables 优化之路 iptables防火墙简介 Netfilter/Iptables&#xff08;以下简称Iptables&#xff09;是unix/linux自带的一款优秀且开放源代码的安全自由的**基于包过滤的防火墙工具**&#xff0c;它的功能十分强大&#xff0…

MC新手入门(三十)------ 逻辑运算符和表达式

游戏设计中提供了三种逻辑运算符&#xff1a; 1&#xff09;&& 与运算 2&#xff09;|| 或运算 3&#xff09; &#xff01;非运算 游戏设计中我们常常要用到上面的逻辑运算&#xff0c;例如&#xff1a;当在双人游戏中都要实现两人同时存活才能过关&#xff0c;…

Nagios 配置及监控

Nagios 监控 在互联网日益发展的今天&#xff0c;监控的重要性已经不言而喻。可能打开一个URL要经过6-7层的处理&#xff0c;如果出了问题而没有监控将很难定位到问题所在。那哪些内容需要监控呢&#xff1f; 1.本地资源 (1) 负载&#xff1a;uptime&#xff1b; (2) CPU&…

SSH 配置

SSH 批量管理 SSH介绍 SSH是Secure Shell Protocol的简写&#xff0c;由IETF网络工作小组&#xff08;Network working Group&#xff09;指定&#xff1b;在进行数据传输之前&#xff0c;SSH先对联机数据包通过加密技术进行加密处理&#xff0c;加密后在进行数据传输。确保了传…

服务器重启导致无法启动MySQL

今天服务器受到DDOS攻击&#xff0c;笔者脑残重启了一下服务器。结果造成MySQL服务器无法启动mysql日志见下图。160803 17:43:47 mysqld_safe Starting mysqld daemon with databases from /application/mysql/data160803 17:43:47 [Note] /application/mysql/bin/mysqld (mysq…

架构师之DNS实战

架构师 DNS实战 老男孩教育 DNS简介 1. DNS的出现及演化 网络出现的早起是使用IP地址通讯的&#xff0c;那是就几台主机通讯。但是随着接入网络主机的增多&#xff0c;这种数字标识的地址非常不便于记忆&#xff0c;UNIX上就出现了建立一个叫做hosts的文件&#xff08;Linux和W…

打包jar文件后的spring部署及hibernate自动建表经验总结

楔子 用springhibernate做一个服务器运行程序&#xff0c;在部署到服务器时&#xff08;打包成jar&#xff0c;在window server2008下运行&#xff09;&#xff0c;出现了以下两个纠结问题&#xff1a; 1. 加载不了Spring容器 2. hibernate.hbm2ddl.auto 到了服务器不能自动建表…