0
点赞
收藏
分享

微信扫一扫

再看MySQL8中大小些敏感、MySQL server through socket等问题

天蓝Sea 2022-04-13 阅读 58
mysql

再看MySQL8中大小些敏感、MySQL server through socket等问题

1、概述

大家好,我是欧阳方超,封面为回龙园内一建筑。
之前写过一篇文章介绍MySQL8安装——CentOS7.5安装MySQL8以及相关设置,这两天在参照这篇文章时发现一个问题,就是在配置文件中添加low_case_table_names=1后,导致MySQL无法启动了,难道是跟之前的版本有关吗,这次是在CentOS7.7+arm64安装的。还有一些其他的小问题,下面看下是如何解决的吧。

2、问题解决

2.1、perl failed的问题

安装mysql解压后的rpm时首先遇到的问题是:

Error: failed dependencies /usr/bin/perl is needed

如果你不想安装perl,可以通过在rpm -ivh后加–nodeps命令解决,如下:

rpm -ivh --nodeps  xxx.rpm xxx.rpm

2.2、添加low_case_table_names=1无法启动

贴下日志

2022-04-07T14:16:23.423389Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2022-04-07T14:16:23.544609Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2022-04-07T14:16:23.548905Z 1 [ERROR] [MY-011087] [Server] Different lower_case_table_names settings for server ('1') and data dictionary ('0').
2022-04-07T14:16:23.549232Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2022-04-07T14:16:23.549554Z 0 [ERROR] [MY-010119] [Server] Aborting
2022-04-07T14:16:24.062467Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.20)  MySQL Community Server - GPL.

官网有言曰:

看来直接执行system start mysqld命令时其内部包括了“初始化”,然后紧接着发现配置文件中的low_case_table_names=1,这才符合“After initialization, it is not allowed to change this setting.”的说法。那我们就先执行一遍初始化同时指定low_case_table_names=1,然后在启动。
初始化时需要将数据目录下的内容删除掉,否则无法初始化,注意如果默认路径(/var/lib/mysql)下已经有数据了,一定要备份,毕竟数据无价!!!
带参数lower_case_table_names=1的初始化:

 /usr/bin/mysqld --user=mysql --lower-case-table-names=1 --initialize-insecure --datadir=/var/lib/mysql

然后systemctl start mysqld启动MySQL即可成功启动。

注意初始化时与–initialize-insecure类似的还有一个命令为–initialize,区别是后者会为mysql的root用户生成一个随机密码,而前者不会——即所谓insecure(非安全)。

2.3、cannot connect local MySQL server through socket

我们通常会为MySQL更改数据存储目录,这个错误就发生在这种场景下:

ERROR 2002 (HY000):Can't connect to local MySQL Server throgh socket '/var/lib/mysql/mysql.sock'(2)

排查这个问题,可以从下面几个方面入手。
第一,首先看MySQL是否已经启动。
即将MySQL启动后再试。
第二,连接127.0.0.1而不是localhost
如果使用localhost进行连接则使用的是socket连接器,如果使用127.0.0.1则使用的是TCP/IP连接器,所有当socket连接器不工作时尝试连接127.0.0.1。简单说就是在命令行进行连接时带上-h 127.0.0.1,至于这种情况下程序能否连接数据库暂时未尝试,敬请大神们留言讨论。
第三,再my.conf中追加[mysql]、[client]选项
[mysqld]选项应该是有的,[mysql]、[client]哪个没有就增加哪个吧,在[mysql]、[client]选项中添加一对键值socket=xxx,socket的值视自己的情况而定,我下面这样是因为已经把MySQL数据存储目录迁移到/datacenter/mysqldata/mysql/了,

[mysql]
socket=/datacenter/mysqldata/mysql/mysql.sock
 
[client]
socket=/datacenter/mysqldata/mysql/mysql.sock

追加后,在my.cnf中[mysqld]、[mysql]、[client]三个选项应该都有了,而且他们三个中socket的值需要是一样的。
第四,创建符号连接

ln -s /data/mysql_datadir/mysql.sock /var/lib/mysql/mysql.sock

注意,前一个地址是mysql.sock绝对路径,后一个路径为报错信息中提示的没有找到的socket文件的路径。
如果是在MySQL启动状态下出现的这个错误,则从第二、第三、第四中择其一进行解决就可以。之后再重启MySQL服务,应该就可以了。

3、总结

本文总结了MySQL8修改大小写敏感问题时遇到的问题以及解决办法,出现“cannot connect local MySQL server through socket”时出现的问题以及解决办法。在此记录一下希望能帮到以后的自己。
我是欧阳方超,把事情做好了自然就有兴趣了,如果你喜欢我的文章,欢迎点赞、转发、评论加关注。

举报

相关推荐

0 条评论