栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

MySQL单机/主从搭建+索引优化及底层原理

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL单机/主从搭建+索引优化及底层原理

文章目录
  • 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

基于书籍《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;

2.3 EXPLAIN

通过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为聚簇索引

索引建议

  1. 频繁作为查询条件的字段应该创建索引
  2. 两个表之间存在外键关联,那这个外键也应该建立索引
  3. 单键索引与组合索引相对比,组合索引性价比更高
  4. 查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度
  5. 查询中统计或者分组字段

什么时候不应该创建索引

  1. 经常增删改的字段
  2. 条件查询中用不上的字段
  3. 字段中的值之间差异性太小,例如男/女,已婚/未婚
三、万恶的底层原理 3.1 聚簇/非聚簇索引与B+Tree 简述聚簇/非聚簇索引

聚簇索引和非聚簇索引(通俗易懂 言简意赅) - 创天创世纪 - 博客园 (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中,它用来解决几类问题

  1. 设置不同程度的数据校验,保障数据准确
  2. 迁移数据库时,可以对SQL进行语法校验,来适配兼容性问题
4.2 主从复制(失败)

这里运用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秒

over
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/339156.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号