我的环境是:centos7 + mysql5.7.26,今天在用 mysqldumpslow 命令查看慢查询日志时出现下面的错误
[root@localhost ~]# mysqldumpslow -t 1
Can't determine basedir from 'my_print_defaults mysqld' output: --server-id=1
--port=3306
--character_set_server=utf8
--collation-server=utf8_general_ci
--lower_case_table_names=1
...省略
翻译过来的意思是: 无法从 'my_print_defaults mysqld' 输出中确定 basedir(mysql的安装目录) ,原因是因为在安装 mysql 时没有设置 basedir 参数,也就是 mysql 的安装路径。
从网上找到的办法有的是需要执行 mysql_install_db 命令
mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data &
还有的需要修改环境变量等等。
因为我的现在运行的 mysql 是用 rpm 包安装的,安装时安装目录是系统自动分配的,数据库目录,bin 目录等都是分散的,没有集中,上面的解决办法都不合适,最后参考了一下这篇文章的解决办法,MySQL Slow Queries Error: Can't determine basedir from 'my_pri,在之前的命令最后加上慢查询日志的文件名,这个问题就解决了。
[root@localhost ~]# mysqldumpslow -t 5 /var/lib/mysql/localhost-slow.log
Reading mysql slow query log from /var/lib/mysql/localhost-slow.log
Count: 2 Time=0.08s (0s) Lock=0.00s (0s) Rows=14.0 (28), root[root]@localhost
show databases
Count: 8 Time=0.01s (0s) Lock=0.00s (0s) Rows=0.0 (0), root[root]@localhost
Count: 2 Time=0.01s (0s) Lock=0.00s (0s) Rows=1.0 (2), root[root]@localhost
show variables like 'S'
分析一下这个问题产生的原因,如果 mysqldumpslow 命令最后不加慢查询日志的文件地址,mysql 会从默认配置中读取慢查询日志的文件地址,而确定慢查询日志地址的第一步肯定是确定 mysql 软件的安装路径,因为我的在安装时并没有配置,所以就产生了上面的问题。