云计算百科
云计算领域专业知识百科平台

服务器mysql安装-docker容器化(保姆级教学)

服务器mysql安装-docker容器化(保姆级教学)

镜像下载

  • 基本功,自己下载,后续我会开个文章单独补充下相关链接

在服务器进行mysql安装-启动mysql容器

  • 启动 MySQL 容器并挂载配置文件 使用以下命令启动 MySQL 容器,并将自定义配置文件挂载到容器中:
  • docker run –name mysql -p 3306:3306 –privileged=true \\
    -v /data/mysql/data:/var/lib/mysql \\
    -v /data/mysql/log:/var/log/mysql \\
    -v /etc/localtime:/etc/localtime \\
    -v /data/mysql/my.cnf:/etc/mysql/my.cnf \\
    -e MYSQL_ROOT_PASSWORD=qwe123asd \\
    -d mysql:latest

    注释

    -v 是将你自己的本地文件 映射到容器中 目的是为了让mysql的数据能够持久化在本地,方便后续数据的迁移等,这里:的前半部分是你自己的路径,可以按照自己的需求更改,但是:的后半部分(即:右侧不能够更改) -e MYSQL_ROOT_PASSWORD=你自己的密码

  • 使用docker ps来看一下启动结果
  • 使用docker logs -f mysql 来看下启动成功否来打印日志
  • 本机使用Navicat /SqlLog/Dbeaver等数据库管理工具连接数据库

  • 首先检查自己服务器的防火墙有没有开,如果开了请关闭防火墙
    • 第一种是firewall

    systemctl status firewalld

    如果开了,如图 防火墙开启 请使用systemctl stop firewalld关闭防火墙

    • 第二种是ufw

    ufw status

    请使用systemctl stop ufw关闭防火墙 2. 关闭防火墙后使用Navicat测试能否连接 按照我的docker命令正常是能够连接的 在这里插入图片描述

    如果无法连接比如Can’t connect to MySQL server

    在这里插入图片描述

    • 检查MySQL绑定地址 在容器内修改MySQL配置文件(或挂载宿主机的my.cnf ):

    bind-address = 0.0.0.0 # 允许所有IP连接

    或者直接注释bind-address

    • 验证远程访问权限

    docker exec -it mysql bash #先进入Mysql容器
    mysql -uroot #然后进入数据库,输入上述你的命令
    use mysql;
    select host,user from user; # 看看有没有% | root 权限
    CREATE USER 'root'@'%' IDENTIFIED BY '密码'; #没有就创建
    grant all privileges on *.* to 'root'@'%' with grant option; #赋予root所有权限
    FLUSH PRIVILEGES; #刷新缓存
    exit #退出容器
    systemctl restart mysql #重启容器

    在没有开防火墙的情况下,以上两步定能让你在主机用数据库管理工具连接mysql

    必须要开防火墙,如何使得在主机用数据库管理工具连接mysql

    这里仅用firewall来举例,ufw类似,请根据步骤自行百度即可

    systemctl status firewalld #检查是否开启防火墙
    systemctl start firewalld #没开防火墙开开

  • 将 docker0 接口添加到 public 区域
  • firewall-cmd –permanent –zone=public –change-interface=docker0

  • 重新加载防火墙配置:
  • firewall-cmd –reload

  • 验证接口是否已移动到 public 区域:
  • firewall-cmd –get-active-zones

    输出应包含:

    public
    interfaces: docker0

  • 让防火墙放行3306端口
  • firewall-cmd –zone=public –add-port=3306/tcp –permanent
    firewall-cmd –reload

  • 验证 3306 端口是否在 public 区域:
  • firewall-cmd –zone=public –list-ports #如果在输出应包含3306

  • 防火墙规则输出:
  • firewall-cmd –list-all

    mysql设置表名或列名大小写不敏感

  • 查询 lower_case_table_names 参数 MySQL 的大小写敏感性主要由 lower_case_table_names 参数控制。可以通过以下 SQL 查询其值:
  • SHOW VARIABLES LIKE 'lower_case_table_names';

    结果:

    0:表名和列名大小写敏感(区分大小写)。 1:MySQL 会将所有表名自动转换为小写,并且不区分大小写。 2:表名存储为指定的大小写,但在比较时会自动转换为小写。

  • 第一种方法:(适合已经运行了很久的数据库) 可以在 MySQL 的配置文件(通常是 my.cnf 或 my.ini)中检查 lower_case_table_names 参数的设置:
  • [mysqld]
    lower_case_table_names = 0 # 0区分大小写,1不区分大小写,2存储时区分大小写但比较时不区分

    重启容器 进入 MySQL 客户端,查询 lower_case_table_names 参数:

    docker exec it <mysql_container_id> mysql uroot p
    SHOW VARIABLES LIKE 'lower_case_table_names';

  • 第二种方法:(适合新装数据库)
  • docker stop mysql && docker rm mysql

    重新执行命令

    docker run –name mysql -p 3306:3306 –privileged=true \\
    v /data/mysql/data:/var/lib/mysql \\
    v /data/mysql/log:/var/log/mysql \\
    v /etc/localtime:/etc/localtime \\
    v /data/mysql/my.cnf:/etc/mysql/my.cnf \\
    e MYSQL_ROOT_PASSWORD=qwe123asd \\
    d mysql:latest –lower_case_table_names=1

    上面命令如若不生效,请使用如下命令

    docker run –name mysql -p 3306:3306 –privileged=true \\
    v /data/mysql/data:/var/lib/mysql \\
    v /data/mysql/log:/var/log/mysql \\
    v /etc/localtime:/etc/localtime \\
    v /data/mysql/my.cnf:/etc/mysql/my.cnf \\
    e MYSQL_ROOT_PASSWORD=qwe123asd \\
    e LOWER_CASE_TABLE_NAMES=1 \\
    d mysql:latest

    完毕,后面补充一些关于mysql或者Mariadb的一些踩过的坑

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 服务器mysql安装-docker容器化(保姆级教学)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!