0%

docker安装mysql

docker下安装mysql

  • docker安装mysql

      #1.mysql5.7:不挂载 配置文件、data和日志到宿主机        docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123 mysql:5.7.33 --lower_case_table_names=1
      
      #2.mysql5.7:配置文件、data和日志挂载方式运行容器
      docker run --name mysql5.7 -p 3306:3306 -v /Users/ux/Applications/docker/mysql5.7/data:/var/lib/mysql -v /Users/ux/Applications/docker/mysql5.7/conf:/etc/mysql/conf.d -v /Users/ux/Applications/docker/mysql5.7/logs:/var/log/mysql -e MYSQL_ROOT_PASSWORD=12306 -d mysql5.7:config_v1
      
      ============================================================================================
      
      #1.mysql8:不挂载 配置文件、data和日志到宿主机
      docker run -itd --name mysql8 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123 mysql:8.0.25 --lower_case_table_names=1
      
      #2.mysql8:配置文件、data和日志挂载方式运行容器
      docker run --name mysql8.0 -p 3307:3306 -v /Users/ux/Applications/docker/mysql8/data:/var/lib/mysql -v /Users/ux/Applications/docker/mysql8/conf:/etc/mysql/conf.d -v /Users/ux/Applications/docker/mysql8/logs:/var/log/mysql -e MYSQL_ROOT_PASSWORD=12306 -d mysql8:config_v1
      
      lower_case_table_names=1: 设置不区分大小
    
  • 安装时没设置不区分大小写的补救措施:

      或者在mysql安装后再修改:
      
      1.进入 docker 容器 mysql
          docker exec -it mysql  /bin/bash
      2.配置镜像源安装 VIM
          mv /etc/apt/sources.list /etc/apt/sources.list.bak   ---可缺省的异步
          apt-get update
          apt-get install vim
          
           apt-get update,这个命令的作用是:同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,这样才能获取到最新的软件包。
          等更新完毕以后再敲命令:apt-get install vim命令即可
          
      3.编辑/etc/mysql/mysql.conf.d/mysqld.cnf 文件
          #[mysqld]后添加 
          lower_case_table_names=1
          
      4、重启应用
          
          #容器中执行
          service mysql restart
          
          #或者退出容器直接重启mysql容器
          docker restart mysql
          
          #或者通过docker客户端手动操作
    


    参考链接:https://ld246.com/article/1554211578902

  • 默认字符集修改

      打开终端执行命令:
      docker exec -it mysql  /bin/bash
      进入/etc,执行ls -a 查看有没有my.cnf文件,没有则创建my.cnf:
      
      vim /etc/my.cnf ,输入计算机管理员密码,创建my.cnf文件,并复制
      
      [client]
      default-character-set=utf8
      [mysqld]
      character-set-server=utf8
      
      按下esc按键,输入:wq保存退出即可。
      重启mysql服务,OK。
    
  • MySQL-this is incompatible with sql_mode=only_full_group_by错误解决方案

    一、查看sql_mode的语句如下

      select @@GLOBAL.sql_mode;
    

    二、解决方案一:

      sql语句暂时性修改sql_mode。重启mysql数据库服务之后,ONLY_FULL_GROUP_BY还会出现。
      
      set @@GLOBAL.sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    
     解决方案2.
    
         需修改mysql配置文件,通过手动添加sql_mode的方式强制指定不需要ONLY_FULL_GROUP_BY属性,
         
         my.cnf位于etc文件夹下,vim下光标移到最后,添加如下:
        
         sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION    
    

    https://blog.csdn.net/qq_42175986/article/details/82384160

mysql服务设置远程连接 解决1251 client does not support问题

  • 虽然在mysql容器安装启动时已经设置过密码为123,但是只能在命令行通过123登录,navicat依然无法登陆:

      docker容器初始化时设置密码为123:
      
      docker run -itd --name mysql8 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123 mysql:8.0.25 --lower_case_table_names=1
      
      1.先从docker容器里登录mysql
      
          mysql -u root -p
          
      2.查看用户信息 
      select host,user,plugin,authentication_string from mysql.user; 
      
      注意:host为 % 表示不限制ip   
           localhost表示本机使用    
           plugin非mysql_native_password 则需要修改密码!!!
           
      3.修改用户密码 
      
      ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123'; #更新一下用户的密码 root用户密码为123
      
      4.再次使用navicat即可连接
    

    https://blog.csdn.net/qq_22211217/article/details/80415248

    更改容器自启动

  • 设置开机启动mysql (mysql8为我的mysql容器名)

      docker update mysql8 --restart=always
    
  • 关闭开机启动mysql (mysql8为我的mysql容器名)

      docker update mysql8 --restart=no
    

    基于mysql原有镜像,增加配置文件后的容器,制作新镜像并运行

mysql5.7

  • 1.以commit方式制作新镜像

    1
    docker commit -a "uxawseny" -m "mysql with config" 2c974cde0cac mysql5.7:config_v1
  • 2.将容器中MySQL的3306端口映射到本地的3306端口,挂载宿主机目录到容器目录,并设置登录密码为:123

    1
    docker run --name mysql5.7 -p 3306:3306 -v /Users/ux/Applications/docker/mysql5.7/data:/var/lib/mysql -v /Users/ux/Applications/docker/mysql5.7/conf:/etc/mysql/conf.d -v /Users/ux/Applications/docker/mysql5.7/logs:/var/log/mysql -e MYSQL_ROOT_PASSWORD=123 -d mysql5.7:config_v1

mysql8

  • 1.以commit方式制作新镜像

    1
    docker commit -a "uxawseny" -m "mysql8 with config"6ed746769e85容器id】 mysql8:config_v1
  • 2.将容器中MySQL的3306端口映射到本地的3307端口,挂载宿主机目录到容器目录,并设置登录密码为:123

    1
    docker run --name mysql8.0 -p 3307:3306 -v /Users/ux/Applications/docker/mysql8/data:/var/lib/mysql -v /Users/ux/Applications/docker/mysql8/conf:/etc/mysql/conf.d -v /Users/ux/Applications/docker/mysql8/logs:/var/log/mysql -e MYSQL_ROOT_PASSWORD=123 -d mysql8:config_v1

    cmooit方式不会存储mysql中创建的库数据:

    https://www.jianshu.com/p/530d00f97cbf

更改容器为自动启动

1
docker update --restart=always  [容器名或容器ID]