• docker搭建mysql


    shell脚本

    /usr/local/docker/mysql/conf/start.sh

    #!/bin/bash
    cur_dir=`pwd`
    docker stop mysql_5_7
    docker rm mysql_5_7
    docker run -p 3307:3306 --name mysql_5_7 -v /usr/local/docker/mysql/conf:/etc/mysql -v /usr/local/docker/mysql/logs:/var/log/mysql -v /usr/local/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e TZ="Asia/Shanghai" -d mysql:5.7

    编码配置

    /usr/local/docker/mysql/conf/my.cnf

    [mysqld]
    character-set-server=utf8mb4
    
    [client]
    default-character-set=utf8mb4
    
    [mysql]
    default-character-set=utf8mb4

    远程连接mysql

    • 首先确认是否是用户权限问题导致,如果是则按以下方式修改登录用户权限
      docker exec -it mysql_5_7 bash
      mysql -uroot -p
      use mysql 
      grant all privileges on *.* to root@'%' identified by "password";
      flush privileges;
    • 如果以上修改后还无法连接,可能是主机路由转发功能未开启 Linux默认是禁止路由转发功能

      路由转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将数据包发往本机另一块网卡,该网卡根据路由表继续发送数据包。这通常是路由器所要实现的功能。

      vim /etc/sysctl.conf
      添加一行配置:net.ipv4.ip_forward=1
      service network restart
      
    
    # docker部署mysql连接延时严重的问题
    > 由于MySQL是使用Docker容器搭建起来的,突然发现比平时的连接速度变慢了很多,每次连接大概延迟了10秒左右。进入容器内部连接MySQL,秒连
    - 原因:
        原因是由于mysql对连接的客户端进行DNS反向解析。
    - 解决:
    1,把client的ip写在mysql服务器的/etc/hosts文件里,随便给个名字就可以了。
    2,在 my.cnf 中加入 –skip-name-resolve 。
    对于第一种方法比较笨,也不实用,那么 skip-name-resolve 选项可以禁用dns解析,但是,这样不能在mysql的授权表中使用主机名了,只能使用IP。
    我理解mysql是这样来处理客户端解析过程的,
    1,当mysql的client连过来的时候,服务器会主动去查client的域名。
    2,首先查找 /etc/hosts 文件,搜索域名和IP的对应关系。
    3,如果hosts文件没有,则查找DNS设置,如果没有设置DNS服务器,会立刻返回失败,就相当于mysql设置了skip-name-resolve参数,如果设置了DNS服务器,就进行反向解析,直到timeout。
    
    
    
    所谓反向解析是这样的:
    mysql接收到连接请求后,获得的是客户端的ip,为了更好的匹配mysql.user里的权限记录(某些是用hostname定义的)。
    如果mysql服务器设置了dns服务器,并且客户端ip在dns上并没有相应的hostname,那么这个过程很慢,导致连接等待。
    
    
    添加skip-name-resolve以后就跳过着一个过程了。
  • 相关阅读:
    #什么是spring#
    spark sql 判断一列是否包含某字符
    win10 安装微软商店
    python获取一段时间的日期
    css 网格
    css 网格属性总结
    css flex容器属性总结
    CSS Flexbox
    响应式Web设计
    css 伪类选择器
  • 原文地址:https://www.cnblogs.com/dqh123/p/13225461.html
Copyright © 2020-2023  润新知