{"msg":"操作成功","code":200,"data":{"createBy":"admin","createTime":"2020-03-06 10:43:05","updateBy":"admin","updateTime":"2020-03-06 10:43:05","remark":null,"id":17,"articleTitle":"MySQL（一）MySQL介绍与安装","articleUrl":"mysql_install","articleThumbnail":"https://www.asumimoe.com/imgfiles/20220908/9e192744fab244d39d3b15fca035c9f7.jpg","articleFlag":"0","draftStatus":"1","reprintStatement":"1","articleSummary":"MySQL是企业中常用的一种关系型数据库，本文主要介绍MySQL的源码安装方法","articleContent":"## MySQL介绍\n\nMySQL 是一个 **开源的关系型数据库管理系统（RDBMS）**，由瑞典 MySQL AB 公司开发，现属于 Oracle 旗下产品。它是全球最受欢迎的数据库之一，尤其在 Web 应用开发领域广泛应用。MySQL 使用标准的 **SQL（结构化查询语言）** 进行数据操作，并支持多种存储引擎、跨平台部署和高扩展性。\n\n---\n\n### **1. MySQL 的核心特性**  \n\nMySQL 的成功得益于其 **高性能、高可靠性和灵活性**，以下是其核心特性：\n\n#### **（1）开源与社区支持**  \n\n- MySQL 采用 **GPL 协议**，允许用户免费使用和修改源代码。  \n- 活跃的全球开发者社区提供了丰富的文档、教程和问题解决方案，确保其技术的持续创新和稳定性。\n\n#### **（2）跨平台兼容性**  \n\n- 支持多种操作系统，包括 **Linux、Windows、macOS、FreeBSD、Solaris** 等，便于在不同环境中部署。  \n\n#### **（3）多语言支持**  \n\n- 提供多种编程语言的 API 接口，包括 **C、C++、Java、Python、PHP、Perl、Ruby、.NET** 等，方便与各类应用集成。  \n\n#### **（4）存储引擎多样性**  \n\n- **InnoDB**：默认存储引擎，支持事务处理、行级锁和外键约束，适用于高并发和高可靠性场景。  \n- **MyISAM**：早期默认引擎，以高性能读取著称，但不支持事务和崩溃恢复。  \n- **Memory**：将数据存储在内存中，适合临时表和高速缓存。  \n- **其他引擎**：如 CSV、Archive、Blackhole 等，满足特定需求。\n\n#### **（5）高性能与可扩展性**  \n\n- 通过 **B 树索引、查询优化器** 和 **缓存机制** 提升查询效率。  \n- 支持 **主从复制、集群（如 MySQL Cluster）和分片**，实现大规模数据存储和高并发处理。  \n\n#### **（6）高可用性与容灾**  \n\n- 提供 **复制（Replication）** 功能，支持主从架构、多源复制和并行复制，确保数据冗余和故障转移。  \n- 通过 **GTID（全局事务标识）** 简化复制管理，提升数据一致性。  \n\n#### **（7）安全性**  \n\n- 支持 **SSL/TLS 加密连接**，防止中间人攻击。  \n- 提供 **基于角色的访问控制（RBAC）**、权限管理和审计功能，保障数据安全。  \n- 符合 GDPR、PCI-DSS 等行业安全标准。  \n\n#### **（8）现代功能支持**  \n\n- **JSON 数据类型**：原生支持 JSON 文档存储和查询（从 MySQL 5.7 开始）。  \n- **GIS 扩展**：支持空间数据类型和地理信息系统（GIS）查询。  \n- **在线 DDL**：允许在表修改时保持读写操作，减少业务中断。  \n- **分区表**：将大表按规则拆分，提升查询效率。  \n\n---\n\n### **2. MySQL 的应用场景**  \n\nMySQL 几乎覆盖所有主流业务场景，以下为其典型应用：  \n\n#### **（1）Web 应用开发**  \n\n- 作为 **LAMP（Linux + Apache + MySQL + PHP/Python/Perl）** 栈的核心组件，支撑中小型网站、电商平台、博客系统等。  \n- 例如：WordPress、Facebook 早期版本均基于 MySQL 构建。  \n\n#### **（2）大数据与分析**  \n\n- 结合 **MySQL HeatWave**（MySQL 8.0 的分析型数据库服务），支持实时分析、复杂查询和机器学习任务。  \n- 用于日志分析、用户行为追踪等场景。  \n\n#### **（3）云计算与 SaaS**  \n\n- 作为云数据库服务（如 Amazon RDS for MySQL、Azure Database for MySQL）的核心组件，提供按需扩展和托管服务。  \n- 支持 SaaS（软件即服务）平台的多租户架构。  \n\n#### **（4）物联网（IoT）**  \n\n- 处理海量设备数据，结合时序数据库特性（如 InnoDB 的压缩功能）优化存储和查询。  \n\n#### **（5）金融与企业级应用**  \n\n- 通过 **InnoDB 的 ACID 事务支持**，满足银行、保险等行业的高可靠性需求。  \n- 企业资源计划（ERP）、客户关系管理（CRM）系统常使用 MySQL 存储核心数据。  \n\n---\n\n### **3. MySQL 的技术架构**  \n\nMySQL 采用 **客户端-服务器（C/S）架构**，主要组件包括：  \n\n#### **（1）MySQL 守护进程（mysqld）**  \n\n- 核心服务程序，管理数据库实例、处理客户端连接和执行 SQL 请求。  \n\n#### **（2）存储引擎层**  \n\n- 负责数据存储和检索，支持插件式架构，用户可根据需求选择不同引擎。  \n\n#### **（3）SQL 解析与优化器**  \n\n- 将 SQL 语句解析为执行计划，通过 **成本模型** 选择最优查询路径。  \n\n#### **（4）缓冲池（InnoDB Buffer Pool）**  \n\n- 缓存数据和索引，减少磁盘 I/O，显著提升性能。  \n\n#### **（5）二进制日志（Binary Log）**  \n\n- 记录所有数据库变更操作，支持数据恢复、主从复制和审计。  \n\n## MySQL引擎介绍\n\nMySQL 提供了多种存储引擎，每种引擎针对不同的使用场景进行了优化。以下是几种常见的 MySQL 存储引擎及其详细说明：\n\n### **1. InnoDB**\n\n**特点：**\n\n- **事务支持**：支持 ACID 事务（原子性、一致性、隔离性、持久性），适合需要高可靠性和数据一致性的场景。\n- **行级锁**：支持行级锁定，减少并发操作时的锁竞争，适合高并发写入的场景。\n- **外键约束**：支持外键约束，确保表之间的数据完整性。\n- **崩溃恢复**：通过重做日志（Redo Log）和撤销日志（Undo Log）实现崩溃恢复，保证数据一致性。\n- **聚簇索引**：数据按主键聚集存储，查询效率高。\n- **默认引擎**：自 MySQL 5.5 起成为默认存储引擎。\n\n**适用场景：**\n\n- 需要事务处理的应用（如银行系统、订单管理）。\n- 高并发写入的场景（如电商平台、社交网络）。\n- 需要外键约束和数据一致性的业务。\n\n**优点：**\n\n- 高可靠性，支持事务回滚和崩溃恢复。\n- 行级锁减少锁冲突，提升并发性能。\n- 外键约束保障数据完整性。\n\n**缺点：**\n\n- 相比 MyISAM，读取速度稍慢。\n- 配置复杂度较高（如缓冲池、日志文件管理）。\n\n### **2. MyISAM**\n\n**特点：**\n\n- **不支持事务**：无事务处理能力，适合只读或读多写少的场景。\n- **表级锁**：写操作时对整张表加锁，导致并发性能较低。\n- **全文索引**：支持全文索引，适合文本搜索。\n- **简单高效**：存储结构简单，数据和索引分别存储为 `.MYD` 和 `.MYI` 文件。\n- **压缩存储**：支持数据压缩，节省磁盘空间。\n\n**适用场景：**\n\n- 读密集型应用（如日志系统、静态数据查询）。\n- 全文搜索引擎（如早期版本的博客平台）。\n- 不需要事务和并发写入的场景。\n\n**优点：**\n\n- 读取速度快，适合大规模数据查询。\n- 文件结构简单，易于备份和恢复。\n\n**缺点：**\n\n- 不支持事务和崩溃恢复，数据安全性较低。\n- 表级锁导致并发写入性能差。\n\n---\n\n### **3. Memory（HEAP）**\n\n**特点：**\n\n- **内存存储**：数据完全存储在内存中，访问速度极快。\n- **不持久化**：服务器重启后数据丢失。\n- **表级锁**：写操作时对整张表加锁。\n- **哈希索引**：支持哈希索引，适合等值查询。\n- **临时数据**：适合存储临时数据或缓存。\n\n**适用场景：**\n\n- 临时表或缓存（如会话数据、中间计算结果）。\n- 需要高速读写的短时任务（如统计分析）。\n\n**优点：**\n\n- 查询和写入速度极快。\n- 无需磁盘 I/O，适合内存充足且数据量小的场景。\n\n**缺点：**\n\n- 数据不持久化，服务器重启后数据丢失。\n- 受限于内存大小，不适合存储大规模数据。\n\n---\n\n### **4. CSV**\n\n**特点：**\n\n- **CSV 格式**：数据以逗号分隔值（CSV）文件存储，便于与其他工具交换数据。\n- **无索引**：不支持索引，查询性能较低。\n- **简单结构**：适合数据导入导出和与其他系统的集成。\n\n**适用场景：**\n\n- 数据导入导出（如 Excel、ETL 工具）。\n- 与其他系统共享数据（如日志分析、报表生成）。\n\n**优点：**\n\n- 数据格式通用，易于解析和共享。\n- 适合轻量级数据交换。\n\n**缺点：**\n\n- 不支持索引，查询效率低。\n- 不支持事务和并发操作。\n\n---\n\n### **5. Archive**\n\n**特点：**\n\n- **高压缩比**：数据压缩率高，适合存储大量历史数据。\n- **只支持 INSERT 和 SELECT**：不支持 UPDATE 和 DELETE 操作。\n- **顺序存储**：数据按插入顺序存储，查询性能较低。\n\n**适用场景：**\n\n- 归档历史数据（如日志、交易记录）。\n- 长期存储但不常访问的数据。\n\n**优点：**\n\n- 压缩率高，节省磁盘空间。\n- 适合存储只读的历史数据。\n\n**缺点：**\n\n- 不支持更新和删除操作。\n- 查询性能差，不适合频繁访问。\n\n---\n\n### **6. MariaDB 存储引擎**\n\n**特点：**\n\n- **兼容 MySQL**：MariaDB 是 MySQL 的分支，兼容 MySQL 并提供额外功能。\n- **新特性支持**：如 Aria 引擎（支持崩溃恢复的 MyISAM 替代品）、ColumnStore（列式存储）。\n\n**适用场景：**\n\n- 需要替代 MySQL 的场景（如更高性能或新特性支持）。\n- 开源社区活跃，适合实验性项目。\n\n**优点：**\n\n- 提供更多存储引擎选择。\n- 社区驱动，创新性强。\n\n**缺点：**\n\n- 与 MySQL 完全兼容性可能受限。\n- 企业支持不如 Oracle 官方版本。\n\n---\n\n### **总结：如何选择存储引擎？**\n\n| 存储引擎        | 事务支持 | 锁机制 | 适用场景                   |\n| --------------- | -------- | ------ | -------------------------- |\n| **InnoDB**      | ✅        | 行级锁 | 高并发事务、电商、金融系统 |\n| **MyISAM**      | ❌        | 表级锁 | 读密集型应用、日志系统     |\n| **Memory**      | ❌        | 表级锁 | 临时数据、缓存、高速查询   |\n| **CSV**         | ❌        | 无     | 数据交换、导入导出         |\n| **Archive**     | ❌        | 无     | 归档历史数据、日志存储     |\n| **Blackhole**   | ❌        | 无     | 调试、复制测试             |\n| **Federated**   | ❌        | 无     | 跨服务器查询、分布式架构   |\n| **NDB Cluster** | ✅        | 行级锁 | 高可用性、分布式存储       |\n| **Merge**       | ❌        | 表级锁 | 合并多个表、分区管理       |\n\n**选择建议：**\n\n- **默认选择 InnoDB**：除非有特殊需求（如只读场景），InnoDB 是最通用的引擎。\n- **MyISAM 用于读密集型场景**：如日志分析或静态数据查询。\n- **Memory 用于临时数据**：如会话存储或缓存。\n- **Archive 用于归档数据**：如长期存储历史记录。\n\n根据具体业务需求选择合适的存储引擎，可以显著提升数据库性能和可靠性。\n\n## MySQL安装\n\n### 1.下载mysql5.7源码包\n\n```shell\nmkdir  /usr/local/mysql57\ncd /usr/local/mysql57\nwget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.26.tar.gz\ntar -xf mysql-5.7.26.tar.gz\n```\n\n### 2.添加mysql用户和用户组\n\n```shell\ngroupadd mysql\nuseradd -g mysql -r mysql\n```\n\n### 3.创建相关目录，并授予权限\n\n```shell\nmkdir /home/mysql57 创建安装目录\nmkdir /data/mysql57 创建数据存放目录\nmkdir /var/log/mysql 创建日志目录\n\nchown -R mysql.mysql /data/mysql57\nchown -R mysql.mysql /var/log/mysql\nchmod -R 755 /data/mysql57\n```\n\n### 4.安装相关依赖及boost\n\n```shell\nyum install cmake gcc gcc-c++ ncurses-devel bison zlib libxml openssl automake autoconf make libtool bison-devel libaio-devel\n\ncd /usr/local\nwget http://downloads.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz\ntar -zxvf  boost_1_59_0.tar.gz\n```\n\n### 5.编译安装\n\n```shell\ncd /usr/local/mysql57/mysql-5.7.26\n\ncmake \\\n-DCMAKE_INSTALL_PREFIX=/home/mysql57 \\    #安装目录\n\n-DINSTALL_DATADIR=/data/mysql57 \\  #数据目录\n\n-DDEFAULT_CHARSET=utf8 \\   #默认编码\n\n-DDEFAULT_COLLATION=utf8_general_ci \\  #默认校验规则\n\n-DEXTRA_CHARSETS=all \\ \n\n-DWITH_SSL=yes \\ \n\n-DWITH_EMBEDDED_SERVER=1 \\ \n\n-DENABLED_LOCAL_INFILE=1 \\ \n\n-DWITH_MYISAM_STORAGE_ENGINE=1 \\    #激活myisam\n\n-DWITH_INNOBASE_STORAGE_ENGINE=1 \\  #激活innodb \n\n-DWITH_ARCHIVE_STORAGE_ENGINE=1 \\    #\n\n-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \\ \n\n-DWITH_FEDERATED_STORAGE_ENGINE=1 \\ \n\n-DWITH_PARTITION_STORAGE_ENGINE=1 \\ \n  \n-DMYSQL_TCP_PORT=3306 \\    #端口\n\n-DENABLED_LOCAL_INFILE=1 \\  #允许导入数据\n\n-DSYSCONFDIR=/etc \\   \n\n-DWITH_READLINE=on \\   #快捷键功能  \n\n-DWITH_BOOST=/usr/local/boost_1_59_0 \\  #增强插件\n\nmake && make install\n```\n\n### 6.编写配置文件\n\n```shell\nvim /etc/my.cnf\n[client]\nport=3306\n[mysqld]\nport=3306\nbasedir=/home/mysql57\ndatadir=/data/mysql57\nsocket=/home/mysql57/mysql.sock\nuser=mysql\ncharacter-set-server=utf8\ndefault-storage-engine=InnoDB\nsymbolic-links=0\nlog-error=/var/log/mysql/mysqld.log\n```\n\n### 7.初始化mysql\n\n```shell\n/home/mysql57/bin/mysqld \\\n--initialize-insecure \\\n--defaults-file=/etc/my.cnf \\\n--user=mysql \\\n--basedir=/home/mysql57 \\\n--datadir=/data/mysql57\n初始化完成后会显示产生的root用户随机密码\n```\n\n### 8.添加环境变量并设置mysql开机自启\n\n```shell\nvim /etc/profile\nexport PATH=/home/mysql57/bin:$PATH\n\nsource /etc/profile 使环境变量生效\n\ncp /home/mysql57/support-files/mysql.server /etc/init.d/mysqld\nchmod 755 /etc/init.d/mysqld\nservice mysqld restart\nchkconfig --add mysqld\nchkconfig mysqld on\n```\n\n### 9.登录mysql\n\n```shell\n如果初始化步骤中没有记住产生的密码，可以用以下方式查看\ncat /var/log/mysql/mysqld.log | grep passwd\n\nmysql -uroot -p\n\nmysql5.7修改密码：\nmysql> set PASSWORD=PASSWORD('xxxxxxxx');\nQuery OK, 0 rows affected, 1 warning (0.01 sec)\n\nmysql> alter user 'root'@'localhost' PASSWORD EXPIRE NEVER;\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> flush privileges;\nQuery OK, 0 rows affected (0.00 sec)\n```\n\n","categoryId":4,"viewCount":968,"categoryName":"MySQL","author":"球接子","authorAvatar":null,"tagIds":[2,17],"tagNames":["MySQL","数据库"]}}