一、docker安装
安装docker2022版(对大家有帮助)
二、docker 安装mysql8.0
1.从 Docker Hub 下载 MySQL 8.0 镜像。打开终端并运行以下命令:
docker pull mysql:8.0
2.创建一个 MySQL 容器并运行。在终端中运行以下命令:
//重新创建容器
docker run --name mysql8 -p 3306:3306 -d -v /home/data/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /home/data/mysql/data:/var/lib/mysql -v /home/data/mysql/log:/logs -e MYSQL_ROOT_PASSWORD=123456 --restart=always mysql:8.0 --lower_case_table_names=1
1-e MYSQL_ROOT_PASSWORD 设置mysql密码
-v /home/data/mysql/conf/my.cnf:/etc/mysql/my.cnf 挂载配置文件路径
-v /home/mysql/:/var/lib/mysql 挂载磁盘实现数据持久化
--restart=always 容器异常停止后自动重启
--lower_case_table_names=1 忽略大小写,docker mysql默认区分大小写的
3.连接到 MySQL 服务器。使用以下命令连接到容器内的 MySQL 服务器:
docker exec -it my-mysql mysql -uroot -p
“my-mysql” 是容器的名称,“-uroot” 是 MySQL 的 root 用户名,“-p” 表示需要输入密码。
4.可以在 MySQL 服务器中执行命令了。例如,创建一个新的数据库:
CREATE DATABASE my_database;
5.可以通过退出 MySQL 服务器来退出容器:
exit
6.现在,已经成功地在 Docker 中安装并运行了 MySQL 8.0。
7.远程连接mysql8.0
第一种方法
//进入容器
docker exec -it mysql /bin/bash
//登录
mysql -u root -p
//提示输入之前设置的密码
use mysql;
//修改远程链接授权(8.0以上版本好像默认已经开启了远程访问)
grant all privileges on . to 'root'@'%';
第二方法
当你的帐号不允许从远程登陆,只能在
localhost
连接时。这个时候只要在mysql服务器上,更改
mysql
数据库里的
user
表里的
host
项,从
localhost"
改成
%
即可实现用户远程登录
update user set host = '%' where user='root' and host='localhost';
#grant all privileges 语法
grant all privileges on 库名.表名 to '用户名'@'IP地址' identified by '密码' with grant option;
三、常见错误
8.账号被删除了处理方法
8.1在navicat for mysql中删除了root用户
mysqld --console --skip-grant-tables --shared-memory
具体步骤:
1、关掉mysql服务器:
net stop mysql2、用cmd用管理员的方式进入到mysql的安装路径下的bin,执行:
mysqld --console --skip-grant-tables --shared-memory3、重开cmd,无密码进入mysql:
mysql -u root4、修改数据库并给root用户添加权限
use mysql;
update user set select_priv=‘Y’,Insert_priv=‘Y’,Update_priv=‘Y’,Delete_priv=‘Y’,Create_priv=‘Y’,Drop_priv=‘Y’,Reload_priv=‘Y’,File_priv=‘Y’,Grant_priv=‘Y’,References_priv=‘Y’,Index_priv=‘Y’,Alter_priv=‘Y’,Show_db_priv=‘Y’,Super_priv=‘Y’,Create_tmp_table_priv=‘Y’,Lock_tables_priv=‘Y’,Execute_priv=‘Y’,Repl_slave_priv=‘Y’,Repl_client_priv=‘Y’,Create_view_priv=‘Y’,Show_view_priv=‘Y’,Create_routine_priv=‘Y’,Alter_routine_priv=‘Y’,Create_user_priv=‘Y’,Event_priv=‘Y’,Trigger_priv=‘Y’,Create_tablespace_priv=‘Y’
WHERE user=‘root’;5、刷新并退出:
flush privileges;
exit;
9 常见错误处理
9.1用navicat登录,报1251错误
原因:加密规则不同
跳过数据库权限验证 的方式进入进入数据库,然后修改加密规则:
alter user ‘root’@‘localhost’ identified with mysql_native_password by ‘你的密码’;
9.2 mysql 登录报错1449-The user specified as a definer(‘mysql.infoschema‘@localhost‘) does not exist:
# 1、进入mysql: mysql -u root -p # 2、删除之前的视图表: drop user 'mysql.infoschema'@"localhost"; # 3、刷新权限: flush privileges; # 4、创建缺少的视图表:加粗样式 create user 'mysql.infoschema'@"localhost" identified by '你的密码'; # 5、再刷新权限: flush privileges; # 6、使用数据库: use mysql; # 7、设置权限: update user set Select_priv = 'Y' where User = 'mysql.infoschema'; # 8、刷新权限: flush privileges;
四、授权
一般来说我们不会轻易创建一个用户给他赋予所有权限,也就是 grant all privileges,那么grant后面可以接哪些权限呢?这里简单整理了一部分权限以及其含义:
(1)新建用户
创建用户常用的命令是CREATE USER,不过使用CREATE USER语句创建用户时,需要操作员要有相应的权限,也就是user表中的字段Create_priv为Y才能创建用户。比如创建一个名为admin的用户,并且登录密码为123456:
CREATE USER ‘admin’@‘%’ IDENTIFIED BY ‘123456’
一般创建用户的格式为:CREATE USER ‘用户名’@‘登录IP或者域名’ IDENTIFIED BY ‘登录密码’。
其中需要注意的是登录IP或者域名,很多时候会将登录IP设置为**%,%**代表所有主机,表示该用户可以在任何机器上进行登录。192.168.101.%表示允许192.168.101这个网段的主机进行登录。
当你只是完上面的创建admin用户命令后,你可以打开mysql库下的user表,你会发现里面多了一条admin的数据,但是所有的权限都是N,这表明该admin用户没有任何权限,不能查看操作任何数据库资源。
(2)删除用户
刚刚我们已经创建了一个admin账号并且没有为其设置任何权限,此时我们可以使用 DROP USER 命令删除某个用户,例如我们要删除之前创建的admin用户,那么我们可以使用命令:
DROP USER 'admin'@'%' -- 删除admin用户,用户名(User)和主机名(Host)构成
FLUSH PRIVILEGES; -- 刷新权限
(3)禁用用户、启用用户
有时候我们只想禁用某个用户的登录,并不想将该用户进行删除,那么可以使用MySQL的禁用功能。在演示之前我们现在创建一个admin用户,该用户拥有访问数据库(db_cztl_dev)的权限,请注意db_cztl_dev是在我MySQL中存在的一个数据库,您可以使用您自己的数据库。执行命令:
create user 'admin'@'%' identified by '123456' -- 创建用户
GRANT SELECT ON db_cztl_dev
.* TO 'admin'@'%' -- 将db_cztl_dev数据库的读权限赋予admin
(4)重命名用户名
修改用户名的格式如下:
rename user '用户名'@'IP或者域名' to '新用户名'@'IP或者域名';
比如我们要将admin用户重名为king,那么可以这样写:
rename user 'admin'@'%' to 'king'@'%';
(5)修改用户密码
set password for '用户名'@'IP或者域名'=password('新密码')
(6)收回权限(revoke)
根据上面几小节我们指定如何给一个用户赋予权限可以用Grant命令,相对应的撤销用户的某个权限可以使用REVOKE。
(6.1)查看数据库中所有用户信息
我们知道用户的基本信息都存放在user表中,那么查看所有用户信息可以使用以下语句:
SELECT user,host FROM mysql.user
;
6.2)查看用户拥有的所有权限
查看某个用户的权限可以使用
show grants for 用户名
,比如我们要查看admin用户的权限有哪些:
SHOW GRANTS FOR 'admin'@'%'
6.3)使用REVOKE撤销权限
由4.2小节我们可以看到admin拥有访问db_cztl_dev数据库的权限,假如我们此时想撤销admin的权限,可以这样写:
REVOKE SELECT ON db_cztl_dev.* FROM 'admin'@'%'; -- 撤销admin在数据db_cztl_dev的权限
此时我们再使用SHOW GRANTS FOR 'admin'@'%'查看admin权限,可以看到admin访问db_cztl_dev数据库的权限已被撤销。
(7)修改用户权限(Grant 权限类型 ON 数据库.表 TO 用户)
通过6.3我们已经撤销了admin查看db_cztl_dev的权限,如果此时我们想赋予admin用户可以访问并且修改db_cztl_dev库下cztl_line表的权限,可以这样做:
GRANT SELECT,UPDATE ON db_cztl_dev.cztl_line TO 'admin'@'%';
FLUSH PRIVILEGES;
(8) 设置MySQL用户密码过期策略
设置系统参数default_password_lifetime作用于所有的用户账户,可以通过show variables like ‘default_password_lifetime’;查看密码过期策略,0表示用不过期,可以通过 set global default_password_lifetime=180;设置密码过期时间为180天。
(8.1)手动强制某个用户密码过期
ALTER USER '用户名'@'IP或者域名' PASSWORD EXPIRE;
1
假如我们要将admin账号强制密码过期,可以这样做:
ALTER USER 'admin'@'%' PASSWORD EXPIRE; --强制admin用户密码过期
1
重启使用admin登录时,会弹出重置密码界面。
版权归原作者 石工记 所有, 如有侵权,请联系我们删除。