【MySQL】Linux下MySQL的目录结构、用户、权限与角色

一、Linux下MySQL的目录结构

1、MySQL相关目录

  • 数据库文件存放路径:/var/lib/mysql
  • 数据库命令存放路径:/user/bin/user/sbin
  • 配置文件目录:/usr/share/mysql-8.0//usr/share/mysql//etc/my.cnf

2、假设我们创建了一个数据库dbtest1,在这个数据库下创建了表test1

  • 如果表使用InnoDB存储结构,在/var/lib/mysql/dbtest1下会生成如下文件
    • 存储表结构(5.7版本存在):test1.frm
    • 存放此数据库的字符集、比较规则等配置(5.7版本存在):db.opt
    • 数据信息和索引信息存放:
      • 如果使用系统表空间存储模式:表数据会存放到/var/lib/mysql/ibdata1
      • 如果使用独立表空间存储模式:/var/lib/mysql/dbtest1下会生成test1.idb(8.0版本没有.frm和.opt文件,独立表空间存储模式下,表结构、数据以及db.opt存放的配置信息都会存放到.idb文件中)
  • 如果表使用MyISAM存储结构,在/var/lib/mysql/dbtest1下会生成如下文件
    • 存储数据信息(如果采用独立表空间的存储模式):test1.MYD(MyData)
    • 存放索引信息文件:test1.MYI(MyIndex)
    • 存储表结构:test1.frm(5.7版本)或test_xxx.sdi(8.0版本)
  • 创建视图:MySQLl5.7会创建一个xxx_view.frm存放视图结构(8.0版本还没找到在哪,暂时留一个疑问)

决定使用系统表空间还是独立表空间,由参数innodb_file_per_table决定,可以在my.cnf下配置

  • innodb_file_per_table=0:使用系统表空间
  • innodb_file_per_table=1:使用独立表空间
mysql> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+
1 row in set (0.00 sec)

mysql>

这里的ON,表示使用独立表空间

3、可以使用命令ibd2sdi --dump-file=test1.txt test1.ibd查看存放表数据的文件test1.ibd

二、用户管理

1、查看当前系统中存在的用户
使用mysql这个database,执行select host,user from user;语句

mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql>
mysql>
mysql> select host,user from user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | root             |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
+-----------+------------------+
4 rows in set (0.00 sec)

mysql>

2、创建用户CREATE USER

mysql> create user 'test001' identified by 'test001Pwd';
Query OK, 0 rows affected (0.01 sec)

mysql> select host,user from user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | root             |
| %         | test001          |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
+-----------+------------------+
5 rows in set (0.00 sec)

mysql>
mysql> create user 'test001'@'localhost' identified by 'test001Pwd';
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> select host,user from user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | root             |
| %         | test001          |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | test001          |
+-----------+------------------+
6 rows in set (0.00 sec)

mysql>

我们发现,同一个用户test001,可以被创建多次
因为user表中,host+user字段是联合主键

联合主键:指的是把两个列看成是一个整体,这个整体是不为空,唯一,不重复

3、修改用户名(注意flush privileges)

mysql> create user 'test002'@'localhost' identified by 'test002Pwd';
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> select host,user from user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | root             |
| %         | test001          |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | test001          |
| localhost | test002          |
+-----------+------------------+
7 rows in set (0.00 sec)

mysql>
mysql> update user set user = 'test003' where user = 'test002' and host = 'localhost';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql>
mysql> select host,user from user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | root             |
| %         | test001          |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | test001          |
| localhost | test003          |
+-----------+------------------+
7 rows in set (0.00 sec)

mysql>
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql>

我们新建了一个用户test002,修改用户名为test003后,
如果未执行flush privileges;,那么当我们尝试用test003登录,会发现失败
在这里插入图片描述

4、删除用户

# 方式一:使用DROP
# 默认删除host为%的用户
DROP USER user1,user2...;
# 删除指定host的用户
DROP USER 'test001'@'localhost';

# 方式二:使用delete(不推荐)
DELETE from mysql.user where user = 'test001' and host = 'localhost';
flush privileges;

5、设置用户密码

  • 修改当前用户的密码,我们之前把test002改为test003,我们尝试改一下test003的密码
    • 方式一:使用alter user user() identified by '新密码';
    • 方式二:使用SET password = '新密码';

使用alter user user() identified by '新密码';把密码从test002Pwd改为test003

[root@myLinux2 ~]# mysql -utest003 -ptest002Pwd
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
...
mysql>
mysql> alter user user() identified by 'test003';
Query OK, 0 rows affected (0.01 sec)

mysql> exit;
Bye
[root@myLinux2 ~]# mysql -utest003 -ptest002Pwd
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'test003'@'localhost' (using password: YES)
[root@myLinux2 ~]#
[root@myLinux2 ~]# mysql -utest003 -ptest003
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 18
Server version: 8.0.36 MySQL Community Server - GPL
...

使用SET password = '新密码';把密码从test003改为test003Pwd

mysql> SET password = 'test003Pwd';
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye
[root@myLinux2 ~]# mysql -utest003 -ptest003
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'test003'@'localhost' (using password: YES)
[root@myLinux2 ~]#
[root@myLinux2 ~]# mysql -utest003 -ptest003Pwd
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 20
Server version: 8.0.36 MySQL Community Server - GPL
...
mysql>
  • 修改其他用户的密码:需要是root用户或者被root用户赋予修改密码的权限
    • 方式一:使用alter user 'user'@'host' identified by '新密码';
    • 方式二:使用SET PASSWORD FOR 'user'@'host' = '新密码';

使用alter user 'user'@'host' identified by '新密码';修改test003的密码为test003

mysql> ALTER USER 'test003'@'localhost' identified by 'test003';
Query OK, 0 rows affected (0.01 sec)

在这里插入图片描述
使用SET PASSWORD FOR 'user'@'host' = '新密码';修改test003的密码为test003Pwd

mysql> SET PASSWORD FOR 'test003'@'localhost' = 'test003Pwd';
Query OK, 0 rows affected (0.00 sec)

在这里插入图片描述

三、权限管理

1、授权的原则

  • 最小权限原则:只给予用户他职权范围内的最小权限,比如用户只能查询,就只给他select权限
  • 创建用户的时候,限制用户的登陆主机,限制他的网段或IP
  • 每个用户的密码都要满足密码复杂度
  • 定期清理用户账号和权限

2、查看用户权限
使用show grants;或者show grants for 'test001'@'localhost';
在这里插入图片描述

3、授权方式(需要是root用户)

  • 方式一:直接给用户授权:grant 权限1,权限2 on database名称.表名 to '用户名'@'host';

首先我们使用show grants;查看一下当前用户的权限
在这里插入图片描述
如果想给用户授权某个数据下的所有表的权限,那么database名称.表名需要换成database名称.*

mysql> grant select,update on dbtest1.* to 'test003'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql>

我们测试一下test003的权限,发现确实是只有select和update权限

mysql> show grants;
+--------------------------------------------------------------+
| Grants for test003@localhost                                 |
+--------------------------------------------------------------+
| GRANT USAGE ON *.* TO `test003`@`localhost`                  |
| GRANT SELECT, UPDATE ON `dbtest1`.* TO `test003`@`localhost` |
+--------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql>
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| dbtest1            |
| information_schema |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)

mysql>
mysql> use dbtest1;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql>
mysql> show tables;
+-------------------+
| Tables_in_dbtest1 |
+-------------------+
| test1             |
| test1_view        |
+-------------------+
2 rows in set (0.00 sec)

mysql>
mysql> select * from test1;
+------+--------+
| id   | name   |
+------+--------+
|    1 | decade |
|    2 | 十年   |
+------+--------+
2 rows in set (0.00 sec)

mysql>
mysql> update test1 set name = 'decadeNew' where id = '1';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from test1;
+------+-----------+
| id   | name      |
+------+-----------+
|    1 | decadeNew |
|    2 | 十年      |
+------+-----------+
2 rows in set (0.00 sec)

mysql>
mysql> delete from test1 where id = '1';
ERROR 1142 (42000): DELETE command denied to user 'test003'@'localhost' for table 'test1'
mysql>

然后我们再把delete权限也给他加上

mysql> grant delete on dbtest1.* to 'test003'@'localhost';
Query OK, 0 rows affected (0.00 sec)

重新登录之后,删除权限生效

mysql> delete from test1 where id = '1';
Query OK, 1 row affected (0.00 sec)

mysql> select * from test1;
+------+--------+
| id   | name   |
+------+--------+
|    2 | 十年   |
+------+--------+
1 row in set (0.00 sec)

mysql>
mysql>
mysql> show grants;
+----------------------------------------------------------------------+
| Grants for test003@localhost                                         |
+----------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `test003`@`localhost`                          |
| GRANT SELECT, UPDATE, DELETE ON `dbtest1`.* TO `test003`@`localhost` |
+----------------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql>

如果想把所有表下的所有的权限都授予某个用户,那么可以使用
GRANT all privileges ON *.* TO '用户名'@'host';

  • 方式二:把权限赋予给角色,然后把用户和角色进行绑定

4、权限的横向分组和纵向分组

  • 横向分组:可以接触到的数据范围,例如数据库、表
  • 纵向分组:对接触到的数据能访问到什么程度,如查看、更新、删除、插入等

5、收回权限(注意是FROM不是TO)
使用REVOKE 权限1,权限2 ON database名称.表名 FROM '用户名'@'host';

mysql> revoke select on dbtest1.test1 from 'test001'@'localhost';
Query OK, 0 rows affected (0.00 sec)

重新登陆后,发现权限已失效

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| performance_schema |
+--------------------+
2 rows in set (0.00 sec)

mysql>
mysql> show grants;
+---------------------------------------------+
| Grants for test001@localhost                |
+---------------------------------------------+
| GRANT USAGE ON *.* TO `test001`@`localhost` |
+---------------------------------------------+
1 row in set (0.00 sec)

mysql>
mysql> SELECT CURRENT_USER;
+-------------------+
| CURRENT_USER      |
+-------------------+
| test001@localhost |
+-------------------+
1 row in set (0.00 sec)

mysql>

如果回收某个用户所有表下的所有的权限,那么可以使用
REVOKE all privileges ON *.* FROM '用户名'@'host';

6、业务开发
实际业务开发时,访问数据库不应该使用root用户,可以单独创建一个业务账号,进行相应授权
防止root密码泄露之后,数据库处于一个危险状态

7、权限表(根据联合主键确定数据的唯一性)

  • user表:关键字段user、host、authentication_string(密码),决定用户能否正常登录
    在这里插入图片描述
  • db表:记录用户对某个database拥有的权限信息
    在这里插入图片描述
  • tables_priv:记录用户对某个表拥有的权限信息
    在这里插入图片描述
  • columns_priv:记录用户对某个字段拥有的权限信息
    在这里插入图片描述
  • procs_priv:记录用户对某个存储过程和函数拥有的权限信息
    在这里插入图片描述

在MySQL启动时,服务器将这些表中的权限信息内容读入内存

8、MySQL访问控制

  • 连接核实阶段:将当前用户信息和user表中的user、host、authentication_string(密码)进行匹配,决定用户能否正常登录
  • 请求核实阶段:从user表到db表,然后一层一层向下检查当前用户的权限,确定是否满足当前请求所需权限,如果找到匹配结果,操作被允许,否则就就返回错误信息

四、角色管理

1、在MySQL中,角色是权限的集合,引入角色之后,方便管理权限相同的用户

2、创建角色

mysql> create user 'test002' identified by 'test002Pwd';
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> create role 'manager'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT select,update on dbtest1.* to 'manager'@'%';
Query OK, 0 rows affected (0.01 sec)

mysql>
mysql> show grants for 'manager'@'%';
+------------------------------------------------------+
| Grants for manager@%                                 |
+------------------------------------------------------+
| GRANT USAGE ON *.* TO `manager`@`%`                  |
| GRANT SELECT, UPDATE ON `dbtest1`.* TO `manager`@`%` |
+------------------------------------------------------+
2 rows in set (0.00 sec)

mysql> revoke update on dbtest1.* from 'manager'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> show grants for 'manager'@'%';
+----------------------------------------------+
| Grants for manager@%                         |
+----------------------------------------------+
| GRANT USAGE ON *.* TO `manager`@`%`          |
| GRANT SELECT ON `dbtest1`.* TO `manager`@`%` |
+----------------------------------------------+
2 rows in set (0.00 sec)

mysql>

上面我们测试了一下创建角色、赋予权限、查询角色权限和回收权限

同理,我们也可以使用下面的语句,将角色与所有权限进行绑定和解绑
GRANT all privileges on *.* to 'manager'@'%';
REVOKE all privileges on *.* FROM 'manager'@'%';

删除角色使用DROP ROLE '用户名'@'host';

mysql> create role 'employee'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> show grants for 'employee'@'%';
+--------------------------------------+
| Grants for employee@%                |
+--------------------------------------+
| GRANT USAGE ON *.* TO `employee`@`%` |
+--------------------------------------+
1 row in set (0.00 sec)

mysql> drop role 'employee'@'%';
Query OK, 0 rows affected (0.01 sec)

mysql>
mysql> show grants for 'employee'@'%';
ERROR 1141 (42000): There is no such grant defined for user 'employee' on host '%'
mysql>

3、给用户和角色进行绑定

mysql> create user 'test002' identified by 'test002Pwd';
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> show grants for 'test002'@'%';
+-------------------------------------+
| Grants for test002@%                |
+-------------------------------------+
| GRANT USAGE ON *.* TO `test002`@`%` |
+-------------------------------------+
1 row in set (0.00 sec)

mysql>
mysql>
mysql> grant 'manager'@'%' to 'test002'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> show grants for 'test002'@'%';
+--------------------------------------+
| Grants for test002@%                 |
+--------------------------------------+
| GRANT USAGE ON *.* TO `test002`@`%`  |
| GRANT `manager`@`%` TO `test002`@`%` |
+--------------------------------------+
2 rows in set (0.00 sec)

mysql>

4、激活角色
注意:用户绑定之后还需要激活角色,权限才能生效

  • 方式一:使用set default role激活

执行前使用select CURRENT_ROLE();查询当前用户的角色信息

mysql> select CURRENT_ROLE();
+----------------+
| CURRENT_ROLE() |
+----------------+
| NONE           |
+----------------+
1 row in set (0.00 sec)

mysql>
mysql> set default role 'manager'@'%' to 'test002'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql>

执行完成之后,用户重新登录,发现已拥有manager角色的权限

mysql> select CURRENT_ROLE();
+----------------+
| CURRENT_ROLE() |
+----------------+
| `manager`@`%`  |
+----------------+
1 row in set (0.00 sec)

mysql> select * from dbtest1.test1;
+------+--------+
| id   | name   |
+------+--------+
|    2 | 十年   |
+------+--------+
1 row in set (0.00 sec)

mysql>
  • 方式二:修改系统变量(设置到配置文件里也可以)
    这样一来,后续再进行角色绑定,就不用手动激活了,只需要重新登录即可
mysql> show variables like 'activate_all_roles_on_login';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| activate_all_roles_on_login | OFF   |
+-----------------------------+-------+
1 row in set (0.00 sec)

mysql>
mysql> SET global activate_all_roles_on_login=ON;
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> show variables like 'activate_all_roles_on_login';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| activate_all_roles_on_login | ON    |
+-----------------------------+-------+
1 row in set (0.01 sec)

mysql>

5、撤销用户角色
使用revoke '角色'@'host' from '用户'@'host';

mysql> revoke 'manager'@'%' from 'test002'@'%';
Query OK, 0 rows affected (0.01 sec)

mysql>

这样一来,test002的角色就被撤销了
在这里插入图片描述

如有错误,欢迎指正!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/760467.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用evo工具比较ORB-SLAM3的运行轨迹(从安装到解决报错)

ORB-SLAM2和ORB-SLAM3怎么跑出来,之前都有相关的保姆级的教程,下来给大家介绍一款evo工具,给科研加速!!! 文章目录 1.下载evo2.生成轨迹3.evo别的功能使用 1.下载evo 输入命令下载 pip install -i https…

你真的会udf提权???数据库权限到系统权限 内网学习 mysql的udf提权操作 ??msf你会用了吗???

我们在已经取得了数据库的账号密码过后,我们要进一步进行提取的操作,我们mysql有4钟提权的操作。 udf提权(最常用的)mof提权启动项提权反弹shell提权操作 怎么获取密码操作: 怎么获取密码,通过sql注入获取这个大家都应该知道了&a…

百强韧劲,进击新局 2023年度中国医药工业百强系列榜单发布

2024年,经济工作坚持稳中求进、以进促稳、先立后破等工作要求。医药健康行业以不懈进取的“韧劲”,立身破局,迎变启新。通过创新和迭代应对不确定性,进化韧性力量,坚持高质量发展,把握新时代经济和社会给予…

零基础开始学习鸿蒙开发-读书app简单的设计与开发

目录 1.首页设计 2.发现页面的设计 3.设置页面的设计 4.导航页设计 5.总结: 6.最终的效果 1.首页设计 Entry Component export struct home {State message: string 首页build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.B…

基于线调频小波变换的非平稳信号分析方法(MATLAB)

信号处理领域学者为了改进小波变换在各时频区间能量聚集性不高的缺点,有学者在小波分析基础上引入调频算子构成了线性调频小波变换,线调频小波一方面继承了小波变换的理论完善性,另一方面用一个新的参数(线调频参数)刻…

构建高效业财一体化管理体系

构建高效业财一体化管理体系 业财一体化战略意义 提升决策质量 强化数据支撑:通过整合业务与财务数据,为决策提供准确、实时的信息基础,确保分析的深度与广度。促进业务与财务协同:打破信息孤岛,实现业务流程与财务管…

Django 定义模型执行迁移

1,创建应用 Test/app8 python manage.py startapp app8 2,注册应用 Test/Test/settings.py 3,配置路由 Test/Test/urls.py from django.contrib import admin from django.urls import path, includeurlpatterns [path(app8/, include(a…

Linux服务器上安装CUDA11.2和对应的cuDNN 8.4.0

一、检查 检查本机是否有CUDA工具包,输入nvcc -V: 如图所示,服务器上有CUDA,但版本为9.1.85,版本过低,因此博主要重装一个新的。 二、安装CUDA 1.查看服务器最高支持的CUDA版本 在命令行输入nvidia-smi查看显卡驱动…

Mining Engineering First Aid Riding

4个最主要的日常技能:Mining 采矿 Engineering 工程 First Aid 急救 Riding 骑术 4个最主要的日常技能

C# 信号量的使用

学习来源:《.net core 底层入门》 第六章第9节:信号量 案例:主线程负责添加数据,子线程负责获取数据 使用SemaphoreSlim(轻信号量)实现: using System; using System.Collections.Generic; us…

AI写作变现指南:从项目启动到精通

项目启动 1. 确定目标客户群体 首先,明确谁是我们的目标客户。以下是一些潜在的客户群体: 大学生:他们需要写论文、报告、演讲稿等。 职场人士:包括需要撰写商业计划书、市场分析报告、项目提案等的专业人士。 自媒体从业者&…

TiDB-从0到1-BR工具

TiDB从0到1系列 TiDB-从0到1-体系结构TiDB-从0到1-分布式存储TiDB-从0到1-分布式事务TiDB-从0到1-MVCCTiDB-从0到1-部署篇TiDB-从0到1-配置篇TiDB-从0到1-集群扩缩容 一、BR工具 BR工具全称backup & restore,如同MySQL可以通过mysqldump和xtrabackup进行备份…

入门JavaWeb之 JDBC 连接数据库

JDBC:Java Database Connectivity,Java 数据库连接 需要 jar 包支持: java.sql javax.sql mysql-connector-java(连接驱动,必须导入) 在 MySQL 先建个 jdbc 数据库后 USE jdbc; 执行后再 CREATE TABLE…

Java_日志

日志技术 可以将系统执行的信息,方便的记录到指定的位置(控制台、文件中、数据库中) 可以随时以开关的形式控制日志启停,无需侵入到源代码中去进行修改。 日志技术的体系结构 日志框架:JUL、Log4j、Logback、其他实现。 日志接口&#xf…

youlai-boot项目的学习(3) 本地redis、MinIO的安装与配置

youlai-boot项目除了使用mysql数据库、还有redis,以及OSS服务,OSS除了云OSS服务,还有自部署的MinIO服务。 前面我们已经安装好了mysql数据库,那么我们来看看本地redis、MinIO服务怎么部署 环境 mac OS, iterm2&#…

线性结构之栈结构

栈是一种只能从一端存取数据并且遵循“后进先出”原则的线性存储结构。这句话中体现了栈结构的三个特征——只能从一端存取数据,遵循“后进先出”的原则和线性存储结构。因此如果我们要实现一个栈结构的数据结构,就必须要满足这三点要求。提到线性结构&a…

产品经理系列1—如何实现一个电商系统

具体笔记如下,主要按获客—找货—下单—售后四个部分进行模块拆解

ubuntu 系统中 使用docker 制作 Windows 系统,从此告别 vmware虚拟机

我的系统是 ubuntu 24 前期准备工作: 安装dockerdocker pull 或者 手动制作镜像 docker build 的话 必须要 科学上网, 好像阿里镜像都下不下来。需要 知道 docker 和docker compose 命令的使用方式 我是给docker 挂了 http代理 如果你能pull下来镜像 …

大家都在跳槽,我需要跳槽吗?

文章目录 1. 前言2. 最初的跳槽想法萌芽3. 跳槽想法的再次萌芽4. 我是否需要跳槽呢?5. 那些跳槽的同学怎么样了?6. 小结 1. 前言 两周前,看到研究生同班同学发的一条朋友圈,内容为”下一站 杭州~”,配图是拍的北京开往杭州的列车…

同步的问题及解决方案

同步 同步的问题 当给狗狗食物的同时,狗狗又在吃,这会导致在运行过程中会出现食物的数据的错乱,有时候会多出数据,有时候会少出数据,这就让狗狗有时候会很吃亏,那么该如何解决呢? 实验体现 pa…