SQL语言基础
SQL语言规范SQL是一种结构化的查询语言,需要遵守以下规范:
它的命令是不区分大小写的。
SQL语句可以单行或多行书写,以“;”结尾。
关键字不能够跨行或者简写。用空格缩进可以提高语句的可读性。
子句通常位于独立行,便于编辑,提高可读性。
数据库对象数据库的对象有数据库、表、索引、视图、用户、存储过程、函数、触发器、事件调度器等等。这些对象在命名时需要遵守其命名的规则:
必须以字母开头
可包括数字和三个特殊字符(#_$)
不要使用MySQL的保留字段
同一databases(Schema)下的对象不能同名
SQL语句分类SQL语句有各种各样的指令,这种语句大致上分成4个类型。这4种类型不通的数据库厂商其分类也不同。
DDL:Data Defination Language 数据定义语言定义如何来创建一个资源,比如创建一个数据库,创建一个表,也包括删除和修改
相关指令:
1CREATE、DROP、ALTER
DML:Data Manipulation Language 数据操纵语言数据库操纵语言主要用来操作数据库内的数据,这种数据的操作主要是指对数据的增、删、改。
相关指令 ...
http各版本协议区别
1.0和1.1区别
区别
http1.0
http2.0
缓存处理
主要使用hearder中的if-Modified-since,Expires(过期时间)来做为缓存判断的标准
则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略
带宽优化及网络连接的使用
存在一些浪费带宽的现象,例如客户端只是需要某 个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能
在 请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content), 方便了开发者自由的选择以便于充分利用带宽和连接
错误通知的管理
新增24个状态响应码
Host头处理
在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的 URL并没有传递主机名(hostname)
。HTTP1.1的请 求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request) ...
MySQL的高可用(MHA)
MHA:Master High Availability,对主节点进行监控,可实现自动故障转移至其他从节点;通过提升某一从节点为新的主节点,基于主从复制实现,还需要客户端配合实现,目前MHA主要支持一主二从,即一台充当master,一台充当备用master,另外一台充当从数据库,出于机器成本的考虑,淘宝进行了改造,目前淘宝TMHA已经一主一从。
MHA架构
MHA的工作原理
MHA是由一台manager服务器远程监控主服务器,当主服务器挂了提升一台从服务器作为主服务器。
当主节点挂了,manager首先要查看哪台从节点,同步的数据最多,然后提升同步最多的从节点为主节点,再将其余的MySQL服务器对他做从节点。
如果原主节点没彻底死透,manager会让新的主机通过ssh协议远程连接到原先的主节点,拉取二进制日志进行同步。如果主节死透了那就放弃。
MHA搭建一、环境准备准备4台主机,管理节点1台,主节点MySQL服务器1台,从节点MySQL服务器2台|主机|IP||:-|:-||Manager|192.168.73.111||Master|192.168.73.110| ...
MySQL高可用(Galera Cluster)
Galera Cluster简介Galera Cluster是集成了Galera插件的MySQL集群,是一种新型的,数据不共享的,高度冗余的高可用方案,目前Galera Cluster有两个版本,分别是Percona Xtradb Cluster和MariaDB Cluster,Galera本时是具有多主特性,即采用Multi-master的集群架构,是一个即稳健,又在数据一致性、完整性及高性能方面有出色表现的高可用解决方案
Galera Cluster内部机制
Galera Cluster种每个MySQLServer之间相互为主主的关系,当客户端发送指令到一个数据库时,数据库将数据修改后返回一个OK,表示用户的请求已经被收到,但是事务并没有结束依旧可以撤销。当事务结束时用户发送一个commit(提交),服务器收到后会将数据的更新发送给其他的MySQLServer,此时会开启一个全局性的事务ID给组内的其他服务器,其他服务器会查看是否有事务冲突,如果没有冲突就确认更改成功。
Galera Cluster特点
多主架构:真正的多点读写的集群,在任何时候读写数据都是最新的
同步复制:集群 ...
MySQL读写分离(ProxySQL)
读写分离就是用户在发送请求时,请求经过中间件,中间件将请求中的读和写操作分辨出来将读请求发送给后端的从服务器,将写请求发送给后端的主服务器,再又主服务器通过主从复制将数据复制给其他从服务器
常见MySQL中间件
名称
公司
站点地址
mysql-proxy
Oracle
https://downloads.mysql.com/archives/proxy
Atlas
Qihoo
https://github.com/Qihoo360/Atlas/blob/master/README_ZH.md
dbproxy
美团
https://github.com/Meituan-Dianping/DBProxy
Cetus
网易乐得
https://github.com/Lede-Inc/cetus
Amoeba
https://sourceforge.net/projects/amoeba/
Cobar
阿里巴巴
Amoeba的升级版
Mycat
基于Cobar
http://www.mycat.io
ProxySQL
https://proxysq ...
MySQL主从复制出错的解决方法
主从复制中若是出现错误可以通过几个方法来进行解决
如果主从复制时发生了主键冲突,从而阻止了主从复制,可以使用sql_slave_skip_counter这个变量来忽略错误将其排除
如果发生了较大的错误,可以考虑使用reset slave的方法重新配置从服务器来恢复错误
以下演示如何使用这两种方法解决错误,及相关操作的详细说明
reset slave的使用方法环境准备搭建主从同步主节点配置1.修改配置文件
12345[root@Master ~]# vim /etc/my.cnf[mysqld]log-bin=/data/bin/mysql-binbinlog-format=rowserver-id=1
2.创建二进制日志目录
12[root@Master ~]# mkdir /data/bin[root@Master ~]# chown -R mysql.mysql /data/bin
3.启动mysqld服务
1[root@Master ~]# systemctl start mariadb
4.查看主服务器日志位置
12345678[root@Master ...
MySQL的备份还原(mysqldump)
MySQL的还原前提是要建立在,有完全备份和二进制日志开启的前提下,并且二进制日志文件和完全备份存放在与数据库文件不同的磁盘上,否则当磁盘发生损坏数据将无法进行恢复。
mysqldump备份还原mysqldump是逻辑备份工具,使用于所有存储引擎,温备份;支持完全或部分备份;对InnoDB存储引擎支持热备,结合binlog的增量备份可以实现数据库的完全备份及还原。
mysqldump语法123456#挑选某个库或者挑选某个表来备份,由于此方法没有备份数据库的定义,在还原时需要先创建出数据库,然而原先数据库的定义方式并不知晓,所以此方法不推荐使用mysqldump [OPTIONS] database [tables]#使用-B选项后面跟上各数据库的名称,可以选择特定的数据库做备份。使用此方法备份可以备份数据库的定义。mysqldump [OPTIONS] -B DB1 [DB2 DB3 ...]#使用-A选项可以备份数据库中除information_schema和performance_schema的所有数据库。mysqldump [OPTIONS] -A [OPTIONS]
开 ...
MySQL的备份还原(xtrabackup)
xtrabackup简介xtrabackup是percona提供的MySQL数据库的备份工具,是唯一开源的能对innodb和xtradb数据库进行热备的工具
xtrabackup的特点
备份还原过程快、可靠
备份过程不会打断正在执行的事务
能够基于压缩等功能介于磁盘空间和流量
自动实现备份检验
开源免费
xtrabackup备份过程
xtrabackup安装xtrabackup在centos的EPEL源中,可以在配置完EPEL源后使用yum安装
1[root@localhost ~]# yum install -y percona-xtrabackup
也可以去官网下载最新版本的xtrabackup
https://www.percona.com/downloads/XtraBackup/LATEST
xtrabackup使用1xtrabackup [option] BACKUP-ROOT-DIR
选项
说明
–user
备份时连接到MySQL的账号
–password
备份时连接到MySQL所使用的账号的密码
–host
备份数据库的 ...
MySQL的性能优化
MySQL的性能优化可以从两方面着手,一是从缓存,二是从索引。
MySQL的查询缓存查询缓存是基于hash算法的,要求命令和查询的参数大小写必须完全一致,当有新的查询语句或预处理查询请求,先去查询缓存,判断是否存在纪录集,若存在则直接返回结果。
查询缓存的优缺点优点sql语句不需要做任何解析和执行,直接从缓存中获得查询结合,提高了查询性能
缺点不够智能,提高了缓存使用门槛,增加了缓存记录集检查和清理的开销。
有些查询是无法被缓存的比如:
查询的语句中带了SQL_NO_CACHE参数
查询语句中含有获取值的函数。如:NOW(),CURDATE(),GET_LOCK(),RAND()、CONVERT_TZ()等
对系统数据库查询时使用会话级别的变量或存储过程中的局部变量。
查询语句中加了锁不会使用缓存
对临时表的查询,存在警告信息的查询,只有列级别权限的查询。
事务隔离级别为serializable的不能缓存
缓存的相关变量123456query_cache_limit #单个查询结果能缓存的最大值,默认为1M。过大的值将无法缓存query_cache_mi ...
MySQL级联复制
在生产换进中有一种主从复制的方法主节点先将数据同步到一个中间的从节点,然后由从节点给后续的其他从节点来复制数据,这种复制方式称为级联复制。
级联复制的好处是可以极大的减轻主节点的压力
级联复制在配置时需要在中间节点上启用log_slave_updates的选项。
级联复制的配置方法准备主机4台,1台主节点(Master),1台中间从节点(Slave),1台从节点(Slave1)
主机
系统
ip
Master
CentOS7
192.168.73.110
Slave
CentOS7
192.168.73.111
Slave1
CentOS7
192.168.73.112
主节点配置(Master)1.修改配置文件
1234[mysqld]log-bin=/data/bin/mysql-bin #启动二进制日志binlog-format=row #修改日志格式server-id=1
2.创建二级制日志目录
12[root@Master ~]# mkdir /data/bin[root@Master ~ ...