目录
1.完成将server和client端的mysql配置默认字符集为utf8mb4
2.掌握如何获取SQL命令的帮助,基于帮助完成添加testdb数据库字符集utf8,排序集合utf8_bin
3.总结mysql常见的数据类型
4. 创建一个主机表host,放在testdb中,要求字段 1) id tinyint 无符号 自增 主键 。2) hostname可变字符长度256,可为空。3)ip 可变字符长度256,可为空。4)账号,可变字符长度256,可为空。5)密码,可变字符长度256,可为空。6)创建时间,时间类型,非空。7)更新时间,时间类型,默认当前时间。8)区域,只能在华南,华北,华东,三个区域之一。9)端口,无符号整数,可为空。10)外网地址,可变字符长度256,可为空。11)内网地址,可变字符长度256,可为空。
5.给test.host表中添加多条数据
6.根据表扩展出几个语句,完成总结DDL DML 的用法,并配上示例。
(1)总结DDL用法:
(2)总结DML用法:
7.导入hellodb库,总结DQL,alias,where,group by,order by,limit,having用法示例
8.基于hellodb库,总结子查询,联合查询,交叉连接,内连接,左连接,右连接,完全连接,自连接。
9.总结select语句处理顺序
10-11总结mysql事件管理,用户管理,权限管理,搭建wordpress站点
12.总结mysql架构原理
13. 总结myisam和innodb存储引擎的区别
14.总结mysql索引作用,同时总结哪些查询不会使用到索引
15.总结事务ACID事务特性
16.总结事务日志工作原理
17.总结mysql日志类型,并说明如何启动日志
18.总结二进制日志的不同格式的使用场景
19.总结mysql备份类型,并基于mysqldump,xtrabackup完成数据库备份以恢复验证。
20.编写crontab,每天按表备份所有mysql数据,将备份数据放在以天为时间的目录下
21.编写crontab,基于xtrabackup,每周1,周5进行完全备份,周2到周4进行增量备份。
22.总结mysql主从复制原理
23.实现主从复制,主主复制,半同步复制,过滤复制
24.总结GTID复制原理,并完成GTID复制集群
25.总结主从复制不一致的原因,如何解决不一致,如何避免不一致
26.总结数据库垂直拆分和水平拆分
27.基于mycat实现读写分离
28.总结mysql高可用方案及高可用级别。搭建MHA集群和galera cluster,尝试搭建TIDB集群
29.总结mysql配置最佳实践
1.基础规范
2.命名规范
3.表设计规范
4.字段设计规范
5.索引设计规范
6.SQL使用规范
30.总结openvpn原理,并完成1键安装不同版本vpn脚本,可以适配rocky,ubuntu,centos主机,同时支持添加账号,注销账号
(1)利用阿里云搭建openvpn
mysql 8.0和mariabd 10.6版本默认就是utf8mb4字符集。所以不需要更改
(1)如何获取帮助:
(1)总结DDL用法:
(2)总结DML用法:
(1)子查询:子查询 subquery 即SQL语句调用另一个SELECT子句,可以是对同一张表,也可以是对不同表
(2)联合查询: Union 实现的条件,多个表的字段数量相同,字段名和数据类型可以不同,但一般数据类型是相同 的.
(3)交叉连接:CROSS JOIN
(4)内连接:INNER JOIN
(5)左连接:LEFT OUTER JOIN
(6)右连接:RIGHT OUTER JOIN
(7)完全连接:FULL OUTER JOIN(union左连接+右连接)
(8)自连接:即表自身连接自身
在c盘/windows/system32/drivers/etc/hosts 添加条目 10.0.0.20 blog.zybstu.com
(1)mysql索引作用:更快的定位所要查询的内容。
(2)总结不会用到的索引查询:在LIKE语句中,以%号或者以"_"开头的查询内容不会用到索引
A:atomicity 原子性;整个事务中的所有操作要么全部成功执行,要么全部失败后回滚
C:consistency一致性;数据库总是从一个一致性状态转换为另一个一致性状态。
I:Isolation隔离性;一个事务所做出的操作在提交之前,是不能为其它事务所见;隔离有多种隔离 级别,实现并发
D:durability持久性;一旦事务提交,其所做的修改会永久保存于数据库中
事务日志 transation log :事务日志的写入类型为"追加",因此其操作为"顺序IO",通常也被称为预写式日志。
0模式:数据拷贝快,安全性差(断电将会丢失数据)
1模式:安全性高,IO占比高,性能差。
2模式:数据拷贝快,安全性比0模式好一些(因为系统不容易崩溃)
根据生产情况,可以进行更改模式来优化性能
事务型存储引擎自行管理和使用,建议和数据文件分开存放。
(1)事务日志:
事务日志文件:
事务日志相关配置:
事务日志性能优化:(2)错误日志:
错误文件路径:
也可以重新指定错误日志的路径,在配置文件中修改。和事务日志修改方法一致。
(3)通用日志:
(4)慢查询日志:
(5)二进制日志(数据还原):
二进制日志记录三种格式:
基于"语句"记录:statement,记录语句,默认模式( MariaDB 10.2.3 版本以下 ),日志量较少。
基于"行"记录:row,记录数据,日志量较大,更加安全,建议使用的格式,
基于混合模式:mixed, 让系统自行判定该基于哪种方式进行,默认模式
(1)总结mysql备份类型:
完全备份:整个数据集
部分备份:只备份数据子集,如部分库或表 完全备份、
增量备份:仅备份最近一次完全备份或增量备份(如果存在增量)以来变化的数据,备份较快, 还原复杂
差异备份:仅备份最近一次完全备份以来变化的数据,备份较慢,还原简单
注意:二进制日志文件不应该与数据文件放在同一磁盘
冷备:读、写操作均不可进行,数据库停止服务
温备:读操作可执行;但写操作不可执行
热备:读、写操作均可执行
MyISAM:温备,不支持热备
InnoDB:都支持
还原要点:
做还原测试,用于测试备份的可用性
还原演练,写成规范的技术文档
(2)基于mysqldump和xtrabackup完成数据库备份以恢复验证。
主从复制相关线程:
(1)主节点:
dump Thread:为每个Slave的I/O Thread启动一个dump线程,用于向其发送binary log events
(2)从节点:
I/O Thread:向Master请求二进制日志事件,并保存于中继日志中
SQL Thread:从中继日志中读取日志事件,在本地完成重放
主从复制优势:
(1)避免数据库单点失败问题
(2)实现读写分离,负载均衡。
建议数据库版本要一致。如果不一致,从节点的版本要高。
(1)主从复制:
(2)主主复制:在主从复制的基础上进行一些修改即可
修改数据时,只在一台主服务器上操作。这样能够避免同时写数据造成的冲突。
出现冲突怎么解决?
#系统变量,指定跳过复制事件的个数
SET GLOBAL sql_slave_skip_counter = N
#服务器选项,只读系统变量,指定跳过事件的ID
[mysqld]
slave_skip_errors=编号 | ALL
重新启动服务
(3)半同步复制:在主从复制的基础上进行一些修改即可
(4)过滤同步:在主从复制的基础上进行一些修改即可
(1)复制原理:
利用 GTID复制不像传统的复制方式(异步复制、半同步复制)需要找到binlog文件名和位置点,只需知道master的IP、端口、账号、密码即可。开启GTID后,执行change master to master_auto_postion=1即可,它会自动寻找到相应的位置开始同步
(2)完成GTID复制集群:
(1)不一致的原因和避免:
#主库binlog格式为Statement(语句型),同步到从库执行后可能造成主从不一致。应该设置为Row(行型)
#主节点服务器上的二进制日志功能没有及时打开,导致主从数据不一致。应该及时打开二进制日志功能(sql_log_bin和log_bin都为1)
#主从数据库版本不一致,特别是高版本是主,低版本为从的情况下,主数据库上面支持的功能,从数据库可能不支持该功能。应该选择同一版本,或者主低从高配置。
#主库或从库意外宕机,宕机可能会造成binlog或者relaylog文件出现损坏,导致主从不一致。
#主从sql_mode 不一致。应该设置为一致
#从节点未设置只读,误操作写入数据。应该从节点设置为只读read-only
#MySQL自身bug导致。
(2)如何解决:
#手动重建不一致的表
#使用percona-toolkit工具辅助
(1)垂直拆分:一个数据库由很多表的构成,每个表对应着不同的业务,垂直切分是指按照业务将表进行分类,分布到不同的数据库上面,这样也就将数据或者说压力分担到不同的库上面。但是会造成部分业务表无法 join,只能通过接口方式解决,提高了系统复杂度。
(2)水平拆分:水平拆分是按照某个字段的某种规则来分散到多个库之中,每个表中包含一部分数据。数据多次扩展难度跟维护量极大
(1)高可用方案及级别:
MHA:Master High Availability,对主节点进行监控,可实现自动故障转移至其它从节点;通过提 升某一从节点为新的主节点,基于主从复制实现,还需要客户端配合实现,目前MHA主要支持一主 多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台 充当master,一台充当备用master,另外一台充当从库。
MHA工作原理:
1. MHA利用 SELECT 1 As Value 指令判断master服务器的健康性,一旦master 宕机,MHA 从宕机崩溃 的master保存二进制日志事件(binlog events)
2. 识别含有最新更新的slave 3. 应用差异的中继日志(relay log)到其他的slave 4. 应用从master保存的二进制日志事件(binlog events)到所有slave节点
5. 提升一个slave为新的master 6. 使其他的slave连接新的master进行复制
7. 故障服务器自动被剔除集群(masterha_conf_host),将配置信息去掉
8.旧master的VIP(虚拟IP地址)漂移到新的master上,用户应用就可以访问新的master
9. MHA是一次性的高可用性解决方案,Manager会自动退出
(2)搭建MHA集群:
MHA主要解决的是mysql的主从,主节点挂掉以后单点失败问题。MHA会自动提升从节点为新主,但是还是存在数据丢失的风险,这个风险主要来自于服务器是物理原因导致的宕机,因为如果只是mysql服务宕机了,二进制日志还可以通过ssh协议来传输到其他从节点。
(2)搭建Percona Xtradb Cluster(PXC 5.7)版的Galera Cluster集群
集群中节点的数量:整个集群中节点数量应该控制在最少3个、最多8个的范围内。3个以上节点是为了防止出现脑裂现场,少于8个是为了提高性能。因为节点数越多,输入的数据在每个节点上要校验的次数就变多,导致性能变差。
1.基础规范
(1)必须使用InnoDB存储引擎
解读:支持事务、行级锁、并发性能更好、CPU及内存缓存页优化使得资源利用率更高
(2)使用UTF8MB4字符集
解读:万国码,无需转码,无乱码风险,节省空间,支持表情包及生僻字
(3)数据表、数据字段必须加入中文注释
解读:N年后谁知道这个r1,r2,r3字段是干嘛的
(4)禁止使用存储过程、视图、触发器、Event
解读:高并发大数据的互联网业务,架构设计思路是"解放数据库CPU,将计算转移到服务层",并发量 大的情况下,这些功能很可能将数据库拖死,业务逻辑放到服务层具备更好的扩展性,能够轻易实现"增 机器就加性能"。数据库擅长存储与索引,CPU计算还是上移吧!
(5)禁止存储大文件或者大照片
解读:为何要让数据库做它不擅长的事情?大文件和照片存储在文件系统,数据库里存URI多好。
2.命名规范
(1)只允许使用内网域名,而不是ip连接数据库
(2)线上环境、开发环境、测试环境数据库内网域名遵循命名规范
业务名称:xxx
线上环境:xxx.db
开发环境:xxx.rdb
测试环境:xxx.tdb
从库在名称后加-s标识,备库在名称后加-ss标识 线上从库:xxx-s.db
线上备库:xxx-sss.db
(3)库名、表名、字段名:小写,下划线风格,不超过32个字符,必须见名知意,禁止拼音英文混用
(4)库名与应用名称尽量一致,表名:t_业务名称_表的作用,主键名:pk_xxx,非唯一索引名:idx_xxx,唯 一键索引名:uk_xxx
3.表设计规范
(1)单实例表数目必须小于500,单表行数超过500万行或者单表容量超过2GB,才推荐进行分库分表。
说明:如果预计三年后的数据量根本达不到这个级别,请不要在创建表时就分库分表
(2)单表列数目必须小于30
(3)表必须有主键,例如自增主键
a)主键递增,数据行写入可以提高插入性能,可以避免page分裂,减少表碎片提升空间和内存的使用
b)主键要选择较短的数据类型, Innodb引擎普通索引都会保存主键的值,较短的数据类型可以有效的减 少索引的磁盘空间,提高索引的缓存效率
c) 无主键的表删除,在row模式的主从架构,会导致备库夯住
(4)禁止使用外键,如果有外键完整性约束,需要应用程序控制
解读:外键会导致表与表之间耦合,update与delete操作都会涉及相关联的表,十分影响sql 的性能, 甚至会造成死锁。高并发情况下容易造成数据库性能,大数据高并发业务场景数据库使用以性能优先
4.字段设计规范
(1)必须把字段定义为NOT NULL并且提供默认值
a)null的列使索引/索引统计/值比较都更加复杂,对MySQL来说更难优化
b)null 这种类型MySQL内部需要进行特殊处理,增加数据库处理记录的复杂性;同等条件下,表中有较多 空字段的时候,数据库的处理性能会降低很多
c)null值需要更多的存储空,无论是表还是索引中每行中的null的列都需要额外的空间来标识
d)对null 的处理时候,只能采用is null或is not null,而不能采用=、in、、<>、!=、not in这些操作符 号。如:where name!='shenjian',如果存在name为null值的记录,查询结果就不会包含name为null值的记录
(2)禁止使用TEXT、BLOB类型
解读:会浪费更多的磁盘和内存空间,非必要的大量的大字段查询会淘汰掉热数据,导致内存命中率急 剧降低,影响数据库性能
(3)禁止使用小数存储货币
解读:使用整数吧,小数容易导致钱对不上
(4)必须使用varchar(20)存储手机号
a)涉及到区号或者国家代号,可能出现+-() b)手机号会去做数学运算么? c)varchar可以支持模糊查询,例如:like"138%" (18)禁止使用ENUM,可使用TINYINT代替 解读:
a)增加新的ENUM值要做DDL操作
b)ENUM的内部实际存储就是整数,你以为自己定义的是字符串?
5.索引设计规范
(1)单表索引建议控制在5个以内
(2)单索引字段数不允许超过5个
解读:字段超过5个时,实际已经起不到有效过滤数据的作用了
(3)禁止在更新十分频繁、区分度不高的属性上建立索引
a)更新会变更B+树,更新频繁的字段建立索引会大大降低数据库性能
b)"性别"这种区分度不大的属性,建立索引是没有什么意义的,不能有效过滤数据,性能与全表扫描类 似
(4)建立组合索引,必须把区分度高的字段放在前面
解读:能够更加有效的过滤数据
6.SQL使用规范
(1)禁止使用SELECT *,只获取必要的字段,需要显示说明列属性
a)读取不需要的列会增加CPU、IO、NET消耗
b)不能有效的利用覆盖索引
c)使用SELECT *容易在增加或者删除字段后出现程序BUG
(2)禁止使用INSERT INTO t_xxx VALUES(xxx),必须显示指定插入的列属性
解读:容易在增加或者删除字段后出现程序BUG
(3)禁止使用属性隐式转换
解读:SELECT uid FROM t_user WHERe phone=13812345678 会导致全表扫描,而不能命中phone索 引,猜猜为什么?(这个线上问题不止出现过一次)
(4)禁止在WHERe条件的属性上使用函数或者表达式
解读:SELECt uid FROM t_user WHERe from_unixtime(day)>='2017-02-15' 会导致全表扫描 正确的写法是:SELECt uid FROM t_user WHERe day>= unix_timestamp('2017-02-15 00:00:00')
(5)禁止负向查询,以及%开头的模糊查询
a)负向查询条件:NOT、!=、<>、!、!>、NOT IN、NOT LIKE等,会导致全表扫描
b)%开头的模糊查询,会导致全表扫描
(6)禁止大表使用JOIN查询,禁止大表使用子查询
解读:会产生临时表,消耗较多内存与CPU,极大影响数据库性能
(7)禁止使用OR条件,必须改为IN查询
解读:旧版本Mysql的OR查询是不能命中索引的,即使能命中索引,为何要让数据库耗费更多的CPU帮 助实施查询优化呢? (30)应用程序必须捕获SQL异常,并有相应处理
(1)利用阿里云搭建openvpn
(2)打开openvpn软件以后连接,出现绿色为已建立连接。
(3)在window客户端中,用cmd命令行输入ipconfig 会看到一个从openvpn服务器给客户端的一个虚拟10.8.0.6的IP地址。
(4)现在openvpn也有一个虚拟的10.8.0.1的IP地址
(5)windows客户端也能直接连接openvpn服务器的私网地址172.30.0.1了,但是不能连接openvpn服务器后面的web1服务器。
(6)打开openvpn服务器的forword功能且生效。不过只实现了客户端到web1的单向通信,没有实现有去有回。因为从web1回去的数据报文没有经过openvpn,而是经过了阿里云给分配的路由器,但是客户端的10.8.0.6地址是openvpn给的虚拟地址,所以就不能到达客户端。
(7)可以添加路由,但是阿里云禁止添加和修改路由。所以只能修改openvpn服务器的iptable规则,用SNAT转换
(8)到现在,客户端可以直接ping通web1和web2了。当然也可直接登录到web1和web2服务器了
(9)给新用户颁发证书(脚本实现)
(10)吊销用户证书(脚本实现)
(11)启用安全增强功能(基于秘钥登录)
(12)阿里云释放实例
以上就是本篇文章【第六周作业】的全部内容了,欢迎阅览 ! 文章地址:http://dfvalve.xrbh.cn/news/2903.html 资讯 企业新闻 行情 企业黄页 同类资讯 首页 网站地图 返回首页 迅博思语资讯移动站 http://keant.xrbh.cn/ , 查看更多