一、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网站系统 日志仓库系统 数据仓库系统 二、mysql5.7版本特性 支持systemd 更好的性能:对于多核心CPU、固态硬盘、锁有更好的优化 更好的innodb存储引擎 更好的复制功能 三、mysql锁的概念 一、分类 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的几率最高,并发度最低;MyISAM,MEMORY,CSV 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的几率最低,并发度也最高;InnoDB 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度通常;BerkeleyDB 二、死锁 产生缘由: 互斥条件:资源是独占的且排他使用,进程互斥使用资源,即任意时刻一个资源只能给一个进程使用,其余进程若申请一个资源,而该资源被另外一进程占有时,则申请者等待直到资源被占有者释放。 不可剥夺条件:进程所得到的资源在未使用完毕以前,不被其余进程强行剥夺,而只能由得到该资源的进程资源释放。 请求和保持条件:进程每次申请它所须要的一部分资源,在申请新的资源的同时,继续占用已分配到的资源。 循环等待条件:在发生死锁时必然存在一个进程等待队列{P1,P2,…,Pn},其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,造成一个进程等待环路,环路中每个进程所占有的资源同时被另外一个申请,也就是前一个进程占有后一个进程所深情地资源。 解决方法:(原则:经过破坏死锁产生的4个必要条件来预防死锁) 破坏不可剥夺条件:一个进程不能得到所须要的所有资源时便处于等待状态,等待期间他占有的资源将被隐式的释放从新加入到系统的资源列表中,能够被其余的进程使用,而等待的进程只有从新得到本身原有的资源以及新申请的资源才能够从新启动,执行。 破坏请求与保持条件:第一种方法静态分配即每一个进程在开始执行时就申请他所须要的所有资源。第二种是动态分配即每一个进程在申请所须要的资源时他自己不占用系统资源。 破坏循环等待条件:采用资源有序分配其基本思想是将系统中的全部资源顺序编号,将紧缺的,稀少的采用较大的编号,在申请资源时必须按照编号的顺序进行,一个进程只有得到较小编号的进程才能申请较大编号的进程。 四、mysql文件 mysql日志文件 一、分类 错误日志(error log) 二进制日志(binary log) 事务日志(repo log) 慢查询日志(slow log) 查询日志(query log) 二、详解 错误日志: 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 三、补充: 查看系统设置/运行状态: 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数据文件 一、innodb数据文件 test.ibd:独占数据文件 特色:方便单表在数据库中的移动,空间可回收,性能稍微强于共享表空间 test.ibdata:共享表空间数据文件 特色:管理方便,但容易产生空间空隙,对统计分析、日值系统这类应用不适用 test.frm:元数据文件 二、MyISAM test.MYI:存储表的索引的文件 test.MYD:存储表的真实数据的文件 test.frm:元数据文件 replication文件(备份文件,存于slave端) 一、master.info 存放master的信息的文件 二、relay log 中继日志 三、relay log index 用于记录relay log的绝对路径 四、relay-log.info 用于存放I/O线程写入到本地的relay log的信息 其余文件 一、系统配置文件 /etc/my.cnf文件 [client] 客户端链接时可读取的文件 [mysqld] mysqld的初始化时的参数 二、pid file pid存放文件,可在my.cnf中定义 三、socket file unix socket文件存放位置 五、mysql引擎 一、存储引擎 分类: innodb MyISAM NDB Cluster 主要用于分布式集群中 Maria MyISAM的升级版 Falcon 由MySQL开发为了替代innodb的存储引擎 Memory 存储数据和索引在内存,保存元数据在磁盘,追求高性能 Archive 仅支持insert、select语句,会对数据进行压缩 二、MySQL经常使用引擎详解 MyISAM 特色: 支持三种类型的索引:b-tree、r-tree、Full-text(全文) 它是5.1以前的默认存储引擎 不支持事务 只支持表级锁 数据存放方式: 静态(fixed) 动态(dynamic) 可变长压缩(compressed) 统计数据大小方法: 先统计一行的长度 再统计每一个表有多少条数据 最后全部表相加得出库的数据大小 而后除以1024*1024得出为多少M的数据,在除以1024也就多少G的数据 innodb 特色: 支持事务 行级锁 外键引用 数据和索引在同一个文件存放 可以使用独占表空间或共享表空间 innodb和MyISAM对比: 一、innodb支持事务,且默认开启自动提交 二、innodb支持行级锁,MyISAM使用表级锁。MyISAM的读锁和写锁互斥,不适用于大量读写并存的状况 三、innodb支持外键 四、innodb不支持全文索引 六、mysql命令工具 一、mysql命令 提供接口管理MySQL数据库 -u:指定用户 -p:指定密码 -h:指定主机地址,主机名 -e:接要执行的sql语句,经常使用于脚本编写,关闭交互 --prompt="\\u@\\h:\\d\\r:\\m:\\s>":建议使用,会出现你当前所处的环境 二、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参数) 三、mysqldump mysql备份工具,可将mysql的sql语句dump成为文本 四、mysqlbinlog 分析mysql的binlog的做用 五、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; 六、mysqlslap 性能测试工具,可生成图表 七、mysql的系统数据库 一、INFORMAtION_SCHEMA 存储了数据库的元数据信息 TABLES表:提供数据库中表和视图的信息 COLUMNS表:表中的列的信息 TABLE_CONSTRAINTS表:存储主键约束、外键约束、惟一约束、check约束等 STATISTICS:索引信息 二、PERFORMANCE__SCHEMA 存储了提供数据库性能优化的参考信息 三、MYSQL库 存储用户的权限和帮助信息 四、sys库 存储过程、自定义函数、视图的存储,结合了INFORMAtION_SCHEMA和PERFORMANCE__SCHEMA的信息