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';
注意:上面的%是远程用户,没有该用户就添加用户,而不是修改用户
刷新权限,即可,不用重启服务。
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,在给新用户授权时,发生了变化,分开三次执行
- 创建账户
create user 'you-userName'@'%' identified by 'you-pwd';
- 赋予权限
grant all privileges on *.* to 'you-userName'@'%' with grant option;
- with grant option权限,能给其他用户赋予权限
- select user,host,Grant_priv from user 查看是否有这权限
- 改密码&授权超用户
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%';
- lower_case_file_system
表示当前系统文件是否大小写敏感,只读参数,无法修改
。
- ON 大小写不敏感
- OFF 大小写敏感
- lower_case_table_names
表示表名是否大小写敏感,可以修改
。
- lower_case_table_names = 0时,mysql会根据表名直接操作,大小写敏感。
- lower_case_table_names = 1时,mysql会先把表名转为小写,再执行操作。
修改为不敏感
停止应用服务,mysql服务
我的是docker部署的:
docker stop mysql
备份数据datatdir文件夹
注:要把数据库导出备份好,可以导出文件,或迁移到另一个数据库中,不然改了就没有了。
select @@datadir;
把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参数。
注:我的mysql版本:8.0.24