MySql如何跟踪SQL脚本执行

笔者管理的一个外包软件项目,在初期运行效率还行,当数据达到万级时,就感觉卡顿起来。

因为公司网络情况欠佳,所以考虑有两个方面问题:1、是否建立了索引? 2、网络是否有问题?

对外包公司的能力毫无信心,所以先从索引查起。问过对方运维支撑人员,说肯定是所有表都建立了索引的......本着怀疑精神,连上系统数据库,一看,感觉有点怀疑自己的眼睛及专业能力,连主键都没有看到......

在这里不得不吐槽下这些强大的开发商们,除了添乱就是添堵,而做为甲方代表的我对他们竟然毫无办法,哎!!!


按基本需求对相关表建立了索引,性能有一定改善。为了进一步优化,决定对索引字段进行精确定位,此时就需要知道SQL脚本到底以什么作为条件关键字进行查询。

由于该系统采用Liunx+Tomcat+MYSQL+JAVA模式,所以需要在Liunx下跟踪Mysql脚本执行语句,根据语句来判断如何优化索引。在网上搜了下,可以通过输出SQL日志的方式来查看使用到的所有SQL语句。

配置/etc/my.cnf文件
找到[mysqld],在下面添加:
log=usr/tmp/my.log

修改完后,需要重启mysql服务
service mysqld restart

看起来还是挺简单的,但是问题来了,在MYSQL服务器上居然没找到my.cnf文件。在网上一番忙碌,似乎找到了答案。

Linux下用rpm包安装的MySQL是不会安装/etc/my.cnf文件的,至于为什么没有这个文件而MySQL却也能正常启动和作用,网上流传两种说法:
第一种说法,my.cnf只是MySQL启动时的一个参数文件,可以没有它,这时MySQL会用内置的默认参数启动;
第二种说法,MySQL在启动时自动使用/usr/share/mysql目录下的my-medium.cnf文件,这种说法仅限于rpm包安装的MySQL。
解决方法,只需要复制一个/usr/share/mysql目录下的.cnf文件到/etc目录,并改名为my.cnf即可。

搞定配置文件,然后开始重启MySQL服务,但是问题又来了。

mysqld: unrecognized service
居然提示没有MySLQD这个服务。

查看是否安装MYSQL包

rpm -q mysql >package mysql is not installed
居然没有MySQL。。。彻底迷茫ing。
[root@localhost ~]# whereis mysql
mysql: /usr/bin/mysql /usr/lib64/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz
[root@localhost ~]# rpm -qa|grep -i  mysql
MySQL-server-5.5.33-1.rhel5.x86_64
MySQL-client-5.5.33-1.rhel5.x86_64
终于找到了,按网上搜索的资料,应该是系统自带的MySql。

service mysql restart
OK,系统重启成功。等一段时间查看日志,相应的SQL已经输出存储到指定位置。

[root@localhost tmp]# cd /usr/tmp
[root@localhost tmp]# cat my.log | more
/usr/sbin/mysqld, Version: 5.5.33-log (MySQL Community Server (GPL)). started with:
Tcp port: 3306  Unix socket: /var/lib/mysql/mysql.sock
Time                 Id Command    Argument
161231  8:50:08     1 Connect   test@192.168.60.152 on dst
                    1 Query     /* mysql-connector-java-5.1.12 ( Revision: ${bzr.revision-id} ) */SHOW VARIABLES WHERE Variable_name ='language' OR Variable_name = 'net_write_timeout' OR Variable_name = 'inte
ractive_timeout' OR Variable_name = 'wait_timeout' OR Variable_name = 'character_set_client' OR Variable_name = 'character_set_connection' OR Variable_name = 'character_set' OR Variable_name = 'character_set_
server' OR Variable_name = 'tx_isolation' OR Variable_name = 'transaction_isolation' OR Variable_name = 'character_set_results' OR Variable_name = 'timezone' OR Variable_name = 'time_zone' OR Variable_name =
'system_time_zone' OR Variable_name = 'lower_case_table_names' OR Variable_name = 'max_allowed_packet' OR Variable_name = 'net_buffer_length' OR Variable_name = 'sql_mode' OR Variable_name = 'query_cache_type
' OR Variable_name = 'query_cache_size' OR Variable_name = 'init_connect'






### 如何在 MySQL执行 SQL 脚本文件 #### 使用 `source` 命令 可以在 MySQL 客户端中通过 `source` 命令来加载并执行 SQL 脚本文件。例如: ```sql Mysql> source 【sql 脚本文件的路径全名】; ``` 或者可以使用缩写的句点命令 `.`, 后面跟上完整的路径名称[^1]。 ```sql Mysql> . 【sql 脚本文件的路径全名】; ``` 对于 Windows 用户来说,如果要运行位于 F:\ 下名为 a.sql脚本,则输入如下语句: ```sql Mysql> source f:/a.sql; ``` #### 多个 SQL 脚本批量执行 为了简化多条命令的操作流程,可以通过创建一个新的 SQL 文件 c.sql 来依次调用其他的 SQL 文件。比如有 a.sql 和 b.sql 存在于 F 盘根目录下,在 c.sql 中加入以下内容即可实现连续执行两个独立编写的程序[^2]: ```sql SOURCE f:/a.sql ; SOURCE f:/b.sql ; ``` #### 创建批处理文件 (.bat) 自动化操作过程 当希望进一步自动化整个数据库更新的过程时,还可以编写一个简单的批处理(.bat)文件用于启动服务前后的环境准备以及清理工作。下面是一个基本模板,其中包含了检查 MySQL 服务器状态的功能[^3]: ```batchfile @echo off :: Check if the MySQL service is running. tasklist /NH | findstr /I "mysqld.exe" > nul && goto :okScript || echo Service not found! :okScript "C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe" -u root -p < "F:\c.sql" pause exit ``` 此 bat 文件会先确认 mysqld 是否正在运行;如果是的话就继续下一步骤——即利用 mysql 实用工具读取来自指定位置 (这里指代的是 F:\c.sql ) 的指令集,并按顺序逐行解析直至结束为止。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值