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