现象:
在本地登录,执行 /usr/local/mysql/bin/mysql -uroot -pxxxxx --socket=/data/mysql/3306/mysqltmp/mysql.sock -A
报错如下:
显示完下面信息之后,就显示:
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Segmentation fault (core dumped)
测试:
(1)在其它机器登录,没有问题;说明只是本地mysql的问题;
(2)在本机执行语句,没问题,而不执行语句,进到命令行状态就有问题,说明只是进入命令行时的报错。
/usr/local/mysql/bin/mysql -uroot -pxxxxxx --socket=/data/mysql/3306/mysqltmp/mysql.sock -e "select * from information_schema.PROCESSLIST where command<>'Sleep';"
(3)MySQL的错误日志,没有报错:
(4)操作系统报错如下:
解决:
参考了别人的经验,需要修改源码然后重新编译,便可解决,其它机器这个版本没问题,暂时不知道是否与安装出错有关。
我的版本是5.7.21,如果你使用的是其它版本的MySQL,则需要对应版本的源码:
修改文件:vi mysql-5.7.21/cmd-line-utils/libedit/terminal.c
把terminal_set方法中的 char buf[TC_BUFSIZE]; 这一行注释,再把 area = buf;改为 area = NULL;
更改后如下
之后重新通过cmake,make;make install,重装mysql之后正常。