zoukankan      html  css  js  c++  java
  • 使用EF操作Docker中的Mysql实例

      为啥我会选择mysql呢?因为我的服务器配置较低,而SqlServer在docker中的实例,服务器的运行内存应当保持在2G+,我没有这个条件,它会爆出这样的错误 sqlservr: This program requires a machine with at least 2000 megabytes of memory. 听我朋友说就算你的机器是2G的,也会报这个错误,看了好多网上破解的很是不友好,害怕出更多的问题,所以自然就选择了MySql,(SqlServer吃配置还是很高的)...  

      当然我们首先也应当在docker中安装mysql容器,我们首先可以通过 docker search mysql 来查询关键字的镜像。NAME:镜像仓库源的名称、DESCRIPTION:镜像的描述、OFFICIAL:是否docker官方发布..如果要看实际的version,则就可以去https://hub.docker.com/ 中找找了.

    [root@iZenarrdqnvpc4Z ~]# docker search mysql
    NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    mysql                             MySQL is a widely used, open-source relation…   8995                [OK]                
    mariadb                           MariaDB is a community-developed fork of MyS…   3175                [OK]                
    mysql/mysql-server                Optimized MySQL Server Docker images. Create…   669                                     [OK]
    percona                           Percona Server is a fork of the MySQL relati…   464                 [OK]                
    centos/mysql-57-centos7           MySQL 5.7 SQL database server                   66                                      
    centurylink/mysql                 Image containing mysql. Optimized to be link…   61                                      [OK]
    mysql/mysql-cluster               Experimental MySQL Cluster Docker images. Cr…   59                                      
    deitch/mysql-backup               REPLACED! Please use http://hub.docker.com/r…   41                                      [OK]

    下面直接安装mysql镜像,通过命令 docker pull mysql:latest  ,装了个最新版的..哈哈 喜新厌旧嘛...出现了status就ok了...

    [root@iZenarrdqnvpc4Z ~]# docker pull mysql:latest 
    latest: Pulling from library/mysql
    804555ee0376: Pull complete 
    c53bab458734: Pull complete 
    ca9d72777f90: Pull complete 
    2d7aad6cb96e: Pull complete 
    ...............................
    Digest: sha256:e1b0fd480a11e5c37425a2591b6fbd32af886bfc6d6f404bd362be5e50a2e632
    Status: Downloaded newer image for mysql:latest
    docker.io/library/mysql:latest

    随后创建Mysql挂在目录,用于存放配置、数据、日志文件,随后启动mysql容器并指定刚刚创建的挂在目录,这两行是分开执行的。

    mkdir -p $HOME/mysql/{conf.d,data,logs}
    docker run --name mysql -p 3306:3306 -v $HOME/mysql/data:/var/lib/mysql -v $HOME/mysql/conf.d:/etc/mysql/conf.d -v $HOME/mysql/logs:/logs --privileged=true -e MYSQL_ROOT_PASSWORD=123456 -d mysql

    进入mysql容器。通过root账号登录mysql服务,然后它让你输入密码,这个场景下应该是123456,如果没问题的话就进去了mysql开头的tag中。

    [root@iZenarrdqnvpc4Z ~]# docker exec -it mysql /bin/bash
    root@7b96a24b92c2:/# mysql -u root -p #{123456}
    Enter password: 
    Welcome to the MySQL monitor.  Commands end with ; or g.
    Your MySQL connection id is 14
    Server version: 8.0.18 MySQL Community Server - GPL
    
    Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    mysql> 

    如果想要修改root密码的话,直接把root密码置空随后修改密码。

    # 把root密码置空 
    update user set authentication_string = '' where user = 'root' and host = 'localhost';
    # 修改root密码
    alter user root@'localhost' identified by '你的密码';

    如果你要添加用户给别人用,则可以这么做。

    # 添加用户
    create user dev@'%' identified by '123456';
    # 给用户授权
    grant Alter, Create, Create Temporary Tables, Create User, Create View, Delete, Drop, Event, Index, Insert, Lock Tables, Process, References, Reload, Select, Show Databases, Show View, Trigger, Update on *.* to dev@'%';
    # 刷新权限
    flush privileges; 

    完事之后你就可以通过navticat premium 工具进行远程连接了...

    随后我们创建一个.NET Core工程,添加EF关于MySql的相关包,这里我遇到了一个问题,在我使用 MySql.Data.EntityFrameworkCore 实体移植的时候爆出下面的错误,目前还不知道是什么原因。在.NET Core 3.0+ 有BUG吧。回头我去提交个issues ...

    System.TypeLoadException: Method 'get_Info' in type 'MySql.Data.EntityFrameworkCore.Infraestructure.MySQLOptionsExtension' from assembly 'MySql.Data.EntityFrameworkCore, Version=8.0.18.0, Culture=neutral, 

    所以我使用了 pomelo作为代替它,发现毫无异常。直接code first 开干。

    public class MysqlDbContext : DbContext
        {
            public DbSet<Student> students { get; set; }
            protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
            {
                //base.OnConfiguring(optionsBuilder);
                string sqlConnection = "server=IP;uid=zaranet;pwd=123456;database=MyDemo";
                optionsBuilder.UseMySql(sqlConnection);
            }
            protected override void OnModelCreating(ModelBuilder modelBuilder)
            {
                base.OnModelCreating(modelBuilder);
            }          
        }

    随后直接 Add-Migration Init ,再update..

    PM> Add-Migration Init
    To undo this action, use Remove-Migration.
    PM> update-database Init

    OK,打开navicat 看一下 成功了。

  • 相关阅读:
    QFramework 使用指南 2020(二):下载与版本介绍
    QFramework 使用指南 2020 (一): 概述
    Unity 游戏框架搭建 2018 (二) 单例的模板与最佳实践
    Unity 游戏框架搭建 2018 (一) 架构、框架与 QFramework 简介
    Unity 游戏框架搭建 2017 (二十三) 重构小工具 Platform
    Unity 游戏框架搭建 2017 (二十二) 简易引用计数器
    Unity 游戏框架搭建 2017 (二十一) 使用对象池时的一些细节
    你确定你会写 Dockerfile 吗?
    小白学 Python 爬虫(8):网页基础
    老司机大型车祸现场
  • 原文地址:https://www.cnblogs.com/ZaraNet/p/12152875.html
Copyright © 2011-2022 走看看