mysql8: 整理(收藏篇)

mysql8: 整理(收藏篇)

「这是我参与11月更文挑战的第25天,活动详情查看:2021最后一次更文挑战

登录mysql

进入mysql容器

docker exec -it mysql /bin/bash

登录mysql,输入密码

mysql -uroot -p

增加root的远程权限

默认的是localhost。即是只能本地服务器登录,不能远程,修改为‘%’,所有地方都可以登录

update user set host = '%' where user = 'root';

注意:查看用户信息

select user,host from user;

如果有同名root用户两个,则是root不能远程登录。要删除localhsot这个用户

user host
root %
root localhsot

查看用户

使用数据库

use mysql

查看用户有哪些

select host,user from user;

增加用户

增加用户

CREATE USER 'test'@'%' IDENTIFIED BY 'MyPass@123';

刷新权限

flush privileges ;

修改密码

一般来说,直接用ROOT用户的账号密码去连接是不行,即时密码正确。

Mysql8.0 默认采用 caching-sha2-password 加密,目前好多客户端不支持,可改为 mysql_native_password;

Alter user 'root'@'%' identified by 'root';

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';

注意:上面的%是远程用户,没有该用户就添加用户,而不是修改用户 image.png

刷新权限,即可,不用重启服务。

flush privileges ;

删除用户

drop user 'test1'@'localhost';

权限问题

连接数据库,报以下错:

Access denied for user 'root'@'%' to database 'mytest'

需要授权:

mysql8前版本

grant all privileges on *.* to 'you-userName'@'%' identified by 'you-pwd' with grant option;

  • *.* :表示所有数据库的所有表,xxx.* 就是单独的xxx数据库
  • with grant option :这个选项表示该用户可以将自己拥有的权限授权给别人
  • all privileges 可换成 select,update,insert,delete,drop,create 等操作。

mysql8+版本

mysql版本8.0.13,在给新用户授权时,发生了变化,分开三次执行

  1. 创建账户

create user 'you-userName'@'%' identified by 'you-pwd';

  1. 赋予权限

grant all privileges on *.* to 'you-userName'@'%' with grant option;

  • with grant option权限,能给其他用户赋予权限
  • select user,host,Grant_priv from user 查看是否有这权限
  1. 改密码&授权超用户

flush privileges 命令本质上的作用是将当前user和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里

flush privileges;

查看用户授权信息

show grants for 'test1'@'localhost;

撤销权限

用户有什么权限就撤什么权限

revoke all privileges on *.* from 'test1'@'localhost';

错误:Table 'TABLE_NAME' doesn't exist.

由于项目运行时发现报错,如下: java.sql.SQLSyntaxErrorException: Table 'TABLE_NAME' doesn't exist.

我这个是mysql8+的,经过百度说是在mysql的连接上加上参数:nullCatalogMeansCurrent=true,然而并没有用。

我就把这个表名复制运行sql,好家伙!大写的表名查不到,说不存在,原来mysql8+对表名大小写敏感

在 MySQL8 =中,数据目录datadir初始化之后,不再允许更改 lower_case_table_names = 1 的 值; 除非删除datadir的数据文件夹。就是说我修改配置把它改成1还要删除datadir数据文件夹,否则运行报错

mysql大小写敏感配置

查看mysql大小写情况:

show global variables like '%lower_case%';

image.png

  1. lower_case_file_system

表示当前系统文件是否大小写敏感,只读参数,无法修改

  • ON  大小写不敏感
  • OFF 大小写敏感
  1. lower_case_table_names

表示表名是否大小写敏感,可以修改

  • lower_case_table_names = 0时,mysql会根据表名直接操作,大小写敏感。
  • lower_case_table_names = 1时,mysql会先把表名转为小写,再执行操作。

修改为不敏感

停止应用服务,mysql服务

我的是docker部署的:

docker stop mysql

备份数据datatdir文件夹

注:要把数据库导出备份好,可以导出文件,或迁移到另一个数据库中,不然改了就没有了。

select @@datadir;

image.png

把datadir弄到data-bak了,有问题再把文件夹换回来也能行,你们看这办

mv data datdockea-bak

mkdir data

修改my.cnf

打开my.cnf文件,加入以下语句后重启。

[mysqld]
datadir = /var/lib/mysql
lower_case_table_names = 1
复制代码

重启mysql服务

docker start mysql

查看启动日志:

docker logs -f -t --tail 10 mysql

错误:Public Key Retrieval is not allowed

连接数据库的url中,加上allowPublicKeyRetrieval=true参数。

image.png

注:我的mysql版本:8.0.24

Guess you like

Origin juejin.im/post/7034374040211062820