本地MySQL设置
- 本地开发
nodejs应用时,可以用Docker起MySQL服务,但是在开发阶段不建议将nodejs服务也放在Docker中运行,因为开发阶段可能还有修改数据库结构的需求,这样就需要频繁进入Docker去修改Prisma的migration文件,非常繁琐;建议等到数据库设计确定之后,在前后端联调的时候将nodejs服务放在Docker中运行;
本地Prisma设置
连接MySQL
以NestJS为例,在项目根目录生成的.env文件中设置mysql地址,Prisma就会通过这个地址去连接运行在Docker中的MySQL
DATABASE_URL="mysql://root:888888@localhost:3306/cook-master?connect_timeout=300"
创建迁移
修改Prisma的Model之后,重新生成数据库结构时,可能会提示与之前的数据库结构有冲突,所以需要清空数据库数据(虽然说是测试数据,但是也是自己输进去的,一下子清空之后又要一条一条加很麻烦);这个时候可以按照这个步骤来进行迁移:
-
在项目的根目录下运行以下命令来创建一个新的迁移;替换
<MIGRATION_NAME>为新迁移的名称,例如add-new-field。npx prisma migrate dev --name <MIGRATION_NAME> --preview-feature -
编辑新创建的迁移文件(位于
prisma/migrations/目录下),将up函数中的 SQL 语句修改为更新模型结构的语句。例如,如果你要向表中添加一个新字段,则可以使用以下 SQL 语句;替换<TABLE_NAME>为表的名称,<COLUMN_NAME>为新字段的名称,<DATA_TYPE>为新字段的数据类型。ALTER TABLE <TABLE_NAME> ADD COLUMN <COLUMN_NAME> <DATA_TYPE>; -
保存并关闭迁移文件后,运行以下命令来应用迁移;这样就可以应用新的迁移并更新数据库模式,同时保留数据库中的现有数据。
npx prisma migrate deploy --preview-feature
导出Docker中MySQL中数据的方法:
- 查找正在运行的
MySQL容器的 ID;这样我们就能看到所有正在运行的容器列表,其中应包括MySQL容器的名称和 ID。
- 创建一个
MySQL数据库的数据备份;替换<CONTAINER_ID>为第一步中找到的 MySQL 容器的 ID,<MYSQL_USER>和<MYSQL_PASSWORD>为 MySQL 数据库的用户名和密码,<MYSQL_DATABASE>为要备份的数据库名称。这样就可以将备份保存在运行命令的目录下名为backup.sql的文件中。
docker exec <CONTAINER_ID> /usr/bin/mysqldump -u <MYSQL_USER> --password=<MYSQL_PASSWORD> <MYSQL_DATABASE> > backup.sql
- 或者我们可以使用以下命令,将备份文件指导复制到我们需要使用的本地目录中;替换
<CONTAINER_ID>为 MySQL 容器的 ID,/backup.sql为第二步中备份文件的路径和名称,/path/on/local/machine为本地计算机上要复制到的路径。
docker cp <CONTAINER_ID>:/backup.sql /path/on/local/machine
这样就完成啦!