0


安装 mysql8.0-docker版安装

一、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 mysql

2、用cmd用管理员的方式进入到mysql的安装路径下的bin,执行:
mysqld --console --skip-grant-tables --shared-memory

3、重开cmd,无密码进入mysql:
mysql -u root

4、修改数据库并给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登录时,会弹出重置密码界面。

标签: docker 容器 运维

本文转载自: https://blog.csdn.net/swebin/article/details/131999315
版权归原作者 石工记 所有, 如有侵权,请联系我们删除。

“安装 mysql8.0-docker版安装”的评论:

还没有评论