- Mysql
- 一、基础篇
- 1.1 Linux安装Mysql
- 1.2 Docker安装Mysql
- 1.3 增删改查
- 二、SQL优化
- 2.1 Show Status
- 2.2 show profile
- 2.3 EXPLAIN
- 2.4 索引
- 三、万恶的底层原理
- 3.1 聚簇/非聚簇索引与B+Tree
- 简述聚簇/非聚簇索引
- BTree/B+Tree
- 3.2 MySQL逻辑架构
- 3.3 存储引擎
- 四、管理维护
- 4.2 SQL Mode
- 4.2 主从复制(失败)
- over
基于书籍《Mysql深入浅出-第二版》
一、基础篇 1.1 Linux安装Mysql首先查看系统是否安装了MySQL、Mariadb
rpm -qa |grep -i mariadb rpm -qa |grep -i mysql
如果安装了,就卸载
rpm -e mariadb-libs-5.5.68-1.el7.x86_64 ## 如果提示存在依赖关系,不让删,就用下面这个 yum remove mariadb-libs-5.5.68-1.el7.x86_64
上面都是环境准备,下面就开始正式操作
## 安装MySQL资源库 yum -y localinstall https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm ## 正式安装 yum install mysql-community-server ## 启动并设置开机自启 systemctl start mysqld systemctl enable mysqld ## 查看密码 grep 'temporary password' /var/log/mysqld.log ## 登录,修改密码 mysql -uroot -p ALTER USER 'root'@'localhost' IDENTIFIED BY 'Ljm3326116@123'; ## 密码太复杂的对不对,修改密码的安全规则 set global validate_password.policy=0; set global validate_password.length=1; ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; ## 设置可以进行远程ROOT登陆 ALTER USER 'root'@'localhost' IDENTIFIED BY '123'; flush privileges; ## 好了,开始用Navicat开始尽情玩耍1.2 Docker安装Mysql
核心两步操作解决
## 拉镜像 docker pull mysql ## 直接运行 docker run -p 3321:3306 --name mysql3321 -e MYSQL_ROOT_PASSWORD=123456 -d mysql ## 进容器里面 docker exec -it XXXXXX /bin/bash ## 安装个VIM/PING apt-get update apt-get install -y vim apt-get install -y inetutils-ping ## 可能因为网络关系,会报错很多次,要耐心1.3 增删改查
基础CRUD看菜鸟教程
SQL 教程 | 菜鸟教程 (runoob.com)
二、SQL优化 2.1 Show Status通过**show status like ‘Com_%’**命令可以查看在当前会话中已经执行过的各类SQL的执行频率
当然,它不止是能查看SQL,服务器的运行时间、连接次数等也可以进行查看
2.2 show profile这是一个查看SQL执行过程的一个性能分析工具,我们可以利用它查看SQL命中缓冲的概率
最近几次的查询
show profiles;
更加详细的信息
show profile cpu,block io for query 2;
通过EXPLAIN完成对SQL语句的性能分析
说明看课件去好吧
2.4 索引-- 查询索引信息 SHOW INDEX FROM dict;
-- 删除索引 DROP INDEX idx_parent_id ON dict; -- 添加索引 CREATE INDEX idx_parent_id ON dict(parent_id) -- 唯一索引 CREATE UNIQUE INDEX 索引名 ON t_emp(empno) --复合索引 CREATE INDEX 索引名 ON dict(字段1,字段2,字段3) --对表设置主键后,数据库会自动为它建立索引,innodb为聚簇索引
索引建议
- 频繁作为查询条件的字段应该创建索引
- 两个表之间存在外键关联,那这个外键也应该建立索引
- 单键索引与组合索引相对比,组合索引性价比更高
- 查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度
- 查询中统计或者分组字段
什么时候不应该创建索引
- 经常增删改的字段
- 条件查询中用不上的字段
- 字段中的值之间差异性太小,例如男/女,已婚/未婚
聚簇索引和非聚簇索引(通俗易懂 言简意赅) - 创天创世纪 - 博客园 (cnblogs.com)
-
聚簇索引
聚拢到一块儿,主键用的是聚簇索引,按照一定的顺序排好,如果要查1-6 只需要把1-6索引取出来不用扫整个索引
-
非聚簇索引
分散到四周,不是按照顺序拍的,得扫描整个索引,在字典查 猫或狗 我们先查反犬旁 再分别找,非主键用的是非聚簇索引
InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构
聚簇索引 就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的就是整张表的行记录数据,也将聚集索引的叶子节点称为数据页。这个特性决定了索引组织表中数据也是索引的一部分;
那么,什么是B+Tree呢?
BTree/B+Tree二叉查找树、平衡二叉树(AVLTree)和平衡多路查找树(B-Tree)B+树_TigerChen-CSDN博客
3.2 MySQL逻辑架构MySQL逻辑架构及工作流程_编程随笔与杂谈-CSDN博客
3.3 存储引擎各大存储引擎对比
四、管理维护 4.2 SQL Mode在MySQL中,它用来解决几类问题
- 设置不同程度的数据校验,保障数据准确
- 迁移数据库时,可以对SQL进行语法校验,来适配兼容性问题
这里运用docker环境进行演示,实际跟普通环境差不多
前提条件
- 可以使用Navicat进行基本连接
- 有VIM
基于以上环境准备开始正式操作
1、主从修改my.cnf文件
[mysqld] ## 设置server_id,注意要唯一 server-id=101 ## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用 log-bin=mysql-slave-bin ## STATEMENT模式 - 每一条修改数据的SQL语句会记录到binlog binlog_format=STATEMENT
2、进入数据库,主从查询 SHOW MASTER STATUS;
File和Position字段的值后面将会用到,在后面的操作完成之前,需要保证Master库不能做任何操作,否则将会引起状态变化
3、查询容器的IP地址
## 后面可以是容器的ID或者名字
docker inspect --format='{{.NetworkSettings.IPAddress}}' 02c6170aa655
4、进入从机,执行主从复制命令
## 暂停先,因为你可能之前做过了一次 stop slave; reset slave; ## 执行主从复制命令 change master to master_host='172.17.0.2', master_user='root', master_password='123456', master_port=3306, master_log_file='mysql-bin.000002', master_log_pos= 156, master_connect_retry=30; ## 启动 start slave; ## 查看主从同步状态 SHOW SLAVE STATUS;
参数说明
master_port:Master的端口号,指的是容器的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒



