当前位置:Gxlcms > 数据库问题 > 大数据技术之_29_MySQL 高級面试重点串讲_02_Mysql 简介+Linux 版的安装+逻辑架构介绍+性能优化+性能分析+查询截取分析+分区分库分表简介+锁机制+主从复制

大数据技术之_29_MySQL 高級面试重点串讲_02_Mysql 简介+Linux 版的安装+逻辑架构介绍+性能优化+性能分析+查询截取分析+分区分库分表简介+锁机制+主从复制

时间:2021-07-01 10:21:17 帮助过:36人阅读

1.1 概述1.2 高级 MySQL第2章 Mysql Linux 版的安装2.1 下载地址2.2 检查当前系统是否安装过 mysql2.3 修改 Mysql 配置文件位置2.4 修改字符集和数据存储路径2.5 MySQL 的安装位置说明2.6 Mysql 配置文件说明2.7 Mysql 的数据存放目录第3章 Mysql 逻辑架构介绍3.1 总体概览3.2 查询说明第4章 Mysql 性能优化4.1 影响 mysql 的性能因素4.2 查询与索引优化分析4.2.1 性能下降SQL慢的原因4.2.2 常见通用的 Join 查询4.3 mysql 索引结构与检索原理4.4 哪些情况需要创建索引4.5 哪些情况不要创建索引第5章 性能分析5.1 索引优化5.1.1 索引分析5.1.2 索引失效(应该避免)5.1.3 一般性建议第6章 查询截取分析6.1 查询优化6.1.1 永远小表驱动大表6.1.2 order by 关键字优化6.1.3 gruop by 关键字优化6.2 慢查询日志6.3 批量数据脚本(数据库编程)6.4 show profile6.5 全局查询日志第7章 大数据量处理理论第8章 Mysql 分区分库分表简介8.1 Mysql 分区8.2 List 分区8.3 对 NULL 值的处理第9章 MySql 锁机制9.1 概述9.2 三锁9.2.1 表锁(偏读)案例演示9.2.2 行锁(偏写)案例演示第10章 MySql 主从复制10.1 复制的基本原理10.2 复制的基本原则 和 复制的最大问题10.3 一主一从常见配置


先完成再完美,先功能再性能。
大胆假设,小心求证。

第1章 Mysql 简介

1.1 概述

  MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。

  MySQL 是一种关联数据库管理系统,将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

  MySQL 是开源的,所以你不需要支付额外的费用。

  MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。

  MySQL 使用标准的 SQL 数据语言形式。

  MySQL 可以允许于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。

  MySQL 对 PHP 有很好的支持,PHP 是目前最流行的 Web 开发语言。

  MySQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持 4GB,64 位系统支持最大的表文件为 8TB。

  MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 Mysql 系统。

1.2 高级 MySQL

  完整的 mysql 优化需要很深的功底,大公司甚至有专门的 DBA 写下述内容:

技术图片

第2章 Mysql Linux 版的安装

2.1 下载地址

官网下载地址:http://dev.mysql.com/downloads/mysql/

技术图片

选择对应的 MySQL 版本、操作系统 和 位数,点击 Download(本博文中以版本 5.5.48 为例)

技术图片

下载地址:
  https://downloads.mysql.com/archives/get/file/MySQL-server-5.5.48-1.linux2.6.x86_64.rpm
  https://downloads.mysql.com/archives/get/file/MySQL-client-5.5.48-1.linux2.6.x86_64.rpm

2.2 检查当前系统是否安装过 mysql

第一步:以 root 身份登录,查看 mysql 是否安装。

rpm -qa | grep mysql

第二步:以 root 身份登录,如果 mysql 的版本不是想要的版本。需要把原来的 mysql 卸载。

使用 yum 命令卸载
yum remove mysql mysql-server mysql-libs mysql-common

使用 rpm 命令卸载
rpm -e RPM软件包名(该名字是第一步命令查出来的名字)
rm -rf /var/lib/mysql
rm -f /etc/my.cnf

注意:使用 yum 命令卸载,因为 yum 命令可以自动删除与 mysql 相关的依赖;如果使用 rpm 命令卸载,则还需要手动去删除和mysql相关的文件。

第三步1:安装 mysql。需要使用 yum 命令安装。在安装 mysql 之前需要安装 mysql 的下载源。需要从 oracle 的官方网站下载。

1)下载 mysql 的源包:
    我们是 centos6.8 对应的 rpm 包为:mysql-community-release-el6-5.noarch.rpm
    命令:wget http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm
2)安装 mysql 下载源:
    yum localinstall mysql-community-release-el6-5.noarch.rpm
3)在线安装社区版的 mysql:
    yum install mysql-community-server
    或者在线安装收费版本的 mysql:
    yum install mysql-server

    两种方式均可,建议安装社区版。

第三步2:我们也可以使用 rpm 命令进行安装。
安装 mysql 服务端(注意提示)

技术图片

安装 mysql 客户端

技术图片

查看 MySQL 安装时创建的 mysql 用户和 mysql 组

技术图片
或者可以执行 mysqladmin --version 命令。类似 java -version,如果打出消息,即为安装成功。

mysql 服务的启+停

技术图片

设置开机自启动 mysql 服务

技术图片

查看 设置开机自启动 mysql 服务

技术图片

第四步:启动 mysql。

service mysql start

注意:

技术图片

第五步:需要给 root 用户设置密码。

/usr/bin/mysqladmin -u root password ‘new-password‘  #为 root 账号设置密码

第六步:登录 mysql。

[root@localhost ~]# mysql -uroot -p

第七步:需要先登录到 mysql,进行远程连接授权。

GRANT ALL PRIVILEGES ON *.* TO ‘myuser‘@‘%‘ IDENTIFIED BY ‘mypassword‘ WITH GRANT OPTION;

注意:‘myuser‘、‘mypassword‘ 需要替换成实际的用户名和密码。

2.3 修改 Mysql 配置文件位置

Mysql 5.5 版本:cp /usr/share/mysql/my-huge.cnf /etc/my.cnf

Mysql 5.6 版本:cp /usr/share/mysql/my-default.cnf /etc/my.cnf

2.4 修改字符集和数据存储路径

1、查看字符集

mysql> show variables like ‘character%‘;  或者
mysql> show variables like ‘%char%‘;

默认的 数据库 和 服务器都用了 latin1,所以会乱码。

技术图片

2、修改
下图中的红色字体部分表示要修改的地方

技术图片

my.cnf 中要修改的代码如下:

[client]
#password       = your_password
port            = 3306
socket          = /var/lib/mysql/mysql.sock

default-character-set=utf8

# The MySQL server
[mysqld]
port            = 3306

character_set_server=utf8
character_set_client=utf8
collation-server=utf8_general_ci

socket          = /var/lib/mysql/mysql.sock
skip-external-locking
key_buffer_size = 384M
max_allowed_packet = 1M
table_open_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 32M
# Try number of CPU‘s*2 for thread_concurrency
thread_concurrency = 8

lower_case_table_names=1
max_connections=1000

[mysql]
no-auto-rehash

default-character-set=utf8

3、重启 mysql

service mysql stop
service mysql start

4、重新连接后重新 create databse 并使用新建库,然后再重新建表试试。
5、还是乱码的话就设值 init_connect=‘SET NAMES utf8‘ ##设定连接 mysql 是 UTF8 编码

2.5 MySQL 的安装位置说明

在 linux 下查看安装目录,命令:ps -ef | grep mysql

技术图片

2.6 Mysql 配置文件说明

技术图片

2.7 Mysql 的数据存放目录

/var/lib/mysql

技术图片

第3章 Mysql 逻辑架构介绍

3.1 总体概览

  和其它数据库相比,MySQL 有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离。这种架构可以根据业务的需求和实际需要选择合适的存储引擎。

技术图片

3.2 查询说明

  首先,mysql 的查询流程大致是:mysql 客户端通过协议与 mysql 服务器建连接,发送查询语句,先检查查询缓存,如果命中,直接返回结果,否则进行语句解析。

  有一系列预处理,比如检查语句是否写正确了,然后是查询优化(比如是否使用索引扫描,如果是一个不可能的条件,则提前终止),生成查询计划,然后查询引擎启动,开始执行查询,从底层存储引擎调用 API 获取数据,最后返回给客户端。怎么存数据、怎么取数据,都与存储引擎有关。

  然后,mysql 默认使用的 BTREE 索引,并且一个大方向是,无论怎么折腾 sql,至少在目前来说,mysql 最多只用到表中的一个索引。

第4章 Mysql 性能优化

4.1 影响 mysql 的性能因素

技术图片

4.2 查询与索引优化分析

4.2.1 性能下降SQL慢的原因

技术图片

4.2.2 常见通用的 Join 查询

技术图片
详解见链接:https://www.cnblogs.com/chenmingjun/p/11012827.html

4.3 mysql 索引结构与检索原理

mysql 索引结构

技术图片

检索原理

技术图片

【初始化介绍】
  一颗 b+ 树,浅蓝色的块我们称之为一个磁盘块,可以看到每个磁盘块包含几个数据项(深蓝色所示)和指针(黄色所示),如磁盘块 1 包含数据项 17 和 35,包含指针 P1、P2、P3,P1 表示小于 17 的磁盘块,P2 表示在 17 和 35 之间的磁盘块,P3 表示大于 35 的磁盘块。
  真实的数据存在于叶子节点即 3、5、9、10、13、15、28、29、36、60、75、79、90、99。
非叶子节点不存储真实的数据,只存储指引搜索方向的数据项,如 17、35 并不真实存在于数据表中。

【查找过程】
  如果要查找数据项 29,那么首先会把磁盘块 1 由磁盘加载到内存,此时发生一次 IO,在内存中用二分查找确定 29 在 17 和 35 之间,锁定磁盘块 1 的 P2 指针,内存时间因为非常短(相比磁盘的 IO)可以忽略不计,通过磁盘块 1 的 P2 指针的磁盘地址把磁盘块 3 由磁盘加载到内存,发生第二次 IO,29 在 26 和 30 之间,锁定磁盘块 3 的 P2 指针,通过指针加载磁盘块 8 到内存,发生第三次 IO,同时内存中做二分查找找到 29,结束查询,总计三次 IO。

人气教程排行