MySQL入门知识总结

1、mysql简介
	优势
		简单易用:MySQL 是一个高性能且相对简单的数据库系统,与一些更大系统的设置和管理相比,其复杂程度较低。
		价格:MySQL 对多数个人用户来说是免费的。
		小巧:安装包占用的磁盘空间小
		支持查询语言:MySQL 可以利用 SQL(结构化查询语言),SQL 是一种所有现代数据库系统都选用的语言。也可以利用支持 ODBC(开放式数据库连接)的应用程序,ODBC 是 Microsoft 开发的一种数据库通信协议。
		性能:许多客户机可同时连接到服务器。MySQL数据库没有用户数的限制,多个客户机可同时使用同一个数据库。可利用几个输入查询并查看结果的界面来交互 式地访问 MySQL。这些界面为:命令行客户机程序、Web 浏览器或 X Window System 客户机程序。此外,还有由各种语言(如C, C++, Eiffel, Java, Perl, PHP, Python, Ruby, and Tcl)编写的界面。因此,可以选择使用已编好的客户机程序或编写自己的客户机应用程序。
		连接性和安全性:MySQL 是完全网络化的,其数据库可在因特网上的任何地方访问,因此,可以和任何地方的任何人共享数据库。而且 MySQL 还能进行访问控制,可以控制哪些人不能看到您的数据。
		可移植性:MySQL 可运行在各种版本的 UNIX 以及其他非 UNIX 的系统(如 Windows 和 OS/2)上。MySQL 可运行在从家用 PC 到高级的服务器上。
		开放式的分发:MySQL 容易获得;只要使用 Web 浏览器即可。如果不能理解某样东西是如何起作用的,或者对某个算法感到好奇,可以将其源代码取来,对源代码进行分析。如果不喜欢某些东西,则可以更改它。
		速度:MySQL 运行速度很快。开发者声称 MySQL 可能是目前能得到的最快的数据库。
	适用场景
		web网站系统
		日志仓库系统
		数据仓库系统
2、mysql5.7版本特性
	支持systemd
	更好的性能:对于多核心CPU、固态硬盘、锁有更好的优化
	更好的innodb存储引擎
	更好的复制功能
3、mysql锁的概念
	1、分类
		表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低;MyISAM,MEMORY,CSV
		行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高;InnoDB
		页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般;BerkeleyDB
	2、死锁
		产生原因:	
			互斥条件:资源是独占的且排他使用,进程互斥使用资源,即任意时刻一个资源只能给一个进程使用,其他进程若申请一个资源,而该资源被另一进程占有时,则申请者等待直到资源被占有者释放。
			不可剥夺条件:进程所获得的资源在未使用完毕之前,不被其他进程强行剥夺,而只能由获得该资源的进程资源释放。
			请求和保持条件:进程每次申请它所需要的一部分资源,在申请新的资源的同时,继续占用已分配到的资源。
			循环等待条件:在发生死锁时必然存在一个进程等待队列{P1,P2,…,Pn},其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路,环路中每一个进程所占有的资源同时被另一个申请,也就是前一个进程占有后一个进程所深情地资源。
		解决方法:(原则:通过破坏死锁产生的4个必要条件来预防死锁)
			破坏不可剥夺条件:一个进程不能获得所需要的全部资源时便处于等待状态,等待期间他占有的资源将被隐式的释放重新加入到系统的资源列表中,可以被其他的进程使用,而等待的进程只有重新获得自己原有的资源以及新申请的资源才可以重新启动,执行。
			破坏请求与保持条件:第一种方法静态分配即每个进程在开始执行时就申请他所需要的全部资源。第二种是动态分配即每个进程在申请所需要的资源时他本身不占用系统资源。
			破坏循环等待条件:采用资源有序分配其基本思想是将系统中的所有资源顺序编号,将紧缺的,稀少的采用较大的编号,在申请资源时必须按照编号的顺序进行,一个进程只有获得较小编号的进程才能申请较大编号的进程。
4、mysql文件
	mysql日志文件
		1、分类
			错误日志(error log)
			二进制日志(binary log)
			事务日志(repo log)
			慢查询日志(slow log)
			查询日志(query log)
		2、详解
			错误日志:
				my.cnf:
					log-error:
						服务器启动和关闭产生的信息、服务器运行中的错误、事件调度器运行一个事件产生的信息、在从服务器上启动服务器进程产生的信息
					log-warnings:警告信息
				刷新错误日志:
					mv host_name.err host_name.err-old
					mysqladmin flush-logs
					mv host_name.err-old backup-directory
			二进制日志:
				my.cnf:
					log-bin:打开二进制日志,并设置位置
					max_binlog_size:设置binlog最大存储上限,单位为M
					binlog-do-db:指定记录哪个库的binlog,忽略其他的
					binlog-ignore-db:指定不记录哪个库的binlog
					mysql-bin.index:用于记录binlog的路径的文件
					binlog_cache_size:默认32768,一个事务没提交的时候产生的日志缓存,建议2M到4M。如果大的事务较多时,应适当提高该值的大小
					binlog_stmt_cache_size:当非事务语句使用二进制日志缓存,超出该值会使用一个临时文件来存储
					binlog-format:{row|SQL|mixed}三种方式,分别对应主从复制的三种方式
					sync_binlog:设定多久同步一次二进制日志到硬盘,0表示不同步
					expire_log_days:设置日志的过期时间
				查看二进制日志:
					show binary logs;
					show master status;
				更新二进制日志:
					flush logs;
					重启mysql数据库
				查看某一个二进制日志:
					show binlog events\G;
					show binlog events in 'mysql-bin.000001'\G;
					show binlog events in 'mysql-bin.000001' from 727\G;
					mysqlbinlog mysql-bin.000001
				删除二进制日志:
					purge binary logs to 'mysql-bin.000010'(删除000010之前的所有)
					purge binary logs before '2016-08-29 20:30:00';(删除这个时间之前的)
					reset master;(全删,慎用)
			事务日志:
				特点:
					innodb特有的日志,可以提高事务的效率。
					使用事务日志,存储引擎在修改数据时只需要修改其内存拷贝,在把修改持久化到事务日志,而不是每次修改都直接持久化修改的数据。
					如果,数据还没有持久化,系统崩溃,但是事务日志已经持久化;在重启后可根据事务日志进行回复
				查看当前存储引擎:
					show engines;
				查看默认的存储引擎:
					show variables like '%storage_engine%';
				查看事务日志定义:
					show global variables like '%log%';
				my.cnf文件:
					innodb_flush_log_at_timeout=1
					innodb_flush_log_at_trx_commit=1
						1:每次事务提交都会写事务日志,并写数据;安全性最高,性能最差
						2:每次事务提交会写事务日志,每秒定时写数据;安全性和性能中
						0:每秒定时写事务日志和数据;安全性最差,性能最高
			慢查询日志:
				my.cnf文件:
					slow_query_log=1
					slow_qurey_log_file=/usr/local/mysql/data/mysql.slow
					long_query_time=1	:查询时长,默认10s,超过则记日志
					slow_launch_time=1
				设置:
					set global slow_query_log=1		:开启慢查询
					set session long_query_time=1s		:设置慢查询时间
					或者 set global long_query_time=1s		:全局下设置				
				查看慢查询:
					show variables like '%slow%';
					show variables like 'long%';
				分析工具:
					mysqldumpslow mysql.slow
		3、补充:
			查看系统设置/运行状态:
				show global|session variables like %%
				show global|session status like %%
			修改数据库系统配置:
				修改my.cnf文件
				set global binlog_cache_size = 1048576;
			查看mysql版本:
				mysql -V
				status;
				select version();
	mysql数据文件
		1、innodb数据文件
			test.ibd:独占数据文件
				特点:方便单表在数据库中的移动,空间可回收,性能稍微强于共享表空间
			test.ibdata:共享表空间数据文件
				特点:管理方便,但容易产生空间空隙,对统计分析、日值系统这类应用不适用
			test.frm:元数据文件
		2、MyISAM
			test.MYI:存储表的索引的文件
			test.MYD:存储表的真实数据的文件
			test.frm:元数据文件
	replication文件(备份文件,存于slave端)
		1、master.info
			存放master的信息的文件
		2、relay log
			中继日志
		3、relay log index
			用于记录relay log的绝对路径 
		4、relay-log.info
			用于存放I/O线程写入到本地的relay log的信息
	其他文件
		1、系统配置文件
			/etc/my.cnf文件
				[client]
					客户端连接时可读取的文件
				[mysqld]
					mysqld的初始化时的参数
		2、pid file
			pid存放文件,可在my.cnf中定义
		3、socket file
			unix socket文件存放位置
5、mysql引擎
	1、存储引擎
		分类:
			innodb
			MyISAM
			NDB Cluster
				主要用于分布式集群中
			Maria
				MyISAM的升级版
			Falcon
				由MySQL开发为了替代innodb的存储引擎
			Memory
				存储数据和索引在内存,保存元数据在磁盘,追求高性能
			Archive
				仅支持insert、select语句,会对数据进行压缩
	2、MySQL常用引擎详解
		MyISAM
			特点:
				支持三种类型的索引:b-tree、r-tree、Full-text(全文)
				它是5.1之前的默认存储引擎
				不支持事务
				只支持表级锁
			数据存放方式:
				静态(fixed)
				动态(dynamic)
				可变长压缩(compressed)
			统计数据大小方法:
				先统计一行的长度
				再统计每个表有多少条数据
				最后所有表相加得出库的数据大小
				然后除以1024*1024得出为多少M的数据,在除以1024也就多少G的数据
		innodb
			特点:
				支持事务
				行级锁
				外键引用
				数据和索引在同一个文件存放
				可使用独占表空间或共享表空间
		innodb和MyISAM对比:
			1、innodb支持事务,且默认开启自动提交
			2、innodb支持行级锁,MyISAM使用表级锁。MyISAM的读锁和写锁互斥,不适用于大量读写并存的情况
			3、innodb支持外键
			4、innodb不支持全文索引
6、mysql命令工具
	1、mysql命令
		提供接口管理MySQL数据库
			-u:指定用户
			-p:指定密码
			-h:指定主机地址,主机名
			-e:接要执行的sql语句,常用于脚本编写,关闭交互
			--prompt="\\u@\\h:\\d\\r:\\m:\\s>":建议使用,会出现你当前所处的环境
	2、mysqladmin命令
		管理相关的功能的命令
			mysqladmin -uroot -p123456 -h localhost ping
				检测主机存活
			mysqladmin status 
				查看mysql的基本状态
					uptime:运行的时间
					threads:活跃的进程数
					questions:查询次数
					slow queries:慢查询次数
					opens:打开的数据表的数量
					flush tables:执行的flush、refresh、reload次数
					queries per second avg:平均查询时间
					memory in use:分配的内存(编译时加--with-debug参数)
					max memory used:分配的最大内存(编译时加--with-debug参数)
	3、mysqldump
		mysql备份工具,可将mysql的sql语句dump成为文本
	4、mysqlbinlog
		分析mysql的binlog的作用
	5、mysql的show命令
		show databases;
		show tables;
		show table status from DB like TABLE;
		show columns from TABLE like DB;
		show index from TABLE;
		show variables;
		show processlist;
		show grant for USER;
	6、mysqlslap
		性能测试工具,可生成图表
7、mysql的系统数据库
	1、INFORMAtION_SCHEMA
		存储了数据库的元数据信息
			TABLES表:提供数据库中表和视图的信息
			COLUMNS表:表中的列的信息
			TABLE_CONSTRAINTS表:存储主键约束、外键约束、唯一约束、check约束等
			STATISTICS:索引信息
	2、PERFORMANCE__SCHEMA
		存储了提供数据库性能优化的参考信息
	3、MYSQL库
		存储用户的权限和帮助信息
	4、sys库
		存储过程、自定义函数、视图的存储,结合了INFORMAtION_SCHEMA和PERFORMANCE__SCHEMA的信息		


猜你喜欢

转载自blog.51cto.com/13434336/2178868