还剩48页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
数据库操作教程MySQL欢迎学习数据库操作教程本课程将全面介绍数据库的基本概MySQL MySQL念、安装配置、核心操作及性能优化等内容,帮助您从零开始掌握这一主流关系型数据库管理系统无论您是数据库初学者还是希望提升技能的开发人员,本教程都将为您提供系统化的学习路径和丰富的实践案例,使您能够在实际工作中灵活应用数MySQL据库技术课程简介介绍及课程目标适用人群与学习路径在业界的应用场景MySQL MySQL本课程将系统讲解数据库的适合程序开发人员、数据分析师、广泛应用于互联网产品、电MySQL MySQL核心功能与操作技巧,旨在帮助学系统管理员及对数据库技术感兴趣子商务、金融系统和企业信息化建习者掌握数据库设计、查询优化和的从业者学习路径从基础概念设,是目前最流行的开源关系数据IT日常维护的专业技能,为数据库应入手,循序渐进至高级应用,配合库管理系统之一,掌握技能MySQL用开发打下坚实基础实战案例巩固知识点将显著提升就业竞争力数据库基础概念数据库与数据库管理系统关系型数据库简介简介与发展历史DBMS MySQL关系型数据库基于关系模型,将数据组织是一个开源的关系型数据库管理MySQL数据库是结构化信息或数据的有组织集合,成一个或多个表格(关系),每个表格由系统,最初由瑞典公司开发,MySQL AB通常以电子形式存储在计算机系统中数行和列组成每行代表一个实体,每列代后被收购,现归属于公司自Sun Oracle据库管理系统是一种软件,用于表该实体的一个属性表之间可以建立关年首次发布以来,已发展DBMS1995MySQL创建和管理数据库,允许用户存储、检索、联关系,实现数据的有效组织成为世界上最受欢迎的开源数据库之一更新和管理数据主要特性MySQL性能与扩展性优秀的查询性能和处理速度,支持高并发访问通过分区表、复制和集群等技术,可轻开源性与跨平台松实现水平扩展,满足大规模数据处理需求采用协议开源,可自由使MySQL GPL用和修改源代码同时支持、Windows、等多种操作系统,具有Linux MacOS应用领域与优势极强的跨平台兼容性广泛应用于网站、应用程序和企业信息系统相比商业数据库,具有部署简单、成本低廉、社区活跃等明显优势版本选择与对比版本系列主要特点适用场景稳定性好,兼容性强传统应用,追求稳定MySQL
5.6性的系统性能提升,安全性增大多数生产环境的首MySQL
5.7强选支持,窗口函新项目,需要现代特MySQL
8.0JSON数,新认证机制性的场景分支,完全对开源纯度有要求的MariaDB MySQL兼容且有额外功能项目在选择版本时,应综合考虑项目需求、团队熟悉度、长期支持情况和性能特性社区版适合大多数应用场景,商业版则提供额外的企业级功能和技术支持安装方式MySQL安装安装部署Windows LinuxDocker下载官方安装包使用包管理器拉取官方镜像•MSI•apt/yum•MySQL运行安装向导进行配置添加官方源创建容器并设置环境变量••MySQL•设置密码与服务选项安装和包挂载持久化数据卷•root•server client•可选择开发者默认设置初始化数据目录便于开发与测试环境•••初识命令行工具MySQL连接服务器使用命令mysql-h hostname-u username-p参数说明指定主机,指定用户名,提示输入密码-h-u-p执行命令SQL输入语句后以分号结束,按回车执行SQL多行可跨行输入,直到遇到分号SQL常用命令显示所有数据库SHOW DATABASES;选择数据库USE database_name;显示当前数据库的表SHOW TABLES;退出客户端使用或命令,也可使用快捷方式EXIT QUIT\q退出前确保已提交事务,避免数据丢失图形化管理工具介绍MySQL WorkbenchNavicat phpMyAdmin官方提供的图形界面工具,集成了开功能强大的商业数据库管理工具,界面友基于的开源管理工具,安装简便,通SQL Web发、数据库设计、服务器配置、用户管理好,操作简单支持多种数据库系统,包过浏览器即可访问支持大多数数据库操等功能提供数据库模型可视化设计,适括数据传输、备份恢复、数据同步等高级作,广泛用于网站托管环境,特别适合远合数据库架构师和开发人员使用功能,适合数据库管理员日常工作程管理服务器MySQL配置文件与服务管理配置文件位置系统通常位于安装目录下的文件Windows MySQLmy.ini系统通常位于或Linux/etc/my.cnf/etc/mysql/my.cnf核心配置参数数据目录参数设置数据存储位置datadir端口设置参数默认为port3306字符集设置服务器默认字符集character-set-server服务启停命令使用服务控制面板或命令Windows netstart/stop mysql使用或Linux systemctlstart/stop/restart mysqlservice mysqlstart/stop/restart日志文件设置错误日志参数指定错误日志位置log-error慢查询日志记录执行时间超过阈值的查询slow-query-log二进制日志用于复制和恢复操作log-bin数据库基础操作概述创建数据库与表设计数据结构,创建数据库和表增删改查操作CRUD管理数据的基本操作高级查询与优化复杂查询技术和性能优化数据库操作遵循特定流程,从创建数据结构开始,到日常的数据操作,再到高级查询和优化掌握这一流程将帮助您更加系统地学习MySQL接下来的章节将详细讲解每个环节的具体操作方法和注意事项建议在学习过程中,配合实际操作练习,加深对各个命令的理解和记忆准备一个测试数据库环境,跟随教程一步步实践,是掌握的MySQL最佳途径创建数据库基本语法字符集选择排序规则推荐使用,支持完整通常选择CREATE DATABASE[IF utf8mb4utf8mb4_general_ci的字符(包括表(不区分大小写)或NOT EXISTS]Unicode emoji情)(区分大小写)database_name utf8mb4_bin[CHARACTER SETcharset_name][COLLATEcollation_name];--创建简单数据库CREATE DATABASEmy_database;--创建指定字符集和排序规则的数据库CREATE DATABASEmy_database_utf8CHARACTER SETutf8mb4COLLATE utf8mb4_unicode_ci;--创建数据库(如果不存在)CREATE DATABASEIF NOTEXISTS test_db;查看与切换数据库查看服务器上所有可访问的数据库是日常操作的基础使用命令可以列出所有数据库,包括系统数据库(如、、SHOW DATABASESinformation_schema mysql等)和用户创建的数据库performance_schema在操作特定数据库前,需要先使用命令来选择当前工作数据库例如,会将当前环境切换到数据库切换后,所有不指定数据库名称USE USEcustomer_db;customer_db的表操作都将在该数据库中执行如需查看当前正在使用的数据库,可以使用命令,它会返回当前选择的数据库名称这在同时管理多个数据库时特别有用,帮助确认当前工作环境SELECT DATABASE修改与删除数据库修改数据库属性删除数据库注意事项中修改数据库主要是更改其使用命令可以删除操作不可逆转,执行后数据库MySQL DROPDATABASE字符集和排序规则使用永久删除数据库及其所有表和数据中的所有数据将永久丢失在生产ALTER命令可以调整这些设置,操作前应当非常谨慎,并确保已备环境中,应当严格控制数据库删除DATABASE但无法修改数据库名称如需重命份所有重要数据建议在执行删除权限,并建立操作审计机制,防止名数据库,通常需要创建新库并迁前先确认数据库名称,避免误操作误删或恶意删除导致业务中断移数据表的基本组成主键与索引确保数据完整性和查询效率约束条件控制数据规则和关系字段与数据类型定义表结构和数据存储方式表是关系型数据库的核心组成部分,由行和列组成每一列(字段)定义了数据的特定属性,包括名称、数据类型和约束;每一行代表一条记录,包含该记录的所有属性值选择适当的数据类型对性能和存储空间有重要影响整数类型(如、)适用于数值;字符类型(如、)适用于INT BIGINTVARCHAR TEXT文本;日期时间类型(如、)适用于时间信息;而适用于精确小数DATE TIMESTAMPDECIMAL建表与字段设置语法常用数据类型CREATE TABLE整数•TINYINT,INT,BIGINTCREATE TABLE table_name浮点•FLOAT,DOUBLEcolumn1datatype[constraints],定点数column2datatype[constraints],•DECIMAL...字符串•VARCHAR,CHAR,TEXT[PRIMARY KEYcolumn]日期时间•DATE,TIME,DATETIME[ENGINE=engine_type];二进制•BLOB,BINARY特殊类型•JSON,ENUM,SET创建表时需指定表名、字段名、数据类型和约束条件可选择存储引擎,默认为InnoDB修改表结构添加字段ALTER TABLEtable_name ADDcolumn_name datatype[constraints][FIRST|AFTER column];可以指定新字段的位置,默认添加到最后添加多个字段时用逗号分隔定义修改字段ALTER TABLEtable_name MODIFYcolumn_name new_datatype[constraints];或使用命令同时修改名称CHANGE ALTER TABLEtable_name CHANGEold_columnnew_column new_datatype[constraints];删除字段ALTER TABLEtable_name DROPCOLUMN column_name;删除操作不可逆,建议先备份数据或在测试环境验证表重命名ALTER TABLEold_table_name RENAMETO new_table_name;或使用RENAME TABLEold_table_name TOnew_table_name;删除与清空表DROP TABLETRUNCATE TABLE完全删除表结构和所有数据,不可恢复执行后,表的定义、索清空表中所有数据,但保留表结构执行速度比快,因DELETE引、触发器等全部删除为它不记录单个行删除操作DROP TABLE[IF EXISTS]table_name;TRUNCATE TABLEtable_name;使用可以避免表不存在时产生错误可以同时删除多操作不触发触发器,且会重置IF EXISTSTRUNCATE DELETE个表计数器它是一种操作,无法在事务DROP TABLEtable1,table2,table3;AUTO_INCREMENT DDL中回滚在选择删除方式时,应根据实际需求判断如果需要删除表及其所有内容,且不再需要该表,使用;如果只需要快速清空DROP TABLE数据但保留表结构,使用;如果需要有选择地删除部分数据,或需要在事务中操作,则使用TRUNCATE TABLEDELETE FROM数据库设计范式第一范式1NF要求数据表的每个字段都是不可分割的原子项,不能包含重复的属性组例如,不应在一个字段中存储多个值(如逗号分隔的列表),而应该将其拆分为独立字段或单独的表第二范式2NF在满足第一范式的基础上,要求所有非主键字段必须完全依赖于主键,而不是依赖于主键的一部分这通常要求表具有适当的主键,并消除部分依赖关系第三范式3NF在满足第二范式的基础上,要求所有非主键字段必须直接依赖于主键,而不能依赖于其他非主键字段这避免了传递依赖,提高了数据的一致性数据插入操作单行插入多行插入从查询结果插入基本语法为语法语法INSERT INTO table_name INSERTINTOtable_name INSERTINTO target_tablecolumn1,column2,...VALUES column1,column2,...VALUES column1,column2,...SELECT col1,value1,value2,...;row1_value1,row1_value2,...,col2,...FROM source_table WHERErow2_value1,row2_value2,...;conditions;可以只指定部分列,未指定的列将使用默认值或(如果允许)值的顺序必须一次插入多行可以显著提高大批量数据导此方式可以方便地从一个表复制数据到另NULL与列的顺序一致入的性能,减少网络交互和事务开销一个表,常用于数据迁移和表复制操作数据查询基础FROMSELECT指定查询的表选择要返回的列WHERE设置筛选条件LIMIT限制返回行数ORDER BY结果排序方式查询是中最常用的操作,用于从数据库中检索数据基本语法为SELECT MySQLSELECT column1,column2,...FROM table_name[WHEREcondition][ORDER BYcolumn][LIMIT offset,count];可以使用别名(关键字)为列或表指定更易读的名称例如在查询AS SELECTfirst_name ASname,birth_date ASbirthday FROM users;中使用通配符()可以选择所有列,但这在生产环境中可能导致性能问题,建议仅选择需要的列*条件查询WHERE操作符描述示例等于不等于小于大于=,!=,,///WHERE age18在指定范围内BETWEEN WHERE price BETWEEN10AND50匹配列表中的任意值中IN WHEREcountry IN国日本韩国,,模式匹配张LIKE WHERE name LIKE%值为IS NULLNULL WHERE phone ISNULL逻辑与逻辑或AND,OR/WHERE age20AND女gender=子句用于筛选满足特定条件的记录可以使用多种操作符组合复杂条件,使用括号明确操WHERE作优先级处理值时,必须使用或,不能使用等号比较NULL ISNULL ISNOT NULL多表连接()JOIN内连接左连接右连接INNER JOINLEFT JOINRIGHT JOIN返回两表中满足连接条件的记录只包含返回左表中的所有记录,即使右表中没有返回右表中的所有记录,即使左表中没有在两表中都存在的匹配记录,不匹配的行匹配项如果右表中没有匹配记录,则结匹配项与相反,保留右表所LEFT JOIN将被排除最常用的连接类型,默认的果集中右表的列显示为常用于查找有行在实践中,通常可以通过调整表顺NULL类型丢失的关系序使用替代JOINLEFT JOINRIGHT JOIN数据修改操作基本语法使用表达式多表更新可以使用算术表达式UPDATE table_name UPDATEt1,t2SETSET column1=value1,UPDATE productsSET t
1.c1=t
2.c2WHEREcolumn2=value2,...price=price*
1.1t
1.c3=t
2.c3;电子WHERE condition;WHERE category=;安全更新务必包含条件,建WHERE议先用测试条件的SELECT正确性语句用于修改数据库中现有的记录在没有条件的情况下,将UPDATE WHEREUPDATE修改表中的所有行,这可能导致灾难性后果因此,除非确实需要更新所有记录,否则应始终包含子句WHERE数据删除操作语法安全实践DELETE在执行前,强烈建议先使用验证条件DELETE FROMtable_name[WHERE condition];DELETE SELECTWHERE是否筛选出预期的记录操作可以包含子句,用于指定要删除的行不DELETE WHERE带条件的操作将删除表中的所有数据,但保留WHERE DELETE--先确认要删除的记录表结构SELECT*FROM users WHERE last_login2020-01-操作会被写入事务日志,支持回滚,并会触发DELETE DELETE01;触发器对于大表,可能比慢,因为它逐DELETE TRUNCATE行删除并记录日志--确认无误后再执行删除DELETE FROMusersWHERElast_login2020-01-01;对于重要数据,建议在删除前创建备份或在测试环境中先验证操作的影响事务处理基础原子性Atomicity事务中的所有操作要么全部完成,要么全部不完成如果事务中任何操作失败,整个事务将回滚到开始前的状态,不会有部分更改被应用一致性Consistency事务完成后,数据库必须从一个一致性状态转变到另一个一致性状态所有的数据库约束、触发器、级联规则都不能被违反隔离性Isolation多个事务并发执行时,一个事务的执行不应该被另一个事务干扰隔离级别决定了事务之间可见性的程度持久性Durability一旦事务提交,其结果应该永久保存在数据库中,即使系统发生崩溃,已提交的事务也不会丢失事务隔离级别隔离级别脏读不可重复读幻读适用场景可能发生可能发生可能发生对一致性要求很低的场景READ UNCOMMITTED不会发生可能发生可能发生大多数应用READ COMMITTEDOLTP不会发生不会发生可能发生默认级别REPEATABLE READMySQL不会发生不会发生不会发生对一致性要求极高的场景SERIALIZABLE设置事务隔离级别使用命令级别名称或级别名称查看当前隔离SET TRANSACTION ISOLATION LEVEL[];SET SESSIONTRANSACTIONISOLATIONLEVEL[];级别SELECT@@transaction_isolation;隔离级别越高,一致性越好,但并发性能越低实际应用中需要在一致性需求和性能之间找到平衡点默认使用级别,这对大多数应MySQL InnoDBREPEATABLE READ用已经足够常见数据类型详解提供多种数据类型,选择合适的类型对存储效率和查询性能至关重要整数类型包括字节、字节、MySQL TINYINT1SMALLINT2字节、字节和字节,可根据数值范围需求选择MEDIUMINT3INT4BIGINT8字符串类型中,是固定长度,适合存储长度相近的短字符串;是可变长度,适合长度变化的文本;系列用于存储大文本CHAR VARCHARTEXT数据日期时间类型包括、、和,后者自动更新且受时区影响DATE TIMEDATETIME TIMESTAMP特殊类型如和用于限定可选值,提高数据完整性;类型()支持原生数据存储和查询;系列用于二ENUM SETJSON MySQL
5.7+JSON BLOB进制数据存储合理选择数据类型可以优化存储空间和提高查询效率子查询用法单行子查询返回单个值的子查询,通常与比较运算符一起使用多行子查询返回多行的子查询,通常与、、等运算符配合IN ANYALL相关子查询引用外部查询列的子查询,每行外部查询都会执行一次--查找比平均价格高的产品(单行子查询)SELECT*FROM productsWHERE priceSELECT AVGpriceFROM products;--查找在北京或上海有订单的客户(多行子查询)SELECT*FROM customersWHERE idIN SELECT customer_id FROMorders WHEREcity IN北京,上海;--查找每个类别中价格最高的产品(相关子查询)SELECT*FROM productsp1WHEREprice=SELECT MAXpriceFROM productsp2WHEREp
2.category=p
1.category;子查询可以出现在、、和子句中在优化查询时,有时可以用替代子句中SELECT FROMWHERE HAVINGJOIN WHERE的子查询,提高性能复杂子查询可能导致性能问题,应考虑索引优化或查询重写聚合与分组查询COUNT计数函数计算行数或非值数量NULLSUM求和函数计算数值列的总和AVG平均值函数计算数值列的平均值MAX/MIN最大最小值函数/查找列的最大或最小值子句用于按一个或多个列对结果集进行分组,通常与聚合函数一起使用例如,查询各部门的平均工资GROUP BYSELECT department,AVGsalary ASavg_salary FROMemployees GROUP BY department;子句用于过滤分组后的结果,类似于,但用于之后例如,查找平均工资超过的部门HAVING WHEREGROUP BY8000SELECT department,AVGsalary ASavg_salary FROMemployees GROUPBY departmentHAVING avg_salary8000;视图()基础View视图定义创建语法视图是基于查询的虚拟表,SQL CREATE[OR REPLACE]它不存储实际数据,而是在查询VIEW view_name ASSELECT时动态生成结果视图可以隐藏columns FROMtables底层表的复杂性,简化查询,限[WHERE conditions];制对敏感数据的访问可以基于一个或多个表创建视图,支持几乎所有语句,包SELECT括、、JOIN WHEREGROUP等BY使用场景常用于隐藏表结构复杂性、提供数据访问安全层、简化复杂查询、合并多表数据展示,以及保持向后兼容性操作视图修改视图删除视图视图更新限制可以使用或使用语句可以删除不再需要在特定条件下,视图是可更新的,允许通ALTER VIEWCREATE ORDROP VIEW修改现有视图的定义的视图过视图执行、和REPLACE VIEWINSERT UPDATE操作但包含聚合函数、DELETE、、、ALTER VIEWcustomer_orders ASDROP VIEW[IF EXISTS]view_name;DISTINCT GROUPBY HAVING等的视图通常不可更新SELECTc.name,COUNTo.id ASUNIONorder_count使用可以防止通WITH CHECKOPTIONFROM customersc删除视图不会影响底层表数据,但会使依过视图进行不符合视图定义条件的更新LEFT JOIN orders oON c.id=赖该视图的存储过程或其他视图可能失效o.customer_idGROUP BYc.id;修改视图不会影响底层表的数据,只会改变视图的查询逻辑索引基础知识性能提升加速查询和减少I/O索引类型主键、唯
一、普通和全文索引数据结构树、哈希表等实现B+索引是数据库中用于提高查询性能的数据结构,类似于书籍的目录它通过创建指向表数据的指针,使数据库系统能够快速定位满足条件的记录,而无需扫描整个表的存储引擎使用树作为主要索引结构,它优化了磁盘读取操作索引虽然能显著提高查询速度,但会增加数据写入开销和MySQL InnoDBB+存储空间,因此需要在查询性能和写入性能之间取得平衡创建与删除索引创建索引方法创建唯一索引删除索引CREATE INDEXCREATE UNIQUEDROP INDEX idx_nameidx_name ONINDEX idx_name ONON table_name;table_name column1,table_name column1,或在语句ALTER TABLEcolumn2,...;column2,...;中ALTER TABLE或在语句唯一索引确保索引列不包ALTER TABLEtable_name DROP中含重复值,常用于实现数ALTERTABLEINDEXidx_name;据唯一性约束table_name ADDINDEXidx_namecolumn1,column2,...;创建索引时应遵循一定命名规范,通常使用表名列名或列名格式,以便于idx__idx_识别索引用途对于组合索引,应将选择性最高的列放在前面,符合最左前缀原则在生产环境中更改索引前,应评估对系统性能的影响,并在低峰期执行操作索引的实际应用索引优化前索引优化后未使用索引的查询可能需要全表扫描,在大表上性能极差例如,在百万级用户表中按姓名查询可能需要扫描所有记录,耗时数秒甚至更长添加适当索引后,同样的查询可能只需要检查数百或数千条记录,响应时间降至毫秒级例如,在用户名列上添加索引后,查询性能可提升数十倍存储引擎MySQL特性InnoDB MyISAMMEMORY事务支持支持不支持不支持外键支持不支持不支持锁粒度行级锁表级锁表级锁崩溃恢复良好较差数据丢失适用场景事务处理,高读密集,低写临时表,缓存并发入自版本起,成为默认存储引擎,它提供事务支持、MySQL
5.5InnoDB ACID行级锁定和外键约束曾是旧版的默认引擎,特点是简单高MyISAM MySQL效,适合只读或读多写少的应用,但不支持事务和崩溃安全恢复外键与参照完整性外键定义连接两个表的关系约束级联操作自动处理关联数据变更数据完整性确保数据一致性和有效性--创建带外键的表CREATE TABLEorders id INT PRIMARYKEY,customer_idINT,order_date DATE,FOREIGN KEYcustomer_id REFERENCEScustomersidON DELETECASCADEON UPDATECASCADE;外键约束确保表之间的引用完整性通过、、等动作,可以控制当父表记录更新或删除时对子表的影响在大型应用中,外键可能会影响性能和扩展性,有些开发团队选择CASCADE SETNULL RESTRICT在应用层实现引用完整性检查查询优化基础执行计划分析识别慢查询使用检查查询路径EXPLAIN启用并分析慢查询日志索引优化添加合适索引,优化已有索引服务器配置重写SQL调整参数以提升性能MySQL优化查询结构和表连接查询优化是一个系统性工作,涉及多个层面首先应定位性能瓶颈,通常通过慢查询日志和性能监控工具识别耗时较长的查询然后使用分析执行计划,找出可优化点,如缺少索引或索引使用不当EXPLAIN分析查询Explain字段含义优化目标访问类型尽量避免全表扫描type ALL可能使用的索引确认有可用索引possible_keys实际使用的索引确保使用了最优索引key扫描行数估计尽量减少扫描行数rows附加信息避免Extra Using filesort,Using temporary是中强大的性能分析工具,使用方法简单在查询前加上关键EXPLAIN MySQLEXPLAIN字例如,张三EXPLAIN SELECT*FROMusersWHEREname=;解读输出表示通过主键或唯一索引访问,性能最佳;表示非唯EXPLAIN type=const ref一索引查找,也较好;表示范围查询;表示全索引扫描;表示全表扫描,range indexALL性能最差当看到或时,通常需要优化,因为这意味着UsingfilesortUsing temporary需要额外排序或创建临时表MySQL常见性能瓶颈慢查询分析启用慢查询日志,设置合理的慢查询阈值,然后使用slow_query_log=1long_query_time工具分析日志文件,识别最耗时的语句重点关注执行频率高且耗时长mysqldumpslow SQL的查询瓶颈IO磁盘通常是数据库性能瓶颈观察和等工具输出,检查磁盘使用率和等待时间IO iostatvmstat考虑使用存储,优化参数,减少物理,使用读写分离架构分担SSD innodb_buffer_pool_size IO负载内存限制内存不足导致频繁磁盘交换会严重影响性能调整(通常设为物理内存的buffer_pool_size),优化排序缓冲区大小,使用内存监控工具确保不会导致系统内存耗尽或50%-80%MySQL过度使用交换空间锁等待问题高并发环境下锁等待可能成为瓶颈使用和分SHOW PROCESSLISTperformance_schema析锁状况,检查长时间运行的事务,考虑拆分大事务,避免长时间持有锁,优化事务隔离级别数据库设计与性能良好的数据库设计对性能影响深远规范化()减少数据冗余和提高一致性,但可能增加连接操作;而适度的反规范化()可以提高读取性能,代Normalization Denormalization价是增加数据冗余和更新复杂性选择合适的平衡点取决于应用特性和读写比例当数据量增长到单台服务器难以承载时,分库分表成为必要策略水平拆分()按行分割数据到多个表或库中,每个分片结构相同但内容不同;垂直拆分则按列分割,将不Sharding同业务相关的列拆到不同表中实施分库分表需要考虑分片键选择、路由策略、事务一致性等多方面因素命名规范对维护至关重要,建议使用有意义的表名和字段名,采用一致的命名风格(如小写下划线),避免使用保留字合理使用注释()有助于提高代码可+MySQL COMMENT读性和维护性数据库维护与运维日常备份策略监控与告警定期全量备份(每日或每周)资源使用监控(内存磁盘)••CPU//增量备份捕获变更(每小时)连接数与线程状态监控••二进制日志持续记录(实时)慢查询与错误日志分析••定期测试恢复流程关键业务指标监控••异地备份防灾难性事件设置阈值自动告警••性能优化任务表分析与优化•ANALYZE/OPTIMIZE定期清理临时数据•历史数据归档•索引维护与重建•配置参数定期评估与调整•用户与权限管理创建用户CREATE USERusername@host IDENTIFIEDBYpassword;授予权限可以是具体、域名、通配符或(表示任何主机)host IP%GRANT privilegesON database.table TOusername@host;可以是、、等,也可以组合使用privileges ALLSELECT INSERT查看权限SHOW GRANTSFOR username@host;显示用户当前拥有的所有权限收回权限REVOKE privilegesON database.table FROMusername@host;删除用户移除之前授予的特定权限DROP USERusername@host;完全移除用户及其所有权限数据备份方法逻辑备份物理备份逻辑备份生成包含重建数据库所需语句的文本文件最常用的工具物理备份直接复制数据库文件,保留原始格式提供的工具包括SQL MySQL是,它可以导出整个数据库或选定表的结构和数据(商业版)和开源工具mysqldump mysqlbackupPercona XtraBackup#备份单个数据库#使用XtraBackup进行完整备份mysqldump-u username-p database_namebackup.sql xtrabackup--backup--target-dir=/backup/full#备份多个数据库#创建增量备份mysqldump-u username-p--databases db1db2xtrabackup--backup--target-dir=/backup/inc1backup.sql--incremental-basedir=/backup/full#备份所有数据库mysqldump-u username-p--all-databasesbackup.sql物理备份的优点是速度快、恢复迅速;缺点是可能版本依赖、难以读取和部分恢复对于大型数据库,通常首选物理备份,搭配二进制日志实逻辑备份的优点是可读性好、便于部分恢复、跨版本兼容;缺点是对大现时间点恢复数据库速度较慢、恢复时间长数据恢复操作逻辑备份恢复使用客户端恢复生成的文件mysql mysqldumpSQL命令mysql-u root-p database_namebackup.sql物理备份恢复使用准备并复制备份文件到数据目录XtraBackup命令xtrabackup--prepare--target-dir=/backup/full然后重启服务器MySQL时间点恢复先恢复完整备份,然后应用二进制日志到指定时间点命令mysqlbinlog--stop-datetime=2023-06-1514:30:00binlog.000123|mysql-u root-p单表恢复从逻辑备份中提取单表结构和数据可使用等工具从备份文件中提取特定表的和语句sed CREATETABLE INSERT安全管理MySQL数据库安全应采取多层防护策略网络层面,使用防火墙限制服务器访问,只允许必要的连接端口;配置加密传输,防止数据在传输过程中被窃听认证MySQL IP3306SSL/TLS方面,实施强密码策略,定期轮换密码,考虑使用插件实现更强的认证机制防止注入是应用安全的关键始终使用参数化查询或预处理语句,而非直接拼接;严格验证和过滤用户输入;遵循最小权限原则,应用程序用户只分配必要的数据库权限SQL SQL对敏感数据实施加密存储,可使用函数或透明数据加密功能AES_ENCRYPT TDE审计功能帮助跟踪数据库操作启用通用查询日志记录所有语句(开发环境);使用企业版审计插件或开源替代方案如,记录关键操作如登录尝试、MySQL MariaDBAudit Plugin权限变更、数据修改等定期审查日志发现异常行为,建立自动分析机制提高效率常见故障排查错误日志分析死锁问题分析性能突降排查错误日志记录服务器启动、运行和死锁发生在两个或多个事务互相等待对方系统突然变慢通常有明确原因检查系统MySQL关闭过程中的重要信息定位错误日志位释放锁的情况使用负载、和内存使用;查看当前正在执SHOW ENGINECPU置查看最近死锁信息分行的查询和等待状态;分析慢查询日志识SHOW VARIABLESLIKE INNODBSTATUS解读常见错误码,如析事务逻辑,调整访问资源顺序保持一致,别问题;检查新增的查询或配置变更;log_error1064SQL(语法错误)、(访问被拒减少事务范围,调整索引设计,考虑降低监控连接数和表锁情况SQL1045绝)、(违反唯一约束)等隔离级别1062实战案例一企业级数据表设计实战案例二高性能查询优化问题查询优化方案在表的列和列上添加组合索引•orders statuscreated_atSELECT o.order_id,o.created_at,在表的列上添加索引•order_items order_idc.name ascustomer_name,优化顺序,确保先处理主表和过滤条件SUMi.price*i.quantity astotal_amount•JOINFROM orderso针对分页场景,使用延迟连接技术优化深度分页•JOIN customersc ON o.customer_id=c.id优化后查询时间降至毫秒以内,提升了倍以上此外,可考虑部5060JOINorder_items iONo.order_id=i.order_id分结果缓存,进一步提高频繁访问场景的性能WHERE o.status=completedAND o.created_at2023-01-01GROUPBYo.order_idORDER BYo.created_at DESCLIMIT20OFFSET180;上述查询在百万级数据量下执行缓慢,显示使用了全表扫描,EXPLAIN处理时间超过秒3实战案例三备份与恢复流程制定备份策略根据数据库规模和业务要求,确定合适的备份计划对于本案例中的中型企业数据库(约),我们采用每日全量备份二进制日志持续备份的策略,50GB+确保(恢复点目标)不超过分钟RPO5实施自动化备份使用脚本配合实现自动化备份脚本内容包括备份前检查、shell crontab执行或、压缩备份文件、清理旧备份、发送完mysqldump XtraBackup成通知等步骤备份文件存储在专用设备,并同步至异地存储NAS模拟灾难恢复进行灾难恢复演练,模拟两种场景)单表意外删除;)整个数12据库服务器崩溃测量恢复时间、验证数据完整性,确保(恢复RTO时间目标)在可接受范围内针对性能瓶颈进行流程优化,确保恢复过程能够在业务可接受的时间窗口内完成课程总结与学习建议50+5核心知识点实战案例本课程覆盖内容应用场景练习3进阶学习路径持续提升方向通过本课程,我们系统学习了数据库的基础知识和实用技能,从安装配置到日常操作,再MySQL到高级特性和优化技巧掌握这些内容将使您能够胜任大多数数据库开发和管理工作建议在实际项目中不断应用和巩固所学知识进阶学习方向包括深入学习性能调优和架构设计;研究数据库高可用性和集群技术;探MySQL索数据库安全最佳实践;学习数据库作为补充持续关注官方文档和社区动态,了NoSQL MySQL解新版本特性和最佳实践参与开源项目或论坛讨论,与他人分享和交流经验,能够更快提升技能水平。
个人认证
优秀文档
获得点赞 0