Linux安装Mysql8及改为忽略大小写、允许公网访问
Linux安装Mysql8及改为忽略大小写、允许公网访问
Riv3n前言
在debian11上安装了mysql8,导入以前的项目发现一些问题,此处记录修改过程
安装mysql8
安装依赖
1 | sudo apt update |
添加mysql apt存储库
1 | wget https://dev.mysql.com/get/mysql-apt-config_0.8.22-1_all.deb |
这会出现一个配置对话框,让你选择mysql版本即可选择mysql8,其他都点ok即可
安装期间会出现一个root用户的初始密码,这个要记录下不然没法登陆了
报错解决
如果看到类似的报错,表明APT无法验证MySQL仓库的GPG公钥,这通常发生在添加新仓库后没有导入该仓库的GPG公钥时。此外,当您尝试安装mysql-server
包时,由于APT无法验证仓库的安全性,所以无法找到安装候选。
1 | Err:2 http://repo.mysql.com/apt/debian bullseye InRelease |
我们添加一下密钥
1 | sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys B7B3B788A8D3785C |
这个命令从指定的密钥服务器导入公钥,这样APT就可以验证MySQL仓库的签名了。
安装mysql
1 | apt-get update |
检查下mysql状态
1 | sudo systemctl status mysql |
看到状态正常就是安装好啦
修改忽略大小写
MySQL在Windows系统上默认不区分大小写,但是在Linux和Mac系统上是区分大小写的。这是因为MySQL使用操作系统的文件系统来存储表,而Linux和Mac的文件系统是区分大小写的。
如果你的表名或列名包含大写字母,那么在Linux或Mac系统上,你需要在SQL查询中精确地指定表名和列名的大小写。
例如,如果你的表名是MyTable
,那么在查询时你也需要指定MyTable
,而不是mytable
或MYTABLE
。
1 | SELECT * FROM MyTable; |
如果你想在Linux或Mac系统上忽略表名和列名的大小写,可以在MySQL配置文件my.cnf
(通常位于/etc/mysql/my.cnf
或/etc/my.cnf
)中添加以下配置:
1 | [mysqld] |
然后重启MySQL服务。
按理说这样修改就可以了,但是发现修改后重启mysql会报错
其实是这里需要重建mysql数据目录,在重建之前记得先把数据导出并备份
停止mysql服务:
1 | sudo service mysql stop; |
删除mysql数据目录:
1 | sudo rm -vf /var/lib/mysql; |
重新创建mysql数据目录(仅仅删除是不够的):
1 | sudo mkdir /var/lib/mysql sudo chown mysql:mysql /var/lib/mysql sudo chmod 700 /var/lib/mysql |
然后确保下配置文件已经修改了lower_case_table_names = 1
重新初始化mysql:
1 | sudo mysqld --defaults-file=/etc/mysql/my.cnf --initialize --lower_case_table_names=1 --user=mysql --console |
启动mysql:
1 | sudo service mysql start |
检索mysql的root新密码:
1 | sudo grep 'temporary password' /var/log/mysql/error.log |
更改root密码:
1 | sudo mysql -u root -p |
1 | (输入密码并回车) |
1 | ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '新密码'; |
(这里注意mysql8默认的密码管理插件是caching_sha2_password,如果用的别的会报错,把命令参数修改为在使用的插件即可)
退出mysql:
1 | exit; |
然后我们重新登陆来验证下:
1 | sudo mysql -u root -p |
1 | (输入密码并回车) |
执行:
1 | show variables like 'lower_case_%'; |
预期产出:
允许公网访问
进入mysql:
1 | mysql -u root -p |
1 | (输入密码并回车) |
选择mysql表:
1 | use mysql; |
设置允许任意ip访问:
1 | update user set host = '%' where user = 'root'; |
给root授权所有权限和授权选项,允许访问和管理所有数据库和表:
1 | grant all on *.* to 'root'@'%'; |
刷新权限:
1 | flush privileges; |