1 实训二前期LNMP简易架构 1.1 php server安装 |
1.2 安装初始化数据库 |
2 Mysql数据库 |
2.1 Mysql5.7安装 |
2.1.1 rpm安装 |
2.1.2 yum安装 |
2.1.3 源码安装 |
2.1.4 编译好的非rpm包安装 |
2.1.5 my.cnf常见选项 |
2.2 Mysql基础 |
2.2.1 MySql数据库操作 |
2.2.2 MySql数据类型 |
2.2.2.1 整型 |
2.2.2.2 浮点数和定数 |
2.2.2.3 字符串类型 |
2.2.2.4 日期和时间类型 |
2.2.2.5 字段修饰和约束 |
2.2.2.6 业务建表练习 |
2.2.3 MySql表操作 |
2.2.4 MySql体系结构 |
2.2.5 MySql存储引擎 |
2.3 MySql操作 |
2.3.1 MySql数据操作 |
2.3.2 MySql单表查询 |
2.3.3 MySql多表查询 |
2.3.4 MySql存储过程与函数 |
2.4 MySql操作-2 |
2.4.1 MySql安全机制 |
2.4.2 MySql日志管理 |
2.4.3 MySql复制概述 |
2.4.4 主从同步 |
2.5 最基本sql语句及主从架构 |
2.6 MyCat中间件 |
2.6.1 部署Mycat |
2.6.2 配置读写分离 |
2.6.2.1 安全的读写分离 |
2.6.3 XML语法格式 |
2.6.4 mycat 分表分库 |
2.7 Mysql MHA |
2.7.1 MHA-部署 |
2.7.2 MHA-故障切换VIP透明 |
2.7.2.1 VIP切换脚本内容 |
2.7.2.2 VIP-手动在线切换脚本 |
2.7.3 MHA+Mycat高可用Mysql读写分离 |
2.7.4 MHA+VIP+Mycat |
2.7.5 MHA-故障切换邮件报警 |
2.7.6 自动配置Slave主机 |
3 实验 |
3.1 mysql授权问题 |
3.2 1.单节点数据库 |
3.3 2.主从同步 |
3.4 3.实验(高可用) |
3.4.1 高可用keepalived |
3.4.1.1 keepalived install |
3.5 4.实验(高可用+大并发) |
3.5.1 HAproxy代理 |
3.6 4.实验(mycat-读写分离) |
3.6.1 mycat安装部署 |
3.6.2 读写分离高可用 |
3.6.3 mycat管理端口命令 |
3.7 5.双主双从-读写分离-高可用 |
3.8 6.mycat分库操作 |
3.9 7.mycat分表 |
3.10 8.mycat分库分表之下实现读写分离 |
4 Shell脚本编程 |
5 Zabbix监控 |
5.1 zabbix设置邮件报警--自定义报警媒介 |
5.2 zabbix解决中文界面乱码问题 |
5.3 ziabbix自带的template Linux OS |
5.4 zabbix-agent自定义收集数据 |
5.5 zabbix监控Nginx性能 |
5.6 综合配置 |
5.7 实验:监控nginx端口实现告警 |
6 ELK日志分析 |
6.1 PS |
6.2 es-head插件安装 |
6.3 安装filebeat nginx日志模板 |
存储引擎 InnoDB ========================================================
存储引擎说白了就是如何 存储数据、如何为存储的数据 建立索引和如何更新、查询数据等技术的实现方法。 因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)
在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql数据库提供了多种存储引擎。 用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎。
MyISAM 存储引擎 =====================================
mysql 5.5 以前默认的存储引擎。 对 事务 完整性没有要求或者以 SELECT、INSERT 为主的应用基本都可以使用这个引擎来创建表。 每个MyISAM 在磁盘上存储成 3个文件,其中文件名和表名都相同,但是扩展名分别为: - .frm (存储表定义) - MYD (MYData,存储数据) - MYI (MYIndex,存储索引)
不支持 事务 不支持 外键
读性能好 可以方便的移动某个表或者某个数据库 数据 和 索引分开存放,一定程度上也加快了 索引的速度。
支持数据压缩,数据库体积相对比较小,节约空间。 因此当对事务完整性没有要求并以 访问为主 的应用适合使用该存储引擎。
只能支持 表级别锁定。 不能支持一些专业 热备份工具。
InnoDB 存储引擎 =======================================
InnoDB是一个健壮的 事务型 存储引擎,这种存储引擎已经被很多互联网企业使用,为用户操作非常大的数据存储提供了一个强大的解决方案。 mysql5.5开始,默认存储引擎设置为 innodb。
由于该存储引擎在事务上具有优势,即支持具有提交、回滚 及 崩溃恢复能力等事务特性, 所以比MyISAM存储引擎占用更多的磁盘空间。
因此当需要频繁的更新、删除操作,同时还对 事务的完整性要求较高,并且有较高的并发读取频率,InnoDB是不错的选择。
1.更新密集的表。InnoDB存储引擎特别适合处理多重并发的更新请求。 2.事务。InnoDB存储引擎是支持事务的标准MySQL存储引擎。 3.自动灾难恢复。与其它存储引擎不同,InnoDB表能够自动从灾难中恢复。 ##事务恢复管理器 4.外键约束。MySQL支持外键的存储引擎只有 InnoDB。 5.支持颗粒度更加精细的 行 级别 锁 。 (表级锁) 6. innodb引擎还提供了插入缓存 (insert buffer)、二次写(double write)、自适应哈希索引(adaptive hash index)、预读(read ahead)等高性能技术。 7、能够支持真正意义上的 ,热备份
表结构文件
从物理意义上来讲,InnoDB表由 共享表空间文件( ibdata1 )、独占表空间文件(ibd)、表结构文件(.frm) 默认使用 共享表空间。 ibdata1 ibdata2 ibdata3 idb idb idb | A B C A B C D 不受到文件系统的单个文件大小 限制 受到文件系统单个文件大小的限制。 ext4 ==⇒ 单个文件数量有限 最大支持,单个文件 16 TB db.opt 文件,是用来记录该库的默认字符集编码和字符集排序规则的。 创建数据库指定默认字符集和排序规则,那么后续创建的表如果没有指定字符集和排序规则,那么该新建的表将采用db.opt文件中指定的属性。
在MYSQL中建立任何一张数据表,在其数据目录对应的数据库目录下都有对应表的.frm文件, .frm 文件是用来保存每个数据表的元数据(meta)信息,包括表结构的定义等, .frm 文件跟数据库存储引擎无关,也就是任何存储引擎的数据表都必须有.frm文件,命名方式为数据表名.frm, 如user.frm .frm文件可以用来在数据库崩溃时恢复表结构。
MEMORY 存储引擎 ==================================
使用MySQL Memory存储引擎的出发点是速度。为得到最快的响应时间,采用的逻辑存储介质是系统内存。 虽然在内存中存储表数据确实会提供很高的性能,但当mysqld守护进程崩溃时,所有的Memory数据都会丢失。 MEMORY存储引擎存储数据的位置是内存,因此访问速度最快,但是安全上没有保障。适合于需要快速的访问或临时表。
适合于以下应用场景:
1. 目标数据较小,而且被非常频繁地访问。在内存中存放数据,所以会造成内存的使用开销, 可以通过参数 max_heap_table_size控制 Memory表的大小,设置此参数,就可以限制Memory表的最大大小。 2.如果数据是临时的,而且要求必须立即可用,那么就可以存放在内存表中。 3.存储在Memory表中的数据如果突然丢失,不会对应用服务产生实质的负面影响。
create table users ( id smallint unsigned not null auto_increment, username varchar(15) not null, pwd varchar(15) not null, index using btree (username), primary key (id) )engine=memory;
MERGE 存储引擎 =========================================
MERGE存储引擎是一组 MyISAM 表的组合,这些 MyISAM 表结构必须完全相同,尽管其使用不如其它引擎突出,但是在某些情况下非常有用。 Merge表是几个相同 MyISAM表 的聚合器 Merge表中并没有数据,对Merge类型的表可以进行查询、更新、删除操作,这些操作实际上是对内部的MyISAM表进行操作。
Merge存储引擎的使用场景。
对于服务器日志这种信息,一般常用的存储策略是将数据分成很多表,每个名称与特定的时间段相关。 例如:可以用12个相同的表来存储服务器日志数据,每个表用对应各个月份的名字来命名。 当有必要基于所有12个日志表的数据来生成报表,这意味着需要编写并更新多表查询,以反映这些表中的信息。 与其编写这些可能出现错误的查询,不如将这些表合并起来使用一条查询,之后再删除Merge表, 而不影响原来的数据,删除Merge表只是删除Merge表的定义,对内部的表没有任何影响。
ARCHIVE 存储引擎 ========================================
Archive是归档的意思,在归档之后很多的高级功能就不再支持了,仅仅支持最基本的 插入和查询 两种功能。 在MySQL 5.5版以前,Archive是不支持索引,但是在MySQL 5.5以后的版本中就开始支持索引了。 Archive拥有很好的压缩机制,它使用zlib压缩库,压缩能力较强,在记录被请求时会实时压缩,所以它经常被用来当做 仓库使用。
BLACKHOLE 存储引擎 =======================================
黑洞存储引擎,可以应用于主备复制中的分发主库。
# Aria 存储引擎 ===========================================
Aria是MariaDB的一个全新的存储引擎,它是作为MyISAM存储引擎的替代者而开发的。 它的特点:
1. 拥有自动恢复功能 2. 比MyISAM更好的缓存系统,相对于MyISAM有一定提升。 3. 未来版本可能会支持事务。
总结: -----------------------------------------------------------------
如何选择mysql 的存储引擎》》========================
######################### 如何选择合适的存储引擎? 选择标准可以分为: (1)是否需要支持事务; (2)是否需要使用热备; (3)崩溃恢复:能否接受崩溃; (4)是否需要外键支持;
########################
查询存储引擎信息的相关命令 ===============================================
mysql 使用可拔插式 存储引擎,因此可以针对每一张表,使用不同的存储引擎。
1、查看服务器有哪些存储引擎可以使用? ##msyql> show engines; 2、查看当前系统默认的存储引擎 # MariaDB [class]> show variables like '%engine%';
3、查看某个存储引擎的相关 状态信息 ##MariaDB [class]> show variables like '%innodb%' ;
## 实时调整 上述的 系统 状态值,使用 set set global innodb_file_per_table=1 ; (如果要调整的对象是全局变量,则需要加 global) 4、指定某个表的存储引擎 #建表时直接指定: CREATE TABLE mytable (id int, titlechar(20)) ENGINE = INNODB #后续修改: ALTER TABLE engineTest ENGINE = INNODB; ##尽量不要修改存储引擎。 5、修改系统默认存储引擎 ## vim /etc/my.cnf 加上: 做永久修改,重启剩下。 set 是在当前会话状态 seesion 中修改。立刻生效
default-storage-engine=INNODB 如果表建立的时候是MyISAM,要更改整个数据库表的存储引擎,一般要一个表一个表的修改,比较繁琐, 可以采用先把数据库导出,得到SQL,把MyISAM修改成INNODB,再导入的方式。
InnoDB 存储引擎 表空间的含义 ================================================
undo log 撤销日志。 redo 重做日志。
文件系统的指标:============== 1、最大能支持多少空间。 2、单个文件最大能有多大。 3、IO速度 4、是否支持日志
Ext4 的文件系统容量达到 1EB,而单个文件容量则达到 16TB XFS 是 一个64位文件系统,最大支持 8EB 文件系统 Linux OS ---------- 单个文件大小限制 Innodb ------------ 单个表的大小
共享表空间:-------------------------------------------------------------------- Innodb的所有数据保存在一个单独的表空间里面,而这个表空间可以由很多个文件组成, 例如 ibdata1==》 ibdata2==》ibdata3 一个表可以跨多个文件存在,所以表的大小限制不再是文件系统单独文件的大小的限制,而是其自身的限制。 从Innodb的官方文档中可以看到,其 表空间的最大限制为64TB,也就是说,Innodb的单表限制基本上也在 64TB 左右了, 这个大小是包括这个表的所有索引等其他相关数据。 所有的数据和索引存放到一个文件中,将有一个很常大的文件,虽然可以把一个大文件分成多个小文件,但是多个表及索引在表空间中混合存储, 这样对于一个表做了大量删除操作后表空间中将会有大量的空隙,特别是对于统计分析,日志系统这类应用最不适合用共享表空间。
独立表空间:-------------------------------------------------------------------- 每一个表都将会生成以独立的文件方式来进行存储,每一个表都有一个 .frm 表描述文件,还有一个.ibd文件 (这个文件包括了单独一个表的数据内容以及索引内容)。 可以实现单表在不同的 数据库中移动。 使用独享表空间来存放Innodb的表的时候,每个表的数据以一个单独的文件来存放,这个时候的单表限制, 又变成文件系统的大小限制了( ext4 的 16TB )。 所以当单表占用空间过大时,存储空间不足,只能从操作系统层面思考解决方法; 查看数据表空间信息 : MariaDB [(none)]> show variables like 'innodb_data%';
### ### 总结:当数据量很小的时候建议使用 共享表空间的管理方式。 ### 数据量很大的时候建议使用 独立表空间的管理方式。 (后续一些备份和集群组件,需要 独立表空间的支持。) 独立表空间的管理方式, 单表如果会超过16TB ### 1、更换文件系统 XFS + 独立表空间 =========》 64TB ### 2、使用 ext4 + 共享表空间===============》 64TB ### 3、使用 ext4 + 独立表空间 ==============》 16TB
独立表空间 和 共享表空间的 转换 ===================================================
查看当前系统默认使用的 ----------------------------------------------------- 是共享表空间 还是 独立表空间
mysql> show variables like "innodb_file_per_table"; MariaDB [(none)]> show variables like "innodb_file_per_table"; +-------------------------+-------+ | Variable_name | Value | +-------------------------+-------+ | innodb_file_per_table | OFF | ##OFF 表示不开启 独立空间, 也就是默认使用共享表空间。 +-----------------------+-------+ 临时修改 该参数: MariaDB [(none)]> set global innodb_file_per_table=1 ; Query OK, 0 rows affected (0.01 sec) 永久修改 该参数:在my.cnf里面增加 innodb_file_per_table=1 ##默认使用共享表空间。 重新载入配置文件生效 reload 共享表空间转化为独立表空间的方法------------------------------------------ ###### 1、设置好参数 innodb_file_per_table=1 修改innodb_file_per_table的参数值后,不会影响之前已经使用过的共享表空间和独立表空间; ###### 2、 单个表的转换操作,脚本:alter tables students engine=innodb; 自动从原先的共享表空间中拆分数据,形成 独立表空间。
[root@class2 class]# ll total 156 -rw-rw---- 1 mysql mysql 65 Jan 9 17:03 db.opt -rw-rw---- 1 mysql mysql 8896 Jan 10 00:43 students.frm -rw-rw---- 1 mysql mysql 131072 Jan 10 00:43 students.ibd
修改独占空表空间配置,以下几个参数可以一起加入:============================= MariaDB [class]> show variables like '%innodb%' ; ## 查看与 innodb 有关的设置项目。 innodb_data_home_dir = "/usr/local/mysql/var/" ## 数据库文件所存放的目录,不设置的话, 默认与数据库目录在一起 innodb_log_group_home_dir = "./" ## innodb redo 重做 日志存放目录 innodb_data_file_path=ibdata1:10M:autoextend innodb_file_per_table=1 是否使用共享以及独占表空间(1 为使用独占表空间,0 为使用共享表空间) 设置配置一个可扩展大小的尺寸为10MB的单独文件(共享数据文件),名为ibdata1。 没有给出文件的位置,所以默认的是在MySQL的数据目录内(如 /db/mysql/ibdata1)。
一段连续的空间, |S | S | S | S | S |S| S|S|S| S | A | A |A |
练习:==============================
1. 建立四张表,存储引擎分别为MyISAM 2. 通过show create table 表名查看表的创建过程 3. 插入数据(插入前要查看表的结构) ls -l
mysql> desc blackhole1; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | +-------+---------+------+-----+---------+-------+ 1 row in set (0.00 sec)
mysql> insert into blackhole1 values(1); Query OK, 1 row affected (0.00 sec)
mysql> select * from blackhole1; Empty set (0.00 sec
|