㈠ 如何查看mysql执行的所有以往 sql 语句历史命令
如果你想知道mysql执行的所有以往 sql 语句历史命令,需要配置log
my.ini文件中
log=log路径 比如D:/MySQL/datalog.log
配置后重启mysql服务,然后就可以查看mysql执行的sql语句了,
如果你没开启日志的话,那就没办法
㈡ 如何记录MySQL执行过的SQL语句
第一种: 查 Slow query 的 SQL 语法:
log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 2 (超过 2秒的 SQL 语法记录起来, 设短一点来记录除错也是一种方法 XD)
第二种: 设 MySQL Replication 用 binlog:
log_bin = /var/log/mysql/mysql-bin.log (此档要用 mysqlbinlog 解来看)
mysql 会将所有 INSERT/UPDATE/DELETE 语法记于此(但是语法可能跟你想的不同), 这是要写给 SLAVE 用的 log 档
第三种: 推荐此方法, 将 MySQL 执行的每行指令全都记录起来:
log = /tmp/mysql.log
restart mysql 后, tail -f /tmp/mysql.log 就可以看到罗!
补充: 最早前的方法是 mysqlmp, 然后执行完后再 mysqlmp, 再 diff, 但是在 DB > 1G 后就放弃此方法了 XD
㈢ 如何查看mysql执行的所有以往 sql 语句历史命令
mysql 有这样一个机制,就是,在用户的主目录下会生成一个.mysql_history 的文件,这个文件会记录用户登录mysql后,在mysql中敲过的每条命令。
cat ~/.mysql_history 即可以看到以前的命令历史。
㈣ 如何查看mysql中执行sql语句
如果我的理解没错的话,你的意思是正在执行的sql语句吧,
命令:
mysql>show full processlist;
示例:
mysql>select sleep(20);
另一个session执行:
mysql>show full processlist;
--- 可以看到正在执行的语句 ---
| 183 | root | localhost | NULL | Query | 6 | User sleep | select sleep(20) |
㈤ 怎么打开/查看MySQL的SQL记录
要是想用命令行的话,下面给你一些命令(MySQL)
启动,关闭MySQL
在CMD中输入: net start mysql
在服务管理器中启动,关闭.
MySQL登录
在CMD中输入
mysql –h localhost –u root -p
查看数据库: show databases;
使用数据库: use db_name;
查看表: show tables;
查看表结构: describe table_name;
查看表: show tables;
要是不想用命令就在安装MYSQL的浏览器,直接在里面打开看就好了
㈥ 如何记录MySQL执行过的SQL语句
您好,很高兴为您解答。 开启记录MySQL执行过SQL语句的方法很简单:编辑/etc/my.cnf文件,在[mysqld]节下面添加:log=/var/lib/mysql/sql_row.log行(日志的路径自己根据需要定义)。 [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Default to using old password format for compatibility with mysql 3.x # clients (those using the mysqlclient10 compatibility package). old_passwords=1 log=/var/lib/mysql/sql_row.log # Disabling symbolic-links is recommended to prevent assorted security risks; # to do so, uncomment this line: # symbolic-links=0 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid 修改完毕后,记得重启 MySQL: service mysql restart # 或者 /etc/init.d/mysqld stop /etc/init.d/mysqld start 现在去 /var/lib/mysql/ 路径下的 sql_row.log 文件应该是能够看到 MySQL 什么时候执行了哪些程序了
㈦ 如何看mysql执行的sql语句
1先通过status命令查看Mysql运行状态
mysql> status;
--------------
mysql Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1
Connection id: 113752
Current database: information_schema
Current user: push_user@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.1.73 Source distribution
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: utf8
Client characterset: latin1
Conn. characterset: latin1
UNIX socket: /tmp/mysql.sock
Uptime: 22 days 8 hours 31 min 23 sec
Threads: 38 Questions: 1037751897 Slow queries: 2356 Opens: 79836
Flush tables: 1 Open tables: 64 Queries per second avg: 537.282
--------------
在上面显示列表的最后一条,我们来查看Slow queries这一项的值,如果多次查看的值大于0的话,说明有些查询sql命令执行时间过长。
2)这时再通过show processlist命令来查看当前正在运行的SQL,从中找出运行慢的SQL语句,找到执行慢的语句后,再用explain命令查看这些语句的执行计划。
mysql> show processlist;
+--------+-----------+---------------------+--------------------+---------+-------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+--------+-----------+---------------------+--------------------+---------+-------+-------+------------------+
| 50270 | ambari | DataBase-01:41512 | ambari | Sleep | 23 | | NULL |
| 50271 | ambari | DataBase-01:41511 | ambari | Sleep | 6 | | NULL |
| 50272 | ambari | DataBase-01:41514 | ambari | Sleep | 23 | | NULL |
| 62452 | oozie | DataBase-02:42987 | oozie | Sleep | 25 | | NULL |
| 63660 | ambari | DataBase-01:56052 | ambari | Sleep | 0 | | NULL |
| 110404 | push_user | localhost:33817 | quartz | Sleep | 12 | | NULL |
| 112835 | push_user | localhost:46571 | hibernate | Sleep | 1 | | NULL |
| 113163 | push_user | localhost:56585 | hibernate | Sleep | 1 | | NULL |
| 113289 | push_user | 14.118.132.20:47333 | DW | Sleep | 628 | | NULL |
| 113320 | push_user | localhost:47428 | hibernate | Sleep | 3 | | NULL |
| 113321 | push_user | localhost:47429 | hibernate | Sleep | 3 | | NULL |
| 113322 | push_user | localhost:47430 | hibernate | Sleep | 3 | | NULL |
| 113357 | push_user | localhost:52337 | hibernate | Sleep | 3 | | NULL |
| 113364 | push_user | localhost:57206 | hibernate | Sleep | 3 | | NULL |
| 113366 | push_user | localhost:34813 | hibernate | Sleep | 1 | | NULL |
| 113398 | push_user | localhost:37382 | hibernate | Sleep | 1 | | NULL |
| 113498 | push_user | localhost:47626 | quartz | Sleep | 12717 | | NULL |
| 113709 | push_user | localhost:59382 | hibernate | Sleep | 1 | | NULL |
| 113710 | push_user | localhost:33627 | hibernate | Sleep | 1 | | NULL |
| 113715 | hive | DataBase-02:54968 | hive | Sleep | 2390 | | NULL |
| 113716 | hive | DataBase-02:54969 | hive | Sleep | 2390 | | NULL |
| 113717 | hive | DataBase-02:54974 | hive | Sleep | 2336 | | NULL |
| 113718 | hive | DataBase-02:54975 | hive | Sleep | 2336 | | NULL |
| 113719 | push_user | localhost:48243 | hibernate | Sleep | 1 | | NULL |
| 113720 | push_user | localhost:48245 | hibernate | Sleep | 1 | | NULL |
| 113721 | push_user | localhost:48244 | hibernate | Sleep | 1 | | NULL |
| 113722 | push_user | localhost:48247 | hibernate | Sleep | 1 | | NULL |
| 113723 | push_user | localhost:48249 | hibernate | Sleep | 1 | | NULL |
| 113724 | push_user | localhost:48248 | hibernate | Sleep | 1 | | NULL |
| 113745 | push_user | localhost:50684 | hibernate | Sleep | 1 | | NULL |
| 113746 | push_user | localhost:50685 | hibernate | Sleep | 1 | | NULL |
| 113747 | push_user | localhost:50695 | hibernate | Sleep | 1 | | NULL |
| 113748 | push_user | localhost:50696 | hibernate | Sleep | 1 | | NULL |
| 113749 | push_user | localhost:50697 | hibernate | Sleep | 1 | | NULL |
| 113750 | push_user | localhost:50699 | hibernate | Sleep | 1 | | NULL |
| 113751 | push_user | localhost:50700 | hibernate | Sleep | 1 | | NULL |
| 113752 | push_user | localhost | information_schema | Query | 0 | NULL | show processlist |
| 113753 | push_user | 14.118.132.20:28688 | DW | Sleep | 396 | | NULL |
+--------+-----------+---------------------+--------------------+---------+-------+-------+------------------+
38 rows in set (0.00 sec)
或者通过如下命令查询:
mysql> use information_schema;
mysql> select * from PROCESSLIST where info is not null;
+--------+-----------+-----------+--------------------+---------+------+-----------+--------------------------------------------------+
| ID | USER | HOST | DB | COMMAND |
TIME | STATE | INFO |
+--------+-----------+-----------+--------------------+---------+------+-----------+--------------------------------------------------+
| 113752 | push_user | localhost | information_schema | Query |
0 | executing | select * from PROCESSLIST where info is not null |
+--------+-----------+-----------+--------------------+---------+------+-----------+--------------------------------------------------+
1 row in set (0.00 sec)
㈧ Mysql学会查看sql的执行计划
首先在Mysql的服务中有 连接器、查询缓存(Mysql8 已经删除)、分析器、优化器、执行器等,所有跨存储引擎的功能都在这一层实现
而一条sql怎么执行是由优化器决定的, 优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。
而执行计划就是优化器优化后的sql的执行的详细方案
Mysql中查看执行计划的方式有两种 : 1. 使用desc 2.使用 explain 使用它俩的效果是一样的
接下来要通过执行计划知道sql是怎么执行的
执行计划中有几个重要的字段, 分别是
id, table, type, possible_keys, key, key_len, Extra
id : 可以通过ID来查看在多表联查中sql是先查询哪张表的 id相同的从上往下依次执行,id不同的id大的先执行
table : table当然就是查询的表名
type : 查询的类型 查询类型分为 ALL, index, range, ref , eq_ref, const(system), null
ALL: 指的全盘扫描,没有走任何索引 查询结果集大于25% 优化器可能会走全盘扫描 字符串查询的时候一定要加"" 不然可能会全索引扫描(隐式转换) 统计信息 失效 或者 过旧 也可能走全盘扫描 因为优化器会参考统计信息来制定执行计划
index: 全索引扫描 就是扫描整颗索引树
range: 索引范围 查询索引树的一部分范围 范围索引中 > < <= >= like 的效率会比 or in 的效率高, 使用like %再前面的不走索引
ref: 辅助索引的等值查询
当查询的数据量小,优化器也有可能会走索引的全盘扫描 这里我就不贴图了;
eq_ref : 多表连接查询中,被连接的表的连接条件列是主键或者唯一键
const(system): 主键 或者 唯一键 的等值查询
null: 没有数据
他们的性能是依次递增的 全盘扫描性能最差, const性能最高
possible_keys: 查询过程中可能用到的索引
key: 真正使用到的索引
key_len: 走索引的长度
这个是怎么计算的呢?
key_len 的计算方法 :
int 类型最长存储4个字节长度的数字 有not null 是4字节 没有的话会花1字节存储是不是null
tinyint 最大存储一个字节 也会花1字节来判断是不是null
字符串类型 : 字符集 utf8mb4 1-4字节
varchar超过255会预留2个字节存储长度 没超预留1个字节
key_len 永远是你设置的长度的最大的
联合索引可以通过key_len 来判断走了几个索引
使用desc format=json select * from table 可以查看详细情况
filtered: 索引扫描过滤掉数据的占比
Extra: 额外的信息
Using filesort :MySQL 对数据在sql层进行了排序,而不是按照表内的索引进行排序读 取。 效率比较低
Using temporary :使用临时表保存中间结果,也就是说 MySQL 在对查询结果排序时使用了临时表,常见于order by 或 group by。
Using index :表示 SQL 操作中使用了覆盖索引(Covering Index),避免了访问表的数据行,效率高。
Using index condition :表示 SQL 操作命中了索引,但不是所有的列数据都在索引树上,还需要访问实际的行记录。
Using where :表示 SQL 操作使用了 where 过滤条件。
Select tables optimized away :基于索引优化 MIN/MAX 操作或者 MyISAM 存储引擎优化 COUNT(*) 操作,不必等到执行阶段再进行计算,查询执行计划生成的阶段即可完成优化。
Using join buffer (Block Nested Loop) :表示 SQL 操作使用了关联查询或者子查询,且需要进行嵌套循环计算