mysql数据库

当程序执行一条查询语句时,MySQL内部到底发生了什么? (说一下 MySQL 执行一条查询语句的内部执行过程?

非 Y 不嫁゛ 提交于 2020-03-26 09:42:09
先来个最基本的总结阐述,希望各位小伙伴认真的读一下,哈哈: 1)客户端(运行程序)先通过 连接器 连接到MySql服务器。 2)连接器通过数据库权限身份验证后,会先查询数据库缓存是否存在(之前执行过相同条件的SQL查询),如果有会直接返回缓存中的数据。如果没有则会进入分析器。 3)进入 分析器 后会对查询语句进行词法语法的分析,判断该查询语句SQL是否存在语法错误,如果存在查询语法词法错误,会直接返回给客户端错误,如果正确则会进入优化器。 4) 优化器 会对查询语句进行优化处理:例如:如果一条语句用到了多个索引会判断哪个索引性能更好。 5)最终会进入 执行器 ,开始执行查询语句直到查询出满足条件的所有数据,然后进行返回。 下面我们详细的来说一 下: 假如说我们有一张 User 表 ,表里只有一个字段 ID ,当我们执行下边这条SQL语句时: mysql> select * fron T where ID = 10; 在我们眼中能看到的只是输入一条 SQL语句,返回一条查询结果,却不曾知道这条SQL在MySQL的内部经历了什么,下面我们来一步一步的分析一下;如下是MySQL的基本架构图,从图中可以清楚的看到SQL在MySQL中各个功能模块执行的过程: 大体来说,MySQL可以分为 Server层 和 存储引擎 两部分。 Server层:包括连接器、分析器、查询缓存、优化器、执行器等。

SQLAlchemy基本操作和常用技巧

瘦欲@ 提交于 2020-03-26 07:41:30
点击打开链接 Python的ORM框架SQLAlchemy基本操作和常用技巧,包含大量实例,非常好的一个学习SQLAlchemy的教程,需要的朋友可以参考下 python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具,使用MIT许可证发行。 MySQL InnoDB 使用,所以使用其他 数据库 的也不能完全照搬本文。 mysql [python] view plain copy apt-get install mysql-server apt-get install mysql-client apt-get install libmysqlclient15-dev [python] view plain copy apt-get install python-mysqldb python ez_setup.py [python] view plain copy easy_install MySQL-Python [python] view plain copy easy_install SQLAlchemy 操作系统,遇到问题就 Google 一下吧。我是在 Mac OS X 上开发的,途中也遇到些问题,不过当时没记下来…… 值得一提的是我用了 MySQL-Python 来连 MySQL,因为不支持异步调用,所以和 Tornado 不是很搭

docker版的zabbix部署

旧时模样 提交于 2020-03-26 02:59:59
环境准备:一台server端,两台agent端 server端部署zabbix-server和mariadb服务 agent端部署zabbix-agent服务 一、docker容器里下载zabbix和mariadb docker pull mariadb docker pull zabbix [root@localhost cmp_mariadb]# docker pull mariadb Using default tag: latest latest: Pulling from library/mariadb 。。。 Digest: sha256:31cf9574e8e4043022e7f6260d77a08ab33bba1ab04a074ccaa077f3cf50b9e3 Status: Downloaded newer image for mariadb:latest 二、cd到/opt目录下,上传cmp_mariadb.zip 和 cmp_zabbix_server.zip压缩包,并分别解压 [root@localhost opt]# ls cmp_mariadb cmp_mariadb.zip cmp_zabbix_server cmp_zabbix_server.zip 三、进入cmp_mariadb的目录 [root@localhost cmp_mariadb]#

docker版的zabbix部署

倾然丶 夕夏残阳落幕 提交于 2020-03-26 02:58:44
   环境准备:一台server端,两台agent端 server端部署zabbix-server和mariadb服务 agent端部署zabbix-agent服务 一、docker容器里下载zabbix和mariadb docker pull mariadb docker pull zabbix [root@localhost cmp_mariadb]# docker pull mariadb Using default tag: latest latest: Pulling from library/mariadb 。。。 Digest: sha256:31cf9574e8e4043022e7f6260d77a08ab33bba1ab04a074ccaa077f3cf50b9e3 Status: Downloaded newer image for mariadb:latest 二、cd到/opt目录下,上传cmp_mariadb.zip 和 cmp_zabbix_server.zip压缩包,并分别解压 [root@localhost opt]# ls cmp_mariadb cmp_mariadb.zip cmp_zabbix_server cmp_zabbix_server.zip 三、进入cmp_mariadb的目录 [root@localhost cmp_mariadb

Docker版zabbix

时间秒杀一切 提交于 2020-03-26 02:57:50
1. docker-compose docker-compose :容器自带的编排工作,可以通过yaml编排文件,将容器要启动的命令写入文件,然后再利用docker-compose run file.yaml文件来直接启动,同时启动多个容器,方便应用服务的移植、共享。 2. 部署zabbix服务 部署zabbix服务,然后利用docker-compose启动。 1> 上传压缩包,解压 [root@node ~]# cd /opt/ [root@node opt]# ls rh zabbix-agent.tar.gz zabbix-server.tar.gz [root@node opt]# tar xf zabbix-server.tar.gz [root@node opt]# ls cmp_mariadb cmp_zabbix rh zabbix-agent.tar.gz zabbix-server.tar.gz 2> 启动数据库 [root@node cmp_mariadb]# docker load -i mariadb-latest.tar #导入镜像 [root@node cmp_mariadb]# docker images mariadb latest 901583bfdf5a 5 months ago 367MB 启用编排文件文件名必须为docker-compose

Cloud DB for MySQL High Availability Overview

我的未来我决定 提交于 2020-03-26 01:48:26
云数据库 MySQL(Cloud DB for MySQL)是让用户可以轻松在云端部署、使用 MySQL 数据库。通过云数据库 MySQL,你不但可以在几分钟内即可部署MySQL 数据库实例,而且可以弹性调整硬件容量的大小而无需停机。另外云数据库 MySQL 提供备份回档、监控、快速扩容、数据传输等数据库运维全套解决方案,简化了IT 运维工作。 对于承载核心业务的数据库,大家最关心的是它的高可用性。业界用 N 个9 来量化可用性,目前云数据库MySQL高可用版实例,可用性能够达到99.95%. 云数据库 MySQL高可用版实例采用一主一备或一主两备的高可用模式,也是基于数据复制模式,无共享存储,通过数据复制协议达到主机和备机数据一致性,并且提供宕机自动检测和故障自动转移,主备切换和故障迁移过程对用户透明,数据节点部署在强大硬件之上,底层存储使用本地 PCI-e SSD 硬盘,提供强大的 IO 性能。 Cloud for MySQL 也提供了异步、半同步、强同步三种复制方式。强同步复制方式能最大限度的保障主从数据的一致性。云数据库 MySQL 高可用版本的强同步复制采用一主两备的架构,仅需其中一台 Slave 成功执行即可返回,避免了单台 Slave 不可用影响 Master 上操作的问题,也提高了强同步复制集群的可用性。 另外,高可用版支持企业级的高可用特性,比如只读实例

【MySQL】1.MySQL安装配置

守給你的承諾、 提交于 2020-03-25 21:25:26
MySQL官网: https://www.mysql.com/ 一、MySQL的安装配置 下载需要安装的软件包: https://dev.mysql.com/downloads/mysql/ MySQL的安装包有已经编译成二进制文件的,RPM包或者源码,下载二进制文件版本的,直接使用就可以了。按需选择版本。 [root@node1 soft]# wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz [root@node1 soft]# tar xf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz [root@node1 soft]# mv mysql-5.7.28-linux-glibc2.12-x86_64 /usr/local/mysql [root@node1 ~]# yum install libaio -y #安装MySQL依赖libaio [root@node1 ~]# groupadd mysql [root@node1 ~]# useradd -r -g mysql -s /bin/false mysql [root@node1 ~]# cd /usr/local/mysql/ [root@node1

MySQL数据备份与恢复(二) -- xtrabackup工具

…衆ロ難τιáo~ 提交于 2020-03-25 20:32:18
上一篇介绍了逻辑备份工具mysqldump,本文将通过应用更为普遍的物理备份工具xtrabackup来演示数据备份及恢复的第二篇内容。 1. xtrabackup 工具的安装 1.1 安装依赖包 /* xtrabackup 的使用需要安装相关的依赖包 否则使用过程中会报相关错误 */ yum install -y rsync perl l perl-Digest-MD5 perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL 1.2 下载及安装 去percona官网下载对应版本的安装包 https://www.percona.com/downloads , 因为每个版本对应的数据库版本不同,因此需要根据数据库的版本选择对应的xtrabackup的安装包. 当前测试使用的数据库为MySQL5.7 因此下载2.4版本https: // www.percona.com/downloads/Percona-XtraBackup-2.4/LATEST/ 另外,2.4.10及以后版本中,对libgcrypt进行了区分,因此也需要查询自己服务器的libgcrypt版本,然后选择对应的安装包 查看libgcrypt方法: [root@testdb ~]# yum list installed|grep libgcrypt

mysql 连接池的正确写法

六眼飞鱼酱① 提交于 2020-03-25 20:10:01
const mytools = require("./mytools"); const mynet = require('net'); const mysql = require('mysql') // 使用 createPool 建立连接池 var mysqlpool = mysql.createPool({ host: '', user: '', password: '', database: '', port: '' }); // 保存客户端 var g_clients = []; //移除下线的客户端 function delete_client(temp_client_name) { g_clients = g_clients.filter(cn => { return cn != temp_client_name; }) } // 创建服务器 const server = new mynet.createServer(); server.on('connection', (client) => { //局部客户端变量 let client_name = client.remoteAddress + ":" + client.remotePort; g_clients.push(client_name); //设置超时时间为60秒(单位毫秒)因为设备间隔3s发送一次数据

MySQL保存 emoji 表情(微信昵称表情)

旧时模样 提交于 2020-03-25 15:44:21
问题分析 在微信开发过程中,总是会遇到 带有emoji表情昵称 的微信用户无法自动登录的问题。 后台代码抛出类似下面的异常信息。 java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for colum n 'name' at row 1 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620) at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java