1.问题
部署了一个开源项目在服务器上,运行时报错表不存在···
在本地运行的好好的,数据库也是全量导过去的呀,仔细一想发现是不是大小写问题,一试果然。
2.解决
linux下mysql默认是要区分表名大小写的,mysql是否区分大小写设置是由参数lower _ case _ table _ names决定的。
ower_case_table_names = 0
区分大小写(即对表名大小写敏感),默认是这种设置。
lower_case_table_names = 1
不区分大小写(即对表名大小写不敏感)
依次执行以下命令解决:
mysqladmin -uroot -p shutdown //以安全模式关闭数据库
vi /etc/mysql/mysql.conf.d/mysqld.cnf //添加下面一行设置
//······
lower_case_table_names=1
//······
service mysql start //启动数据库
哈哈,然后你就会发现启动不了。。。。太xx了。。。
查了资料发现8.0变态呀,这个配置需要在安装完成之后,初始化数据库之前进行改动,不然就会报错:
mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'
Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!
简直太残忍。。
没得办法只能干掉数据重新设置(:
//首先停掉MySQL
mysqladmin -uroot -p shutdown
//删除 MySQL的数据 /var/lib/mysql
rm -rf /var/lib/mysql
//然后再进行上述操作即可。
3.修复
由于我们删除了/var/lib/mysql/目录,所以再启动mysql会重新初始化,这样你的root密码就不知道了,还得找回来呀。
//还得先停掉MySQL,这时不知道密码就不能使用安全停止了
sudo systemctl stop mysql
//然后类似设置忽略大小写,添加下面一行设置
vi /etc/mysql/mysql.conf.d/mysqld.cnf
//······
skip-grant-tables //设置不需要验证权限登录
//······
//启动数据库
sudo service mysql start
然后进去改密码
//使用mysql命令进去,回车两次即可
mysql -u root -p
//更改密码
use mysql
update user set authentication_string ='' where user ='root';
alter user 'root'@'localhost' identified with caching_sha2_password by 'password';
quit;
恢复校验,把刚刚添加的skip-grant-tables删除,重新启动;
填坑的路途很无奈呀···