数据库mysql各种工作原理luowendy

关系型数据库是依据关系模型(就是“一对一、一对多、多对多”等关系模型,关系模型就是指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。)来创建的数据库。例如:Oracle、DB2、PostgreSQL、MicrosoftSQLServer、MicrosoftAccess、MySQL。

非关系型数据库主要是基于“非关系模型”(列模型:Hbase;键值对模型:redis,MemcacheDB;

文档类模型:mongoDB)的数据库(由于关系型太大,所以一般用“非关系型”来表示其他类型的数据库)

关系型数据库与非关系型数据比较:

查询速度:nosql数据库优于关系型数据库。nosql数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库。

安全:关系型数据库优于nosql数据库。因为关系型数据库存储在磁盘中,不会说突然断电数据就没有了。断电丢失数据,但其中redis可以同步数据到磁盘中,现在很多非关系型数据库都开始支持转存到磁盘中。

存储数据的格式:关系型数据库优于nosql数据库。nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型(varchar等)。

Mysql端口号3306,主要用于大型门户(中小型公司也在使用),例如搜狗、新浪等,它主要的优势就是开放源代码,因为开放源代码这个数据库是免费的,它现在是甲骨文公司的产品。

Oracle端口号1521,主要用于银行、铁路、飞机场等。该数据库功能强大,软件费用高。也是甲骨文公司的产品。

sqlserver端口号1433,是微软公司的产品,主要应用于大中型企业,如联想、方正等。

所谓安装数据库服务器,只是在机器上装了一个数据库管理程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体的数据。

存储引擎(engines):存储引擎就是指表的类型。数据库的存储引擎决定了表在计算机中的存储方式。

mysql支持的存储引擎包括:MyISAM、InnoDB、MEMORY、ARCHIVE、MRG_MYISAM等。其中,InnoDB为默认存储引擎。最常使用的两种存储引擎是MyISAM和InnoDB(5.5以上默认Engine是Innodb,其他版本默认是MyISAM)。

1)数据定义语言(DDL)

用于创建、修改、和删除数据库内的数据结构,如:1:创建和删除数据库(CREATEDATABASE||DROPDATABASE);2:创建、修改、重命名、删除表(CREATETABLE||ALTERTABLE||RENAMETABLE||DROPTABLE||TRUNCATETABLE);3:创建和删除索引(CREATEINDEX||DROPINDEX)

2)数据查询语言(DQL)

从数据库中的一个或多个表中查询数据(SELECT)

3)数据操作语言(DML)

修改数据库中的数据,包括插入(INSERT)、更新(UPDATE)和删除(DELETE)

4)数据控制语言(DCL)

用于对数据库的访问,如:1:给用户授予访问权限(GRANT);2:取消用户访问权限(REMOKE)

问:什么时候使用DROP什么时候使用DELETE什么时候用TRUNCATE?

答:由上可看出,对于结构删除,如数据库删除、表删除、索引删除等当使用DROP;而对于数据的删除则是DELETE,DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作;TRUNCATETABLE则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。

从表和索引所占空间来看,当表被TRUNCATE后,这个表和索引所占用的空间会恢复到初始大小,DELETE操作不会减少表或索引所占用的空间。drop语句将表所占用的空间全释放掉。

a)方法一:

①停止mysql服务

③updateusersetpassword=password('新密码')wherehost='主地址'anduser='用户名';

④flushprivileges;//刷新权限

⑤重启登陆mysql服务

b)方法二:

③setpasswordfor用户名@'主机地址'=password('新密码');//注这种方法无需刷新权限

④重启并登陆mysql服务

a)备份的概念:为应付文件、数据丢失或损坏等可能出现的意外情况,将电子计算机存储设备中的数据复制到磁带等大容量存储设备中,从而在原文中独立出来单独贮存的程序或文件副本;如果系统的硬件或存储媒体发生故障,“备份”工具可以帮助您保护数据免受意外的损失。

b)一般的备份可分为:1、系统备份:指的是用户操作系统因磁盘损伤或损坏,计算机病毒或人为误删除等原因造成的系统文件丢失,从而造成计算机操作系统不能正常引导,因此使用系统备份,将操作系统事先贮存起来,用于故障后的后备支援。2、数据备份:指的是用户将数据包括文件,数据库,应用程序等贮存起来,用于数据恢复时使用。

c)备份更专业地可分为:

ii.增量备份:增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加和者被修改的文件

d)对mysql数据库而言,就是数据备份,可分为全量备份与增量备份

e)备份工具有:mysqldump、xtrabackup、mydumper

(1)、备份计划;

这里每个公司都不一样,您别说那种1小时1全备什么的就行

这里跟机器,尤其是硬盘的速率有关系,以下列举几个仅供参考

20G的2分钟(mysqldump)

80G的30分钟(mysqldump)

111G的30分钟(mysqldump)

288G的3小时(xtra)

3T的4小时(xtra)

Xtrabackup是由percona提供的mysql数据库备份工具,有两个主要的工具:xtrabackup、innobackupex,备份过程快速、可靠,备份过程不会打断正在执行的事务,能够基于压缩等功能节约磁盘空间和流量,自动实现备份检验,还原速度快,备份可在线备份,但是恢复要关闭服务器,恢复后再启动.

在InnoDB内部会维护一个redo日志文件,我们也可以叫做事务日志文件。事务日志会存储每一个InnoDB表数据的记录修改。当InnoDB启动时,InnoDB会检查数据文件和事务日志,并执行两个步骤:它应用(前滚)已经提交的事务日志到数据文件,并将修改过但没有提交的数据进行回滚操作。

mysqldump的本质是通过select*fromtab来获取表的数据的。mysqldump只适合放到业务低峰期做,如果备份的过程中数据操作很频繁,会造成Undo表空间越来越大,undo表空间默认是放到共享表空间中的,而ibdata的特性是一旦增大,就不会收缩。

mydumper是一个使用C语言编写的多线程导出导入工具,并且能够保证多个表之间的一致性

错误日志:记录启动、运行或停止mysqld时出现的问题。参数:log-error。

二进制日志:该日志文件会以二进制形式记录数据库的各种操作,但是不记录查询语句。参数:log-bin。

健壮性:主服务器出现故障时,可以切到从服务器作为备份

备份:避免影响业务

从库生成两个线程,一个I/O线程,一个SQL线程;

i/o线程去请求主库的binlog,并将得到的binlog日志写到relaylog(中继日志)文件中;

主库会生成一个logdump线程,用来给从库i/o线程传binlog;

SQL线程,会读取relaylog文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;

(1):基于语句的复制:在主服务器上执行的SQL语句(写入binlog中),在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。binlog_format='STATEMENT'

(2):基于行的复制:把改变的内容(写入binlog中)复制过去,而不是把命令在从服务器上执行一遍.从mysql5.0开始支持。binlog_format='ROW'

(3):混合类型的复制:默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。binlog_format='MIXED'

在数据库集群架构中,让主库负责处理事务性查询,而从库只负责处理select查询,让两者分工明确达到提高数据库整体读写性能。当然,主数据库另外一个功能就是负责将事务性查询导致的数据变更同步到从库中,也就是写操作。

读写分离优点:

1)分摊服务器压力,提高机器的系统处理效率

读写分离适用于读多于写的场景,如果有一台服务器,当select很多时,update和delete会被这些select访问中的数据堵塞,等待select结束,并发性能并不高,而主从只负责各自的写和读,极大程度的缓解X锁和S锁争用;

假如我们有1主3从,不考虑上述1中提到的从库单方面设置,假设现在1分钟内有10条写入,150条读取。那么,1主3从相当于共计40条写入,而读取总数没变,因此平均下来每台服务器承担了10条写入和50条读取(主库不承担读取操作)。因此,虽然写入没变,但是读取大大分摊了,提高了系统性能。另外,当读取被分摊后,又间接提高了写入的性能。所以,总体性能提高了,说白了就是拿机器和带宽换性能;

2)增加冗余数据库服务器宕机后可以调整另外一台从库以最快速度恢复服务,提高服务可用性。

根据数据的特点,将不同特性的数据纪录存放到不同的数据库服务器中就是数据切分,可以设置规则匹配数据特性以实现数据切分,其实,数据切分就是根据设置规则将数据分别存放到不同的数据库,以减轻数据库服务器的压力和减小单个数据库的大小,可通过设置amoeba的rule.xml文件中的切片规则实现。原理如图:

水平分割:将关键字段按特定的算法存放到不同的服务器

垂直分割:将数据按业务的不同分别保存到不同的服务器

数据库扩展读写分离软件还有:mycat,mysql-proxy,maxscale

THE END
1.MySQL中文网Mysql官网联系MySQL|登录|注册 MySQL HeatWave MySQL数据库服务是一个完全托管的数据库服务,可使用世界上最受欢迎的开源数据库来部署云原生应用程序。 它是百分百由MySQL原厂开发,管理和提供支持。 了解更多信息 ? MySQL 企业版 全面的高级功能、管理工具和技术支持,可实现高水平的 MySQL 可扩展性、安全性、可靠性和无故障http://mysql.p2hp.com/index.html
2.Mysql知识详解(内容非常丰富)mysql常用的引擎Read Uncommitted(读取未提交内容——脏读):在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。 Read Committed(读取提交内容):这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满https://blog.csdn.net/a342874650/article/details/134985437
3.MySQL::MySQLDocumentationAccelerate query performance with HeatWave MySQL Query data in object storage and MySQL with HeatWave Lakehouse Automate the machine learning pipeline with HeatWave AutoML MySQL 8.4Reference ManualMySQL 8.4Release Notes MySQL Server & MySQL Cluster https://dev.mysql.com/doc/
4.MySQL是什么?架构是怎么样的?这次我们要加的中间层是 mysql。 mysql是数据和应用的中间层 什么是 mysql Mysql数据库,是一款存放和管理数据的软件, 它介于应用和数据之间,通过一些设计,将大量数据,变成一张张像 excel 的数据表。为应用提供创建(Create), 读取(Read), 更新(Update), 删除(Delete)等核心操作。 https://www.51cto.com/article/803939.html
5.了解数据库技术:SQLite与MySQL的比较让我们比较一下两个最流行的开源管理系统–MySQL与SQLite–详细说明它们是如何工作的,它们的根本区别,优点和缺点,最后,对于WordPress托管的网络应用来说,哪个更合适。 使用开源数据库的好处 什么是SQLite? 什么是MySQL? 用例分析 两者优点和缺点 哪个更适合WordPress? https://www.wbolt.com/sqlite-vs-mysql.html
6.MYSQL简介MYSQL数据库MYSQL品牌简介,十大品牌网为你介绍甲骨文(中国)软件系统有限公司旗下MYSQL品牌信息,包括品牌介绍、联系方式、主营产品、最新评论、点赞数量等,告诉你MYSQL数据库怎么样,致力于帮助你了解MYSQL真实有效的品牌相关信息。https://www.cnpp.cn/pinpai/4117067.html
7.PHP创建MySQL数据库数据库存有一个或多个表。创建数据库 CREATE DATABASE 语句用于在 MySQL 中创建数据库。 语法 CREATE DATABASE database_name 为了让 PHP 执行上面的语句,我们必须使用 mysql_query() 函数。此函数用于向 MySQL 连接发送查询或命令。 例子 在下面的例子中,我们创建了一个名为 "my_db" 的数据库: <?php $https://www.w3school.com.cn/php/php_mysql_create.asp
8.MySQL创建数据库及简单增删改查使用普通用户登陆 MySQL 服务器,你可能需要特定的权限来创建或者删除 MySQL 数据库,所以我们这边使用 root 用户登录,root 用户拥有最高权限。 在删除数据库过程中,务必要十分谨慎,因为在执行删除命令后,所有数据将会消失。 drop 命令删除数据库 drop 命令格式: https://www.jianshu.com/p/db57844594a1
9.MySQL创建数据库和创建数据表的操作过程Mysql使用create database 数据库名 character set utf8; 创建数据库并设置数据库的字符编码。 1 create database MyDB_two character set utf8; 直接创建的数据库,数据库的编码方式是 MySQL 默认的编码方式 latin1 (单字节编码) ,通常我们会在数据库中存放中文数据,所以最好把数据库的编码方式设置成 utf-8 ,这样https://www.jb51.net/article/266960.htm
10.AzureDatabaseforMySQL了解MySQL 数据库,它是一款面向应用开发人员的完全托管数据库服务。Azure 是一个可满足你所有数据库需求的托管服务提供商。https://azure.microsoft.com/zh-cn/services/mysql/
11.MySQL的安装和配置(超详细图文教程)「建议收藏」4.选择mysql数据库的大致用途,“Multifunctional Database(通用多功能型,好)”、“Transactional Database Only(服务器类型,专注于事务处理,一般)”、“Non-Transactional Database Only(非事务处理型,较简单,主要做一些监控、记数用,对MyISAM数据类型的支持仅限于non-transactional),按“Next”继续。 https://cloud.tencent.com/developer/article/2065168
12.mysqli类PHP:mysqlimysqli::$insert_id— 返回上次查询为 AUTO_INCREMENT 列生成的值 mysqli::kill— 让服务器杀死一个 MySQL 线程 mysqli::more_results— 检查批量查询中是否还有查询结果 mysqli::multi_query— 在数据库上执行一个或多个查询 mysqli::next_result— 为读取 multi_query 执行之后的下一个结果集做准备 https://www.php.net/manual/zh/class.mysqli.php
13.navicat修改版下载中文版navicatformysql下载Navicat Premium是一个可多重连接的数据库管理工具,它可让你以单一程序同时连接;Navicat for MySQL是一套专为 MySQL 设计的高性能数据库管理及开发工具。绿色资源网提供navicat for mysql修改版、navicat premium注册码、navicat premium mac版等,希望对大家有帮助! 其他数据库软件推荐:access、sql server、mysql、http://www.downcc.com/k/navicat/
14.MySQL中文文档MySQL中文网MySQL 5.1中文文档 第1章:一般信息 第2章:安装MySQL 第3章:教程 第4章:MySQL程序概述 第5章:数据库管理 第6章:MySQL中的复制 第7章:优化 第8章:客户端和实用工具程序 第9章:语言结构 第10章:字符集支持 第11章: 列类型 第12章: 函数和操作符 https://www.mysqlzh.com/