您好,欢迎光临有路网!
MySQL技术大全:开发 优化与运维实战(视频教学版)
QQ咨询:
有路璐璐:

MySQL技术大全:开发 优化与运维实战(视频教学版)

  • 作者:冰河
  • 出版社:机械工业出版社
  • ISBN:9787111668985
  • 出版日期:2020年11月01日
  • 页数:760
  • 定价:¥199.00
  • 分享领佣金
    手机购买
    城市
    店铺名称
    店主联系方式
    店铺售价
    库存
    店铺得分/总交易量
    发布时间
    操作

    新书比价

    网站名称
    书名
    售价
    优惠
    操作

    图书详情

    • 出版社
    • ISBN
      9787111668985
    • 作者
    • 页数
      760
    • 出版时间
      2020年11月01日
    • 定价
      ¥199.00
    • 所属分类
    内容提要
    《MySQL技术大全:开发、优化与运维实战(视频教学版)》结合大量示例和实战案例,全面、系统、深入地介绍了MySQL数据库技术,**阐述了MySQL开发、优化和运维过程中的各个技术点。《MySQL技术大全:开发、优化与运维实战(视频教学版)》对学习MySQL技术有较高的参考价值,尤其是环境搭建、优化、维护和架构等内容可直接用于实际工作中。 《MySQL技术大全:开发、优化与运维实战(视频教学版)》共33章,分为6篇。第1篇“MySQL基础”,介绍数据库的定义、发展,以及数据库技术和MySQL数据库的三大范式与存储引擎。第2篇“环境搭建”,介绍VMware虚拟机以及Windows、Mac OS X和CentOS操作系统的安装,并介绍如何在三大操作系统上安装和配置MySQL。第3篇“MySQL开发”,介绍MySQL中的数据库操作、数据表操作、数据类型、运算符、函数、数据变更、数据查询、索引、视图、存储过程、触发器、分区、公用表表达式和生成列等。第4篇“MySQL优化”,介绍MySQL中的查询优化、索引优化、SQL语句优化、数据库优化、服务器优化、应用程序优化及其他优化技术。第5篇“MySQ
    文章节选
    第1章 数据库概述
    随着计算机技术的发展,数据在计算机上的存储形式也不断发生着变化。而数据库的诞生和发展经历了漫长的演化过程,每项存储技术的诞生都伴随着新的技术突破。本章就对数据库的基础知识做简单的介绍。
    本章涉及的知识点有:
    ? 数据库的定义,了解数据库的基本概念。
    ? 数据库的发展,了解数据库的发展阶段。
    1.1 数据库的定义
    ���某种程度上,数据库代表着一种存储技术,并不局限于某种存储形式。一个简单的数据库可以将数据只存储在某台特定的计算机上,供某个特定的用户使用,而一个复杂的数据库可以将数据分散存储到多台计算机上,能够供成千上万的用户同时使用。从存储容量上来说,一个数据库的存储容量可以小到只能够存储几KB的数据,也可以大到存储TB甚至是PB级别的数据。
    1.1.1 数据库
    数据库(DataBase,DB)从本质上讲就是一个文件系统,它能够将数据有组织地集合在一起,按照一定的规则长期存储到计算机的磁盘中,并且能够供多个用户共享和使用,同时,用户能够对数据库中的数据进行插入、删除、修改和查询操作。
    数据库将数据进行集中存储和管理,有效地分离了应用程序和业务数据,降低了应用程序和业务数据之间的耦合性,大大简化了数据的存储和管理工作。同时,数据库提供了对存储数据的统一控制功能。
    数据除了能够被存储在计算机的磁盘中,还能够被存储在计算机的内存中,所以在某种程度上,可以将数据库分为**型数据库和内存型数据库。
    1.1.2 数据库管理系统
    数据库管理系统(DataBase Management System,DBMS)从本质上讲就是一个为管理数据库中的数据而设计的一套管理系统。它依托数据库,对外提供统一管理数据库中数据的功能和接口,能够有效地对数据库的**、认证、数据备份、数据恢复、数据传输等进行统一的管理。同时,数据库管理系统能够根据所依托的数据库模型对数据库进行相应的分类。大多数的数据库都是通过数据库管理系统对数据库中的数据进行管理和维护的。
    1.1.3 数据表
    对于关系型数据库来说,数据表是以一个二维数组的形式来存储和管理数据的,它能够存储和管理数据并操作数据的逻辑结构。通常,一个数据表由行和列组成,一行数据能够表示一条完整的基础信息,所以行在关系型数据库中是组织数据的基本单位;列也被称为字段,它能够表示行的一个属性,同时,每一列都有相应的数据类型和数据长度的定义。
    例如,一个简单的商品信息表,每行数据都包含商品编号、商品名称、商品类型、商品价格和上架时间等,它们被称为列,也叫作字段,表示商品信息表一行所记录的一个属性,它们都有相应的数据类型和数据长度的定义。所有的列组成商品信息表中一条完整的行记录。
    商品信息表中每行记录的定义如表1-1所示。
    表1-1 商品信息表中每行记录的定义表示
    字 段 名 称 数 据 类 型 是否可为NULL 是 否 主 键 默 认 值
    商品编号 varchar(32) 否 是 空字符串
    商品名称 varchar(50) 否 否 空字符串
    商品类型 varchar(30) 否 否 空字符串
    商品价格 decimal(10, 2) 否 否 0.00
    上架时间 datetime 是 否 NULL
    商品信息表中每行记录的数据可以表示为表1-2所示。
    表1-2 商品信息表中每行记录的数据表示
    商 品 编 号 商 品 名 称 商 品 类 型 商 品 价 格 上 架 时 间
    1000000001 破洞牛仔裤 女装/女士精品 79.90 2020-12-10 00:00:00
    1000000002 T恤 男装 49.90 2020-12-10 00:00:00
    1000000003 苹果 水果 19.90 2020-12-11 00:00:00
    1000000004 晾衣竿 居家用品 39.90 2020-12-15 00:00:00
    1.1.4 数据类型
    关系型数据库中的数据类型表示数据在数据库中的存储格式,其反映了数据在计算机中的存储格式。计算机根据不同的数据类型来组织和存储数据,并为不同数据类型的数据分配不同的存储空间。
    数据类型在大的分类上可以分为数值类型、日期和时间类型、字符串类型。
    在关系型数据库中,表中的每个字段都会被指定一种数据类型。例如,表1-1中,将商品编号、商品名称和商品类型定义为字符串类型,将商品价格定义为数值类型(定点数类型),将上架时间定义为日期和时间类型。
    1.1.5 运算符
    运算符是一种运算符号,用来表示某种数据关系。运算符可以分为算术运算符、比较运算符、逻辑运算符和位运算符等。
    1.1.6 函数
    数据库中内置了一些函数,能够很方便地对数据进行数学计算、字符串处理、加密/解密及聚合处理等。相应地,函数可以分为数学函数、字符串函数、日期和时间函数、流程处理函数、加密与解密函数、数据聚合函数、获取数据库信息函数以及数据库中的其他函数等。
    1.1.7 主键
    在关系型数据库中,主键(Primary Key)又称为主码,能够**标识数据表中的一行记录。主键可以包含数据表中的一列或者多列,主键不能为空。同时,在同一个数据表中,主键列上不能有两行甚至多行相同的值,也就是说,在同一个数据表中,每行数据对应的主键列的值必须**。
    例如,在表1-1中,将商品编号定义为商品信息表的主键,此时,当商品编号为空,或者商品编号在商品信息表中出现相同的值,则数据库会提示错误信息,查询不到相应的数据;如果将商品名称作为主键,则根据作为主键列的要求,商品名称不能重复,这与实际情况不符,所以商品名称字段不适合作为主键。
    1.1.8 外键
    外键从本质上讲就是一个引用,它引用的是另外一张表中的一列或者多列数据,被引用的表中的列需要具备主键约束或者**性约束。也就是说,被引用的列在其对应的数据表中能够**标识一行数据。外键反映的是两个表之间的连接关系。
    例如,两个数据表分别为部门表和员工信息表。其中,部门表中包含两个字段,分别为部门编号和部门名称;员工信息表中包含员工编号、员工姓名、员工性别、员工生日、部门编号和入职日期等字段。
    部门表中每行记录的定义如表1-3所示。
    表1-3 部门表中每行记录的定义表示
    字 段 名 称 数 据 类 型 是否可为NULL 是 否 主 键 默 认 值
    部门编号 varchar(32) 否 是 空字符串
    部门名称 varchar(50) 否 否 空字符串
    员工信息表中每行记录的定义如表1-4所示。
    表1-4 员工信息表中每行记录的定义表示
    字 段 名 称 数 据 类 型 是否可为NULL 是 否 主 键 是 否 外 键 默 认 值
    员工编号 varchar(32) 否 是 否 空字符串
    员工姓名 varchar(20) 否 否 否 空字符串
    员工性别 char(2) 否 否 否 未知
    员工生日 date 是 否 否 NULL
    部门编号 varchar(32) 否 否 是 空字符串
    入职日期 date 否 否 否 当前日期
    部门表中每行记录的数据如表1-5所示。
    表1-5 部门表中每行记录的数据表示
    部 门 编 号 部 门 名 称
    1000000001 技术部
    1000000002 运营部
    1000000003 市场部
    员工信息表中每行记录的数据如表1-6所示。
    表1-6 员工信息表中每行记录的数据表示
    员 工 编 号 员 工 姓 名 员 工 性 别 员 工 生 日 部 门 编 号 入 职 日 期
    10000001 张三 男 1992-10-29 1000000001 2018-03-26
    10000002 李四 男 1990-05-27 1000000001 2017-09-10
    10000003 王五 女 1993-04-03 1000000002 2019-03-09
    10000004 赵六 男 1995-06-20 1000000002 2017-04-19
    10000005 杨七 女 1992-01-16 1000000003 2017-05-07
    10000006 冯八 女 1994-03-26 1000000003 2020-10-16
    可以看出,员工信息表中以部门编号为外键,而部门编号又是部门表中的主键,所以员工信息表中的外键引用的是部门表中的主键。
    1.1.9 索引
    索引从本质上来讲是一种单独的数据库结构,它能够单独地存储在计算机的磁盘上,包含着对相关数据表中所有数据的引用指针。通过索引能够快速定位并查询出数据表中的一行或者多行数据,而不必进行全表扫描。
    在某种程度上,数据库的索引和书籍的目录有些类似。当查找书籍中的内容时,往往不会直接翻阅书籍的内容,这样查找起来相当烦琐;如果先根据书籍的目录定位到要查找的内容在书籍中的大概章节,然后再到相关的章节中去查找内容就比较简单了。
    索引使查询能够快速到达计算机中的某个位置去搜寻数据文件,而不必对所有的数据进行扫描。索引的建立,可以大大提高数据查询的效率。
    1.1.10 视图
    视图从本质上来讲是数据库的一种虚表,它是由SELECT查询语句从一张表或者多张表中导出的一种虚表。不能向视图中插入、更新和删除数据,即视图不负责数据的实际存储。当通过视图修改数据时,实际上修改的是构成视图的基本表中的数据,当修改了构成视图的基本表中的数据时,视图中的数据也会随之改变。
    使用视图能够大大简化数据库中表与表之间复杂的关联查询。
    1.1.11 存储过程
    存储过程是一种SQL语句集,经过编译后存储在数据库中,通过指定存储过程的名称和参数信息来调用存储过程,使其完成特定的功能。在创建存储过程的时候,可以自定义变量来存储一些中间结果的数据,也可以在存储过程中定义一些执行逻辑和执行流程。
    存储过程经过一次编译后可以**使用(只要不删除存储过程)。将一些复杂的查询逻辑封装在存储过程中重复使用,应用程序只需要调用存储过程的名称并传入相应的参数即可,大大简化了开发和数据查询的复杂度。另外,使用存储过程也可以防止用户直接访问数据表,只需要赋予用户对存储过程的访问权限即可。
    1.1.12 触发器
    触发器从本质上来讲是一种特殊的存储过程。触发器的执行不是由应用程序调用,也不是由手动执行的,而是由数据库中的事件执行的。当对某个表中的数据进行插入、更新和删除操作时,系统会自动执行相应的触发器。
    在某种程度上,触发器和钩子函数有些类似。应用程序在执行某项操作时,会自动调用相应的钩子函数,执行钩子函数的逻辑。而触发器是对数据表进行操作时自动执行的。
    当对数据表中的数据执行插入、更新和删除操作,需要自动执行一些数据库逻辑时,可以使用触发器来实现。
    1.1.13 存储引擎
    存储引擎代表的是一种存储技术。对于每种存储引擎来说,其对应的存储机制、索引存放方式、索引技巧、数据库锁机制及数据的存储方式各不相同。
    MySQL中*常用到的存储引擎是InnoDB和MyISAM。
    1.2 数据库的发展
    数据库技术经历了漫长的演化过程,在此期间各种存储技术层出不穷,在一定程度上促进了数据库技术的发展。数据库的发展经历了人工管理阶段、文件系统阶段、数据库系统阶段和云数据库阶段(笔者认为目前已经步入云数据库阶段)。
    1.2.1 人工管理阶段
    顾名思义,人工管理阶段需要人工管理和维护数据。此时,不会对数据进行保存操作,所有的数据都是由开发人员开发的程序进行管理,没有专门的系统或软件对数据进行存储、管理和维护。同时,数据无法在多个应用程序之间共享,也没有独立性。如果需要对数据的结构进行变更,就必须通过修改相应的应用程序来实现,复杂程度可想而知。
    在人工管理阶段,程序开发人员需要付出大量额外的时间和精力来管理和维护数据,这无疑加重了程序开发人员的负担。
    1.2.2 文件系统阶段
    在文件系统阶段,有专门的文件系统对数据进行管理和维护,此时数据可以被长期保存在计算机的磁盘上。应用程序和数据之间由文件系统提供的方法或接口进行调取,这在一定程度上使应用程序和数据之间具备了一定的独立性。此时的程序开发人员可以不必过多地关注数据的存储细节。
    但是,文件系统阶段的数据独立性仍然比较低,数据的共享性也比较差,需要进一步提升数据的独立性和共享性。
    1.2.3 数据库系统阶段
    随着互联网技术的发展,计算机产生的数据越来越多,使用文件系统已经远远不能满足各种应用的需求。此时,数据库技术应运而生,标志着数据库的发展进入了数据库系统阶段。
    在数据库系统阶段,有专门的数据库管理系统对数据进行管理和维护。此时,应用程序和数据之间由数据库管理系统提供的方法或接口进行调取,所以应用程序和数据之间具备独立性。此时的数据共享性比较好,可以在多个应用程序之间共享,同时,此阶段提供了相应的数据库设计规范,使得数据的冗余度比较低。
    在此阶段中,特别是关系型数据库的出现,使得数据能够以一种二维表格的形式进行展现。在关系型数据库中,表里的一行代表着一条完整的基础信息,一列表示数据行的特定属性,大大简化了数据的存储与展现模型。
    除了关系型数据库之外,在数据库系统阶段还出现了很多非关系型数据库,如Key-Value型数据库Memcached、Redis和文档型数据库MongoDB等。
    1.2.4 云数据库阶段
    2013年是大数据元年,标志着互联网正式进入了大数据时代。在大数据时代,互联网会产生更多的数据,传统单机数据库已经无法满足大数据时代对海量数据的存储需求。业界开始探究一种即开即用且具有高度稳定性和可靠性,同时具备可弹性伸缩的在线数据库,以满足大数据时代对海量数据的存储需求。
    云数据库可以实现按照需求进行付费使用,按照业务需求对数据库进行扩展;同时,云数据库支持数据的读写分离,数据库发生故障时能够自动切换,自动实现数据的备份操作,实现数据的监控和报警等。目前,已经有越来越多的应用部署到了“云”上,也有越来越多的公司开始使用云数据库。
    云数据库可以分为关系型数据库和非关系型数据库两大类。云数据库中的典型代表有阿里巴巴的RDS数据库和OceanBase数据库。
    1.3 本 章 总 结
    本章简要介绍了数据库的定义,对数据库的相关概念进行了简单描述,然后对数据库的发展进行了简单的介绍。下一章将会对数据库技术进行简要介绍。
    目录
    前言 第1篇 MySQL基础 第1章 数据库概述 2 1.1 数据库的定义 2 1.1.1 数据库 2 1.1.2 数据库管理系统 2 1.1.3 数据表 3 1.1.4 数据类型 3 1.1.5 运算符 4 1.1.6 函数 4 1.1.7 主键 4 1.1.8 外键 4 1.1.9 索引 6 1.1.10 视图 6 1.1.11 存储过程 6 1.1.12 触发器 6 1.1.13 存储引擎 7 1.2 数据库的发展 7 1.2.1 人工管理阶段 7 1.2.2 文件系统阶段 7 1.2.3 数据库系统阶段 8 1.2.4 云数据库阶段 8 1.3 本章总结 8 第2章 数据库技术 9 2.1 数据库系统 9 2.2 SQL语言 11 2.2.1 SQL语言分类 11 2.2.2 ER图 12 2.2.3 SQL执行流程 14 2.3 数据库访问技术 15 2.4 本章总结 16 第3章 MySQL数据库 17 3.1 MySQL三大范式 17 3.1.1 **范式 17 3.1.2 第二范式 18 3.1.3 第三范式 19 3.1.4 反范式化 19 3.2 MySQL存储引擎 20 3.2.1 查看MySQL中的存储引擎 20 3.2.2 常用存储引擎介绍 21 3.3 本章总结 23 第2篇 环境搭建 第4章 安装三大操作��统 26 4.1 安装VMware虚拟机 26 4.1.1 下载VMware虚拟机 26 4.1.2 安装VMware虚拟机步骤 30 4.2 安装Windows操作系统 31 4.2.1 下载Windows操作系统 31 4.2.2 设置VMware虚拟机 33 4.2.3 安装Windows操作系统步骤 38 4.3 安装Mac OS X操作系统 44 4.3.1 设置VMware虚拟机 45 4.3.2 安装Mac OS X操作系统步骤 46 4.4 安装CentOS操作系统 55 4.4.1 下载CentOS操作系统 55 4.4.2 设置VMware虚拟机 56 4.4.3 安装CentOS操作系统步骤 56 4.5 本章总结 65 第5章 服务器基础配置 66 5.1 配置CentOS 6.8服务器环境 66 5.1.1 修改主机名 66 5.1.2 配置静态IP地址 69 5.1.3 配置主机名和IP地址的映射关系 71 5.1.4 配置防火墙规则 71 5.1.5 配置root用户SSH免密码登录 73 5.2 添加mysql用户身份 75 5.2.1 添加mysql用户组和用户 75 5.2.2 赋予mysql用户目录权限 75 5.2.3 赋予mysql用户sudo权限 76 5.2.4 赋予mysql用户登录密码 76 5.2.5 配置mysql用户SSH免密码登录 76 5.3 本章总结 77 第6章 搭建MySQL环境 78 6.1 基于MSI文件安装Windows版本的MySQL 78 6.1.1 下载MySQL的MSI安装包 78 6.1.2 基于MSI文件安装MySQL 80 6.1.3 配置MySQL系统环境变量 90 6.1.4 测试MySQL 92 6.2 基于ZIP文件安装Windows版本的MySQL 92 6.2.1 下载MySQL的ZIP安装包 92 6.2.2 基于ZIP文件安装MySQL 94 6.2.3 配置MySQL系统环境变量 96 6.2.4 测试MySQL 97 6.3 基于DMG文件安装Mac OS X版本的MySQL 98 6.3.1 下载MySQL的DMG安装包 98 6.3.2 基于DMG文件安装MySQL 100 6.3.3 配置MySQL系统环境变量 102 6.3.4 测试MySQL 104 6.4 基于GZ文件安装Mac OS X版本的MySQL 105 6.4.1 下载MySQL的GZ安装包 105 6.4.2 基于GZ文件安装MySQL 105 6.4.3 配置MySQL系统环境变量 107 6.4.4 测试MySQL 107 6.5 基于RPM文件安装CentOS版本的MySQL 109 6.5.1 删除CentOS 6.8服务器自带的MySQL 109 6.5.2 下载MySQL的RPM安装包 110 6.5.3 基于RPM文件安装MySQL 111 6.5.4 测试MySQL 113 6.6 基于源码安装CentOS版本的MySQL 114 6.6.1 环境准备 115 6.6.2 下载软件包 116 6.6.3 升级gcc和cmake 117 6.6.4 编译安装MySQL源码 119 6.6.5 配置MySQL 120 6.6.6 初始化并启动MySQL服务 123 6.6.7 测试MySQL 123 6.6.8 编译安装MySQL的boost源码 124 6.7 遇到的问题和解决方案 125 6.8 本章总结 126 第3篇 MySQL开发 第7章 MySQL操作数据库 128 7.1 创建数据库 128 7.1.1 使用CREATE DATABASE语句创建数据库 128 7.1.2 使用CREATE DATABASE IF NOT EXISTS语句创建数据库 129 7.2 查看数据库 130 7.2.1 查看MySQL中存在的数据库 130 7.2.2 查看MySQL命令行所在的数据库 131 7.2.3 查看数据库的创建信息 131 7.3 修改数据库名称 132 7.3.1 通过重命名数据表修改数据库名称 132 7.3.2 通过导入/导出数据修改数据库名称 133 7.3.3 通过创建数据表修改数据库名称 134 7.4 数据库编码 135 7.4.1 创建数据库时指定字符编码 135 7.4.2 修改数据库的字符编码 136 7.5 删除数据库 136 7.6 本章总结 137 第8章 MySQL操作数据表 138 8.1 创建数据表 138 8.1.1 创建空数据表 138 8.1.2 创建数据表时指定主键 141 8.1.3 创建数据表时指定外键 142 8.1.4 创建数据表时指定字段非空 144 8.1.5 创建数据表时指定默认值 144 8.1.6 创建数据表时指定主键默认递增 145 8.1.7 创建数据表时指定存储引擎 146 8.1.8 创建数据表时指定编码 146 8.2 查看数据表结构 147 8.2.1 使用DESCRIBE/DESC语句查看表结构 147 8.2.2 使用SHOW CREATE TABLE语句查看表结构 148 8.3 修改数据表 149 8.3.1 修改数据表名称 150 8.3.2 添加字段 150 8.3.3 添加字段时指定位置 151 8.3.4 修改字段名称 153 8.3.5 修改字段的数据类型 154 8.3.6 修改字段的位置 154 8.3.7 删除字段 156 8.3.8 修改已有表的存储引擎 157 8.3.9 取消数据表的外键约束 158 8.4 删除数据表 158 8.4.1 删除没有关联关系的数据表 158 8.4.2 删除有外键约束的主表 160 8.5 MySQL中的临时表 160 8.5.1 创建临时表 161 8.5.2 删除临时表 161 8.6 本章总结 162 第9章 MySQL数据类型 163 9.1 数值类型 163 9.1.1 整数类型 163 9.1.2 浮点数类型 168 9.1.3 定点数类型 171 9.2 日期和时间类型 173 9.2.1 YEAR类型 174 9.2.2 TIME类型 176 9.2.3 DATE类型 178 9.2.4 DATETIME类型 181 9.2.5 TIMESTAMP类型 183 9.3 文本字符串类型 186 9.3.1 文本字符串类型概述 186 9.3.2 CHAR与VARCHAR类型 187 9.3.3 TEXT类型 188 9.3.4 ENUM类型 189 9.3.5 SET类型 191 9.3.6 JSON类型 192 9.4 二进制字符串类型 193 9.4.1 二进制字符串类型概述 193 9.4.2 BIT类型 194 9.4.3 BINARY与VARBINARY类型 195 9.4.4 BLOB类型 196 9.5 本章总结 196 第10章 MySQL运算符 197 10.1 算术运算符 197 10.1.1 MySQL支持的算术运算符 197 10.1.2 算术运算符简单示例 198 10.2 比较运算符 199 10.2.1 MySQL支持的比较运算符 199 10.2.2 比较运算符简单示例 201 10.3 逻辑运算符 206 10.3.1 MySQL支持的逻辑运算符 206 10.3.2 逻辑运算符简单示例 206 10.4 位运算符 208 10.4.1 MySQL支持的位运算符 208 10.4.2 位运算符简单示例 208 10.5 运算符的优先级 210 10.6 本章总结 211 第11章 MySQL函数 212 11.1 MySQL函数简介 212 11.2 数学函数 213 11.2.1 **值函数 213 11.2.2 圆周率函数 213 11.2.3 获取整数的函数 213 11.2.4 返回列表中的*大值与*小值函数 214 11.2.5 角度与弧度互换函数 215 11.2.6 三角函数 215 11.2.7 乘方与开方函数 217 11.2.8 对数函数 218 11.2.9 随机函数 219 11.2.10 四舍五入与数字截取函数 220 11.2.11 符号函数 221 11.2.12 数学运算函数 221 11.3 字符串函数 222 11.3.1 ASCII(S)函数 222 11.3.2 CHAR_LENGTH(S)函数 222 11.3.3 LENGTH(S)函数 223 11.3.4 CONCAT(S1,S2,…,Sn)函数 223 11.3.5 CONCAT_WS(X, S1,S2,…,Sn)函数 223 11.3.6 INSERT(oldstr, x, y, replacestr)函数 224 11.3.7 LOWER(S)函数 224 11.3.8 UPPER(S)函数 225 11.3.9 LEFT(str, x)函数 225 11.3.10 RIGHT(str, x)函数 225 11.3.11 LPAD(str, n pstr)函数 226 11.3.12 RPAD(str, n, pstr)函数 226 11.3.13 LTRIM(S)函数 226 11.3.14 RTRIM(S)函数 226 11.3.15 TRIM(S)函数 227 11.3.16 TRIM(substr FROM str)函数 227 11.3.17 REPEAT(str, x)函数 227 11.3.18 REPLACE(S,A,B)函数 227 11.3.19 STRCMP(S1, S2)函数 228 11.3.20 SUBSTR(S, X, Y)函数 228 11.3.21 MID(S, X, Y)函数 228 11.3.22 SPACE(X)函数 229 11.3.23 LOCATE(substr, str)函数 229 11.3.24 ELT(M, S1, S2, …, Sn)函数 230 11.3.25 FIELD(S,S1,S2,…,Sn)函数 230 11.3.26 FIND_IN_SET(S1, S2)函数 230 11.3.27 REVERSE(S)函数 231 11.3.28 NULLIF(value1, value2)函数 231 11.4 日期和时间函数 231 11.4.1 CURDATE()函数 232 11.4.2 CURTIME()函数 232 11.4.3 NOW()函数 232 11.4.4 UNIX_TIMESTAMP(date)函数 233 11.4.5 FROM_UNIXTIME(timestamp)函数 233 11.4.6 UTC_DATE()函数 233 11.4.7 UTC_TIME()函数 234 11.4.8 YEAR(date)函数 234 11.4.9 MONTH(date)函数 234 11.4.10 MONTHNAME(date)函数 235 11.4.11 DAY(date)函数 235 11.4.12 DAYNAME(date)函数 235 11.4.13 DAYOFWEEK(date)函数 235 11.4.14 WEEKDAY(date)函数 236 11.4.15 WEEK(date)函数 236 11.4.16 WEEKOFYEAR(date)函数 236 11.4.17 DAYOFYEAR(date)函数 237 11.4.18 DAYOFMONTH(date)函数 237 11.4.19 QUARTER(date)函数 237 11.4.20 HOUR(time)函数 237 11.4.21 MINUTE(time)函数 238 11.4.22 SECOND(time)函数 238 11.4.23 EXTRACT(type FROM date)函数 238 11.4.24 TIME_TO_SEC(time)函数 239 11.4.25 SEC_TO_TIME(seconds)函数 240 11.4.26 DATE_ADD(date, INTERVAL expr type)函数 240 11.4.27 DATE_SUB(date, INTERVAL expr type)函数 241 11.4.28 ADDTIME(time1, time2)函数 241 11.4.29 SUBTIME(time1, time2)函数 242 11.4.30 DATEDIFF(date1, date2)函数 242 11.4.31 FROM_DAYS(N)函数 242 11.4.32 LAST_DAY(date)函数 243 11.4.33 MAKEDATE(year, n)函数 243 11.4.34 MAKETIME(hour, minute, second)函数 243 11.4.35 PERIOD_ADD(time, n)函数 244 11.4.36 TO_DAYS(date)函数 244 11.4.37 DATE_FORMAT(date, format)函数 244 11.4.38 TIME_FORMAT(time, format)函数 245 11.4.39 GET_FORMAT(date_type, format_type)函数 246 11.4.40 STR_TO_DATE(str, format)函数 246 11.5 流程处理函数 247 11.5.1 IF(value, value1,value2)函数 247 11.5.2 IFNULL(value1, value2)函数 247 11.5.3 CASE WHEN THEN函数 247 11.5.4 CASE expr WHEN函数 248 11.6 加密与解密函数 248 11.6.1 PASSWORD(value)函数 249 11.6.2 MD5(value)函数 249 11.6.3 ENCODE(value, password_seed)函数 249 11.6.4 DECODE(value, password_seed)函数 249 11.7 聚合函数 250 11.7.1 COUNT(*/字段名称)函数 250 11.7.2 MAX(字段名称)函数 251 11.7.3 MIN(字段名称)函数 251 11.7.4 SUM(字段名称)函数 251 11.7.5 AVG(字段名称)函数 251 11.8 获取MySQL信息函数 252 11.8.1 VERSION()函数 252 11.8.2 CONNECTION_ID()函数 252 11.8.3 DATABASE()函数 252 11.8.4 USER()函数 253 11.8.5 LAST_INSERT_ID()函数 253 11.8.6 CHARSET(value)函数 254 11.8.7 COLLATION(value)函数 254 11.9 加锁与解锁函数 254 11.9.1 GET_LOCK(value, timeout)函数 254 11.9.2 RELEASE_LOCK(value)函数 255 11.9.3 IS_FREE_LOCK(value)函数 255 11.9.4 IS_USED_LOCK(value)函数 255 11.10 JSON函数 256 11.10.1 JSON_CONTAINS(json_doc, value)函数 256 11.10.2 JSON_SEARCH(json_doc ->> '$[*].key', type, value)函数 257 11.10.3 JSON_PRETTY(json_doc)函数 257 11.10.4 JSON_DEPTH(json_doc)函数 257 11.10.5 JSON_LENGTH(json_doc[, path])函数 258 11.10.6 JSON_KEYS(json_doc[, path])函数 258 11.10.7 JSON_INSERT(json_doc, path, val[, path, val] ...)函数 258 11.10.8 JSON_REMOVE(json_doc, path[, path] ...)函数 259 11.10.9 JSON_REPLACE(json_doc, path, val[, path, val] ...)函数 259 11.10.10 JSON_SET(json_doc, path, val[, path, val] ...)函数 260 11.10.11 JSON_TYPE(json_val)函数 261 11.10.12 JSON_VALID(value)函数 261 11.11 窗口函数 261 11.11.1 序号函数 263 11.11.2 分布函数 264 11.11.3 前后函数 265 11.11.4 首尾函数 267 11.11.5 其他函数 268 11.12 MySQL的其他函数 269 11.12.1 FORMAT(value, n)函数 269 11.12.2 CONV(value, from, to)函数 269 11.12.3 INET_ATON(value)函数 270 11.12.4 INET_NTOA(value)函数 270 11.12.5 BENCHMARK(n, expr)函数 270 11.12.6 CAST(value AS type)函数 271 11.12.7 CONVERT(value USING char_code)函数 271 11.13 本章总结 272 第12章 MySQL数据变更 273 12.1 数据插入 273 12.1.1 数据插入规则 273 12.1.2 插入完整的行记录 274 12.1.3 指定字段插入数据 275 12.1.4 一次插入多条数据记录 276 12.1.5 将查询结果插入另一个表中 278 12.2 数据更新 280 12.2.1 更新数据表中的所有记录 281 12.2.2 更新表中特定的数据行 281 12.2.3 更新某个范围内的数据 282 12.2.4 更新符合正则表达式的数据 285 12.3 数据删除 286 12.3.1 删除数据表中特定的数据 286 12.3.2 删除某个范围内的数据 286 12.3.3 删除符合正则表达式的数据 289 12.3.4 删除数据表中的所有数据 289 12.4 本章总结 289 第13章 MySQL数据查询 290 13.1 数据准备 290 13.2 SELECT查询语句 291 13.2.1 查询表中所有字段的数据 291 13.2.2 查询表中单个字段的数据 293 13.2.3 查询表中指定字段的数据 294 13.2.4 使用完全限定字段名查询数据 294 13.2.5 使用完全限定表名查询数据 295 13.3 WHERE条件语句 296 13.3.1 WHERE语句语法格式 296 13.3.2 查询单一的特定数据 296 13.3.3 查询某个范围内的数据 297 13.3.4 IN和NOT IN条件语句 297 13.3.5 BETWEEN AND条件语句 298 13.3.6 LIKE条件语句 299 13.3.7 空值条件限制语句 300 13.3.8 AND语句 302 13.3.9 OR语句 303 13.3.10 DISTINCT语句 303 13.3.11 ORDER BY语句 304 13.3.12 GROUP BY语句 306 13.3.13 HAVING语句 308 13.3.14 WITH ROLLUP语句 308 13.3.15 对数据同时进行分组与排序 308 13.3.16 LIMIT语句 309 13.4 数据聚合查询 310 13.4.1 查询数据的总行数 310 13.4.2 查询某列数据的总和 311 13.4.3 查询某列数据的*小值 312 13.4.4 查询某列数据的*大值 312 13.4.5 查询某列数据的平均值 313 13.5 JOIN语句 314 13.5.1 INNER JOIN语句 314 13.5.2 LEFT JOIN语句 315 13.5.3 RIGHT JOIN语句 316 13.5.4 CROSS JOIN 语句 317 13.5.5 使用复合连接条件查询数据 317 13.6 子查询语句 318 13.6.1 ANY子查询 318 13.6.2 ALL子查询 319 13.6.3 EXISTS子查询 319 13.6.4 NOT EXISTS子查询 320 13.6.5 IN子查询 320 13.6.6 NOT IN子查询 321 13.6.7 子查询作为结果字段 321 13.7 UNION联合语句 322 13.7.1 UNION语句 322 13.7.2 UNION ALL语句 323 13.8 使用别名查询数据 323 13.8.1 为字段名指定别名 323 13.8.2 为表名指定别名 324 13.8.3 同时为字段名和表名指定别名 325 13.9 使用正则表达式查询数据 325 13.10 本章总结 326 第14章 MySQL索引 327 14.1 索引简介 327 14.1.1 MySQL遍历表的方式 327 14.1.2 索引的优点与缺点 328 14.1.3 索引的创建原则 328 14.2 索引的使用场景 329 14.2.1 适合创建索引的场景 329 14.2.2 不适合创建索引的场景 330 14.3 创建数据表时创建索引 330 14.3.1 语法格式 330 14.3.2 创建普通索引 331 14.3.3 创建**索引 332 14.3.4 创建主键索引 333 14.3.5 创建单列索引 333 14.3.6 创建组合索引 334 14.3.7 创建全文索引 337 14.3.8 创建空间索引 338 14.4 为已有数据表添加索引 338 14.4.1 语法格式 339 14.4.2 创建普通索引 339 14.4.3 创建**索引 340 14.4.4 创建主键索引 341 14.4.5 创建单列索引 342 14.4.6 创建组合索引 343 14.4.7 创建全文索引 344 14.4.8 创建空间索引 345 14.5 删除索引 347 14.5.1 语法格式 347 14.5.2 删除索引方式 347 14.6 隐藏索引 348 14.6.1 隐藏索引概述 349 14.6.2 语法格式 349 14.6.3 创建测试表 349 14.6.4 索引操作 350 14.7 降序索引 355 14.7.1 降序索引概述 355 14.7.2 降序索引操作 355 14.8 函数索引 359 14.8.1 函数索引概述 359 14.8.2 函数索引操作 359 14.9 本章总结 363 第15章 MySQL视图 364 15.1 视图概述 364 15.1.1 视图的概念 364 15.1.2 视图的优点 364 15.2 创建视图 365 15.2.1 语法格式 365 15.2.2 创建单表视图 366 15.2.3 创建多表联合视图 369 15.3 查看视图 370 15.3.1 使用SHOW TABLES语句查看视图 370 15.3.2 使用DESCRIBE/DESC语句查看视图 371 15.3.3 使用SHOW TABLE STATUS语句查看视图 371 15.3.4 使用SHOW CREATE VIEW语句查看视图 373 15.3.5 查看views数据表中的视图信息 373 15.4 修改视图的结构 374 15.4.1 使用CREATE OR REPLACE VIEW语句修改视图结构 374 15.4.2 使用ALTER语句修改视图结构 375 15.5 更新视图的数据 376 15.5.1 直接更新视图数据 376 15.5.2 间接更新视图数据 379 15.6 删除视图 381 15.7 本章总结 382 第16章 存储过程和函数 383 16.1 存储过程和函数简介 383 16.1.1 什么是存储过程和函数 383 16.1.2 存储过程和函数的使用场景 384 16.1.3 存储过程和函数的优点 384 16.2 创建存储过程和函数 386 16.2.1 创建存储过程 386 16.2.2 创建存储函数 388 16.3 查看存储过程和函数 389 16.3.1 查看存储过程和函数的创建或定义信息 389 16.3.2 查看存储过程和函数的状态信息 390 16.3.3 从数据库中查看存储过程和函数的信息 391 16.4 修改存储过程和函数 394 16.4.1 修改存储过程 394 16.4.2 修改存储函数 395 16.5 调用存储过程和函数 396 16.5.1 调用存储过程 396 16.5.2 调用存储函数 397 16.6 删除存储过程和函数 398 16.6.1 删除存储过程 398 16.6.2 删除存储函数 398 16.7 MySQL中使用变量 399 16.7.1 定义变量 399 16.7.2 变量赋值 400 16.8 MySQL中使用变量案例 401 16.8.1 在存储过程中使用变量 401 16.8.2 在函数中使用变量 402 16.9 定义条件和处理程序 403 16.9.1 定义条件 403 16.9.2 定义处理程序 404 16.10 定义条件和处理程序案例 405 16.10.1 在存储过程中未定义条件和处理程序 406 16.10.2 在存储过程中定义条件和处理程序 407 16.10.3 在函数中未定义条件和处理程序 408 16.10.4 在函数中定义条件和处理程序 409 16.11 MySQL中游标的使用 410 16.11.1 声明游标 410 16.11.2 打开游标 410 16.11.3 使用游标 411 16.11.4 关闭游标 411 16.12 MySQL中游标的使用案例 412 16.12.1 在存储过程中使用游标 412 16.12.2 在函数中使用游标 413 16.13 MySQL中控制流程的使用 414 16.13.1 使用IF语句控制流程 414 16.13.2 使用CASE语句控制流程 415 16.13.3 使用LOOP语��控制流程 417 16.13.4 使用LEAVE语句控制流程 418 16.13.5 使用ITERATE语句控制流程 418 16.13.6 使用REPEAT语句控制流程 419 16.13.7 使用WHILE语句控制流程 420 16.14 本章总结 421 第17章 MySQL触发器 422 17.1 创建触发器 422 17.1.1 语法格式 422 17.1.2 创建触发器示例 423 17.2 查看触发器 425 17.2.1 使用SHOW TRIGGERS语句查看触发器的信息 425 17.2.2 使用SHOW CREATE TRIGGER语句查看触发器的信息 426 17.2.3 通过查看triggers数据表中的数据查看触发器的信息 427 17.3 删除触发器 429 17.3.1 语法格式 429 17.3.2 删除触发器示例 429 17.4 本章小结 429 第18章 MySQL分区 430 18.1 分区介绍 430 18.1.1 不同版本MySQL的分区 430 18.1.2 分区的优势 432 18.1.3 分区类型 433 18.2 RANGE分区 434 18.2.1 创建分区表 434 18.2.2 添加分区 437 18.2.3 删除分区 438 18.2.4 重定义分区 440 18.3 LIST分区 442 18.3.1 创建分区表 442 18.3.2 添加分区 443 18.3.3 删除分区 444 18.3.4 重定义分区 444 18.4 COLUMNS分区 445 18.4.1 RANGE COLUMNS分区 446 18.4.2 LIST COLUMNS分区 447 18.5 HASH分区 448 18.5.1 创建分区表 448 18.5.2 添加分区 449 18.5.3 合并分区 450 18.6 KEY分区 451 18.7 子分区 452 18.8 分区中的NULL值处理 452 18.8.1 RANGE分区中的NULL值 452 18.8.2 LIST分区中的NULL值 453 18.8.3 HASH分区与KEY分区中的NULL值 454 18.9 本章总结 455 第19章 MySQL公用表表达式和生成列 456 19.1 公用表表达式 456 19.1.1 非递归CTE 456 19.1.2 递归CTE 457 19.1.3 递归CTE的限制 459 19.2 生成列 461 19.2.1 创建表时指定生成列 462 19.2.2 为已有表添加生成列 463 19.2.3 修改已有的生成列 464 19.2.4 删除生成列 464 19.3 本章总结 465 第4篇 MySQL优化 第20章 MySQL查询优化 468 20.1 SHOW STATUS语句解析 468 20.2 EXPLAIN语句解析 469 20.3 SHOW PROFILE语句解析 477 20.3.1 分析InnoDB数据表 478 20.3.2 分析MyISAM数据表 480 20.3.3 分析MySQL源码 481 20.4 pt-query-digest分析查询 482 20.5 优化子查询 483 20.6 本章总结 483 第21章 MySQL索引优化 484 21.1 索引的类型 484 21.2 使用索引的场景 485 21.2.1 全值匹配 485 21.2.2 查询范围 486 21.2.3 匹配*左前缀 486 21.2.4 查询索引列 487 21.2.5 匹配字段前缀 487 21.2.6 **与范围匹配索引 488 21.2.7 匹配NULL值 488 21.2.8 连接查询匹配索引 489 21.2.9 LIKE匹配索引 490 21.3 无法使用索引的场景 490 21.3.1 以通配符开始的LIKE语句 490 21.3.2 数据类型转换 491 21.3.3 联合索引未匹配*左列 491 21.3.4 OR语句 492 21.3.5 计算索引列 492 21.3.6 范围条件右侧的列无法使用索引 493 21.3.7 使用或!=操作符匹配查询条件 493 21.3.8 匹配NOT NULL值 493 21.3.9 索引耗时 494 21.4 使用索引提示 494 21.4.1 使用索引 494 21.4.2 忽略索引 495 21.4.3 强制使用索引 495 21.5 使用生成列为JSON建立索引 496 21.6 本章总结 497 第22章 SQL语句优化 498 22.1 嵌套查询的优化 498 22.2 OR条件语句的优化 500 22.3 ORDER BY语句的优化 501 22.4 GROUP BY语句的优化 502 22.5 分页查询的优化 503 22.5.1 回表查询优化分页 503 22.5.2 记录数据标识优化分页 504 22.6 插入数据的优化 505 22.6.1 MyISAM数据表插入数据的优化 505 22.6.2 InnoDB数据表插入数据的优化 506 22.7 删除数据的优化 506 22.8 本章总结 507 第23章 数据库优化 508 23.1 优化数据类型 508 23.1.1 使用数据类型的基本原则 508 23.1.2 优化表中的数据类型 509 23.2 删除重复索引和冗余索引 511 23.2.1 创建测试索引 511 23.2.2 使用pt-duplicate-key-checker删除重复索引和冗余索引 511 23.2.3 使用mysqlindexcheck删除重复索引和冗余索引 513 23.3 反范式化设计 514 23.4 增加中间表 515 23.5 分析数据表 517 23.6 检查数据表 518 23.7 优化数据表 518 23.8 拆分数据表 519 23.8.1 垂直拆分数据表 519 23.8.2 水平拆分数据表 520 23.9 本章总结 520 第24章 MySQL服务器优化 521 24.1 MySQL服务器硬件的优化 521 24.1.1 优化硬件配置 521 24.1.2 系统内核优化 522 24.2 MySQL配置项的优化 523 24.3 本章总结 524 第25章 应用程序优化 525 25.1 复用数据库连接 525 25.2 减少数据访问 526 25.3 开启查询缓存 527 25.4 使用外部缓存 528 25.5 使用分布式MySQL架构 529 25.6 本章总结 529 第26章 MySQL的其他优化选项 530 26.1 使用performance_schema数据库分析MySQL 530 26.1.1 查看MySQL是否支持performance_schema 530 26.1.2 开启或关闭performance_schema 532 26.1.3 performance_schema的简单配置与使用 532 26.2 使用sys数据库分析MySQL 535 26.2.1 sys数据库概述 535 26.2.2 sys数据库的常用查询 535 26.3 MySQL 8.x中的资源组 538 26.3.1 开启 CAP_SYS_NICE 538 26.3.2 创建资源组 539 26.3.3 查看资源组 540 26.3.4 绑定资源组 540 26.3.5 修改资源组 542 26.3.6 开启与禁用资源组 542 26.3.7 删除资源组 543 26.4 本章总结 544 第5篇 MySQL运维 第27章 MySQL命令行工具 546 27.1 查看MySQL命令 546 27.2 mysql命令 547 27.2.1 登录MySQL终端 547 27.2.2 设置客户端连接编码 549 27.2.3 直接执行SQL语句 550 27.2.4 格式化输出结果 550 27.2.5 SQL报错处理 551 27.3 mysqladmin命令 552 27.3.1 mysqladmin命令参数 553 27.3.2 mysqladmin命令简单示例 553 27.4 myisampack命令 554 27.5 mysqlbinlog命令 555 27.6 mysqlcheck命令 558 27.7 mysqlshow命令 559 27.8 mysqldump命令 561 27.9 mysqlimport命令 563 27.10 本章总结 564 第28章 MySQL日志 565 28.1 查询日志 565 28.1.1 开启查询日志 565 28.1.2 查看查询日志 566 28.1.3 删除查询日志 567 28.1.4 关闭查询日志 568 28.2 慢查询日志 568 28.2.1 开启慢查询日志 568 28.2.2 查看慢查询日志 569 28.2.3 删除慢查询日志 570 28.2.4 关闭慢查询日志 571 28.3 错误日志 571 28.3.1 开启错误日志 571 28.3.2 查看错误日志 572 28.3.3 删除错误日志 572 28.3.4 关闭错误日志 573 28.4 二进制日志 573 28.4.1 开启二进制日志 573 28.4.2 查看二进制日志 574 28.4.3 删除二进制日志 575 28.4.4 暂时停止与开启二进制日志 577 28.4.5 关闭二进制日志 577 28.5 本章总结 577 第29章 数据备份与恢复 578 29.1 基于mysqldump备份并恢复数据 578 29.1.1 备份数据 578 29.1.2 恢复数据 581 29.2 基于mysqlpump备份并恢复数据 582 29.3 基于mydumper备份并恢复数据 583 29.3.1 安装mydumper 583 29.3.2 备份数据 584 29.3.3 恢复数据 588 29.4 基于mysqlhotcopy备份并恢复数据 589 29.4.1 安装mysqlhotcopy 589 29.4.2 备份数据 590 29.4.3 恢复数据 590 29.5 基于xtrabackup备份并恢复数据 590 29.5.1 安装xtrabackup 590 29.5.2 备份数据 591 29.5.3 恢复准备 593 29.5.4 恢复数据 594 29.6 数据备份与恢复案例 596 29.6.1 完全恢复数据案例 596 29.6.2 基于位置点恢复数据案例 598 29.6.3 基于时间点恢复数据案例 598 29.7 MySQL灾难恢复 598 29.7.1 问题重现 599 29.7.2 问题分析 599 29.7.3 问题解决 600 29.8 实现数据库的自动备份 602 29.9 导出数据 603 29.9.1 使用SELECT INTO OUTFILE语句导出数据 603 29.9.2 使用mysqldump命令导出数据 605 29.9.3 使用mysql命令导出数据 606 29.10 导入数据 607 29.10.1 使用LOAD DATA INFILE导入数据 608 29.10.2 使用mysqlimport导入数据 609 29.11 遇到的问题和解决方案 610 29.12 本章总结 611 第30章 MySQL账户管理 612 30.1 MySQL中的权限表 612 30.2 创建普通用户 613 30.2.1 使用CREATE USER语句创建用户 613 30.2.2 使用GRANT语句创建用户 617 30.2.3 操作user数据表创建用户 619 30.3 为用户授权 620 30.3.1 权限层级 620 30.3.2 使用GRANT语句为用户授权 621 30.3.3 通过操作权限表为用户授权 624 30.4 查看用户权限 624 30.4.1 通过SHOW GRANTS FOR语句查看用户权限 624 30.4.2 通过查询mysql.user数据表查看用户权限 625 30.4.3 通过查询information_schema数据库查看用户权限 625 30.5 修改用户权限 626 30.5.1 使用GRANT语句修改用户权限 626 30.5.2 通过操作数据表修改用户权限 627 30.6 撤销用户权限 628 30.6.1 使用REVOKE语句撤销用户权限 628 30.6.2 通过操作数据表撤销用户权限 629 30.7 修改用户密码 630 30.7.1 通过mysqladmin修改用户密码 630 30.7.2 使用SET PASSWORD语句修改用户密码 630 30.7.3 使用GRANT语句修改用户密码 631 30.7.4 通过操作user数据表修改用户密码 632 30.7.5 忘记root密码的解决方案 632 30.8 删除用户 633 30.8.1 使用DROP USER语句删除用户 633 30.8.2 使用DELETE语句删除用户 634 30.9 限制用户使用资源 634 30.9.1 限制用户使用资源示例 634 30.9.2 修改用户的资源限制 635 30.9.3 解除用户的资源限制 635 30.10 MySQL 8.x版本中的账户管理 636 30.10.1 用户创建和授权 636 30.10.2 认证插件更新 636 30.10.3 密码管理 638 30.10.4 角色管理 640 30.11 本章总结 644 第6篇 MySQL架构 第31章 MySQL复制 646 31.1 搭建MySQL主从复制环境 646 31.1.1 服务器规划 646 31.1.2 搭建MySQL主从环境 647 31.1.3 测试MySQL主从复制环境 650 31.2 搭建MySQL主主复制环境 652 31.2.1 服务器规划 652 31.2.2 将MySQL主从环境切换为主主环境 652 31.2.3 直接搭建MySQL主主环境 654 31.2.4 测试MySQL主主复制环境 654 31.3 添加MySQL从库 655 31.3.1 服务器规划 655 31.3.2 在主从服务器上进行的操作 656 31.3.3 测试MySQL主从复制环境 658 31.4 切换主从复制到链式复制 659 31.4.1 服务器规划 659 31.4.2 切换复制模式 660 31.5 切换链式复制到主从复制 662 31.6 搭建MySQL多源复制环境 665 31.6.1 服务器规划 665 31.6.2 搭建MySQL多源复制环境 666 31.6.3 测试MySQL多源复制环境 667 31.7 添加复制过滤器 668 31.7.1 复制指定的数据库 669 31.7.2 忽略指定的数据库 669 31.7.3 复制指定的数据表 670 31.7.4 忽略指定的数据表 670 31.8 设置延迟复制 671 31.9 基于GTID搭建MySQL主从复制环境 671 31.10 基于半同步模式搭建MySQL主从复制环境 673 31.10.1 半同步参数说明 673 31.10.2 配置半同步复制 674 31.10.3 测试半同步复制 676 31.11 本章总结 677 第32章 MySQL读写分离 678 32.1 基于MySQL Proxy实现读写分离 678 32.1.1 服务器规划 678 32.1.2 安装Lua环境 679 32.1.3 安装MySQL Proxy 679 32.1.4 配置MySQL Proxy读写分离 680 32.1.5 启动MySQL Proxy 683 32.1.6 测试MySQL Proxy的读写分离 683 32.2 基于Atlas实现读写分离 685 32.2.1 服务器规划 685 32.2.2 安装Atlas 685 32.2.3 配置Atlas读写分离 686 32.2.4 启动Atlas 687 32.2.5 测试Atlas读写分离 689 32.3 基于ProxySQL实现读写分离 689 32.3.1 服务器规划 689 32.3.2 安装ProxySQL 690 32.3.3 配置ProxySQL读写分离 690 32.3.4 测试ProxySQL读写分离 695 32.4 基于Amoeba实现读写分离 695 32.4.1 服务器规划 695 32.4.2 安装JDK 695 32.4.3 安装Amoeba 696 32.4.4 配置Amoeba读写分离 697 32.4.5 启动Amoeba 699 32.4.6 测试Amoeba读写分离 700 32.5 基于Mycat实现读写分离 700 32.5.1 服务器规划 701 32.5.2 安装JDK 701 32.5.3 安装Mycat 701 32.5.4 配置Mycat读写分离 702 32.5.5 启动Mycat 703 32.5.6 测试Mycat读写分离 704 32.6 本章总结 704 第33章 MySQL HA高可用架构 705 33.1 基于Keepalived搭建MySQL高可用环境 705 33.1.1 服务器规划 705 33.1.2 安装Keepalived 706 33.1.3 配置MySQL高可用 707 33.1.4 测试MySQL高可用 710 33.1.5 自动重启MySQL 711 33.2 基于HAProxy搭建Mycat高可用环境 713 33.2.1 服务器规划 713 33.2.2 安装Mycat状态检查服务 713 33.2.3 安装HAProxy服务 715 33.2.4 配置Mycat负载均衡 716 33.2.5 测试Mycat高可用环境 719 33.3 基于Keepalived搭建HAProxy高可用环境 721 33.3.1 服务器规划 721 33.3.2 安装并配置HAProxy和Keepalived 721 33.3.3 配置HAProxy高可用性 722 33.3.4 测试HAProxy高可用性 725 33.4 本章总结 726 参考文献 727

    与描述相符

    100

    北京 天津 河北 山西 内蒙古 辽宁 吉林 黑龙江 上海 江苏 浙江 安徽 福建 江西 山东 河南 湖北 湖南 广东 广西 海南 重庆 四川 贵州 云南 西藏 陕西 甘肃 青海 宁夏 新疆 台湾 香港 澳门 海外