mysql数据库

MySQL 连接的使用:语法及案例剖析、INNER JOIN、LEFT JOIN、RIGHT JOIN

纵饮孤独 提交于 2020-03-02 10:29:21
MySQL 连接的使用 在前几章节中,我们已经学会了如何在一张表中读取数据,这是相对简单的,但是在真正的应用中经常需要从多个数据表中读取数据。 本章节我们将向大家介绍如何使用 MySQL 的 JOIN 在两个或多个表中查询数据。 你可以在 SELECT, UPDATE 和 DELETE 语句中使用 Mysql 的 JOIN 来联合多表查询。 JOIN 按照功能大致分为如下三类: INNER JOIN(内连接,或等值连接) :获取两个表中字段匹配关系的记录。 LEFT JOIN(左连接): 获取左表所有记录,即使右表没有对应匹配的记录。 RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。 在命令提示符中使用 INNER JOIN 我们在RUNOOB数据库中有两张表 tcount_tbl 和 runoob_tbl。两张数据表数据如下: 实例 尝试以下实例: 测试实例数据 mysql > use RUNOOB ; Database changed mysql > SELECT * FROM tcount_tbl ; +---------------+--------------+ | runoob_author | runoob_count | +---------------+--------------+ | 菜鸟教程

Mysql锁的优化

不想你离开。 提交于 2020-03-02 10:05:36
获取锁等待情况 可以通过检查table_locks_waited和table_locks_immediate状态变量来分析系统上的表锁定争夺: mysql> show status like 'Table%'; +----------------------------+----------+ | Variable_name | Value | +----------------------------+----------+ | Table_locks_immediate | 105 | | Table_locks_waited | 3 | +----------------------------+----------+ 2 rows in set (0.00 sec) 可以通过检查Innodb_row_lock状态变量来分析系统上的行锁的争夺情况: mysql> show status like 'innodb_row_lock%'; +----------------------------------------+----------+ | Variable_name | Value | +----------------------------------------+----------+ | Innodb_row_lock_current_waits | 0 | |

Grafana+Prometheus监控mysql性能

↘锁芯ラ 提交于 2020-03-02 08:51:47
摘自: https://www.cnblogs.com/congyiwei/p/12392057.html 1 #cmd /usr/local    今天讲一下如何监控服务器中的mysql数据库的性能 一、数据库操作 1.mysql启动 1 2 3 #service mysqld start #启动数据库 #service mysqld stop #关闭数据库 #service mysqld restart #重启数据库 2、进入 mysql 1 mysql -u root -p 3、新增监控 mysql 账号 1 2 #use mysql #GRANT ALL PRIVILEGES ON *.* TO '帐号' @ 'localhost' identified by '密码' ;<br>#flush privileges; #刷新 二、Prometheus 搭建 这里会给大家提供一个干净的普罗米修斯数据库的压缩包,大家解压就好 将压缩包放到服务器中 #cmd /usr/local 解压 1 #tar -zxvf prometheus-xxxxx 现在修改一下普罗米修斯的配置文件,在他的安装目录中有一个prometheus.yml文件,添加 - job_name: 'linux' static_configs: - targets: ['localhost:9100']  -

MySQL引擎

你离开我真会死。 提交于 2020-03-02 08:18:06
MySQL提供多种存储引擎,通过命令 show engines; 查看 查看当前默认的存储引擎 show variables like '%storage_engine%'; 查看某个表用了什么引擎 show create table 表名; MyISAM引擎: 没有提供对数据库事务的支持,也不支持行级锁和外键,因此当INSERT或UPDATE数据时即写操作需要锁定整个表。存储了表的行数,SELECT COUNT(*) FROM TABLE时,只需要直接读取已经保存好的值而不需要进行全表扫描,如果表的读操作远远多于写操作且不需要事务支持,那么MyISAM是个好选择。 InnoDB引擎: InnoDB是MySQL默认的引擎,提供对ACID事务的支持,并且实现SQL标准的四种隔离级别,提供行级锁和外键约束,它的设计目的是处理大容量数据库系统,在运行时,Innodb会在内存建立缓冲池,用于缓冲数据和索引。没有保存表的行数,当SELECT COUNT(*) FROM TABLE时,需要扫描全表。使用行级锁不是一定的,如果一个SQL语句不能确定要扫描的范围,InnoDB表同样会锁全表。 MyISAM引擎索引实现 B+树作为索引结构,叶节点的data域存放的是数据记录的地址。 主键索引原理图: 辅助索引: InnoDB引擎索引实现 同样使用B+树作为索引结构。MyISAM索引文件和数据是分离的

php中安全模式safe_mode配置教程及详解

喜你入骨 提交于 2020-03-02 07:26:50
(1) 打开php的安全模式   php的安全模式是个非常重要的内嵌的安全机制,能够控制一些php中的函数,比如system(),   同时把很多文件操作函数进行了权限控制,也不允许对某些关键文件的文件,比如/etc/passwd,   但是默认的php.ini是没有打开安全模式的,我们把它打开:   safe_mode = on (2) 用户组安全   当safe_mode打开时,safe_mode_gid被关闭,那么php脚本能够对文件进行访问,而且相同   组的用户也能够对文件进行访问。   建议设置为:   safe_mode_gid = off   如果不进行设置,可能我们无法对我们服务器网站目录下的文件进行操作了,比如我们需要   对文件进行操作的时候。 (3) 安全模式下执行程序主目录   如果安全模式打开了,但是却是要执行某些程序的时候,可以指定要执行程序的主目录:   safe_mode_exec_dir = D:/usr/bin   一般情况下是不需要执行什么程序的,所以推荐不要执行系统程序目录,可以指向一个目录,   然后把需要执行的程序拷贝过去,比如:   safe_mode_exec_dir = D:/tool/exe   但是,我更推荐不要执行任何程序,那么就可以指向我们网页目录:   safe_mode_exec_dir = D:/usr/www (4

[图解MySQL]MySQL组提交(group commit)

三世轮回 提交于 2020-03-02 07:15:34
前提: 以下讨论的前提 是设置MySQL的crash safe相关参数为双1: sync_binlog=1 innodb_flush_log_at_trx_commit=1 背景说明: WAL机制 (Write Ahead Log)定义: WAL指的是对数据文件进行修改前,必须将修改先记录日志。MySQL为了保证ACID中的一致性和持久性,使用了WAL。 Redo log的作用: Redo log就是一种WAL的应用。当数据库忽然掉电,再重新启动时,MySQL可以通过Redo log还原数据。也就是说,每次事务提交时,不用同步刷新磁盘数据文件,只需要同步刷新Redo log就足够了。相比写数据文件时的随机IO,写Redo log时的顺序IO能够提高事务提交速度。 组提交的作用: 在没有开启binlog时 Redo log的刷盘操作将会是最终影响MySQL TPS的瓶颈所在。为了缓解这一问题,MySQL使用了组提交,将多个刷盘操作合并成一个,如果说10个事务依次排队刷盘的时间成本是10,那么将这10个事务一次性一起刷盘的时间成本则近似于1。 当开启binlog时 为了保证Redo log和binlog的数据一致性,MySQL使用了二阶段提交,由binlog作为事务的协调者。而 引入二阶段提交 使得binlog又成为了性能瓶颈,先前的Redo log 组提交 也成了摆设

MYSQL维护常用命令

拥有回忆 提交于 2020-03-02 04:49:19
show processlist; 所有用户的当前连接(root可以查看全部) show status; show status like '% 下面变量 %'; Aborted_clients 由于客户没有正确关闭连接已经死掉,已经放弃的连接数量。 Aborted_connects 尝试已经失败的MySQL服务器的连接的次数。 Connections 试图连接MySQL服务器的次数。 Created_tmp_tables 当执行语句时,已经被创造了的隐含临时表的数量。 Delayed_insert_threads 正在使用的延迟插入处理器线程的数量。 Delayed_writes 用INSERT DELAYED写入的行数。 Delayed_errors 用INSERT DELAYED写入的发生某些错误(可能重复键值)的行数。 Flush_commands 执行FLUSH命令的次数。 Handler_delete 请求从一张表中删除行的次数。 Handler_read_first 请求读入表中第一行的次数。 Handler_read_key 请求数字基于键读行。 Handler_read_next 请求读入基于一个键的一行的次数。 Handler_read_rnd 请求读入基于一个固定位置的一行的次数。 Handler_update 请求更新表中一行的次数。 Handler

修改mysql最大连接数量

邮差的信 提交于 2020-03-02 04:25:01
问题 在使用MySQL数据库的时候,经常会遇到这么一个问题,就是“ Can not connect to MySQL server. Too many connections ”-mysql 1040错误,这是因为访问MySQL且还未释放的连接数目已经达到MySQL的上限。通常,mysql的最大连接数默认是100, 最大可以达到16384。 常用的有两种方式修改最大连接数。 解决方式一:通过命令 可以通过 set GLOBAL max_connections=100; 命令将最大连接数设置为100,此方法是即时生效的,不需要重启mysql服务。如下图所示: 需注意的是 ,要通过root权限的mysql帐号才能操作,否则会报 “1227 - Access denied; you need (at least one of) the SUPER privilege(s) for this operation” 的错误。 同时,从上图也可以看出,设置max_connections最小值为1。 设置完成后,我再通过另一个终端连接时,就报出了如下的错误提示: 1040-Too many connections 。 解决方式二:修改my.cnf 打开mysql的配置文件 vim /etc/my.cnf ,加入 max_connections=100一行 (如果有,直接修改值即可),然后重启服务

DBCP连接池操作mysql数据库

自作多情 提交于 2020-03-02 03:35:28
1 导入jar包:commons-dbcp-1.4.jar, commons-pool-1.5.6.jar,mysql-connector-java-5.1.37-bin.jar 2 导入配置文件:dbcpconfig.properties 3 编写工具类DBCPUtils public class DBCPUtils { private static DataSource ds; static{ try { Properties ps = new Properties(); ps.load(new FileInputStream("dbcpconfig.properties")); ds = BasicDataSourceFactory.createDataSource(ps); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static Connection getConnection() { try { return ds.getConnection(); } catch (SQLException e) { // TODO Auto-generated catch block throw new RuntimeException(); }

Mysql 访问远程数据库,报错:1130-host ... is not allowed to connect to this MySql server 开放mysql远程连接 不使用localhost

我是研究僧i 提交于 2020-03-02 03:09:14
参考: http://www.cnblogs.com/xyzdw/archive/2011/08/11/2135227.html 解决方法: 1。 改表法。 可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%" mysql -u root -pvmwaremysql>use mysql; mysql>update user set host = '%' where user = 'root'; mysql>select host, user from user; 授权法。 例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话。 我使用的是这个语句,因为IP不固定,再就是自己测试这自己玩呢。 GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION; FLUSH PRIVILEGES; 如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器,并使用mypassword作为密码 GRANT ALL PRIVILEGES ON *.*