当前位置: 首页 > article >正文

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

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

镜像下载

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

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

  1. 启动 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=你自己的密码

  1. 使用docker ps来看一下启动结果
  2. 使用docker logs -f mysql 来看下启动成功否来打印日志

本机使用Navicat /SqlLog/Dbeaver等数据库管理工具连接数据库

  1. 首先检查自己服务器的防火墙有没有开,如果开了请关闭防火墙
  • 第一种是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  #没开防火墙开开
  1. 将 docker0 接口添加到 public 区域
firewall-cmd --permanent --zone=public --change-interface=docker0
  1. 重新加载防火墙配置:
firewall-cmd --reload
  1. 验证接口是否已移动到 public 区域:
firewall-cmd --get-active-zones

输出应包含:

public
  interfaces: docker0
  1. 让防火墙放行3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
  1. 验证 3306 端口是否在 public 区域:
firewall-cmd --zone=public --list-ports   #如果在输出应包含3306
  1. 防火墙规则输出:
firewall-cmd --list-all

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

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

结果:

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

  1. 第一种方法:(适合已经运行了很久的数据库)
    可以在 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';
  1. 第二种方法:(适合新装数据库)
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的一些踩过的坑


http://www.kler.cn/a/555559.html

相关文章:

  • 全单模矩阵及其在分支定价算法中的应用
  • 【C++第二十章】红黑树
  • Unity 聊天气泡根据文本内容适配
  • 深度学习-2.机械学习基础
  • 影刀RPA中级证书-Excel进阶-开票清单
  • 2025最新智能优化算法:鲸鱼迁徙算法(Whale Migration Algorithm,WMA)求解23个经典函数测试集,MATLAB
  • 访问者模式 Visitor Pattern
  • Elasticsearch 数据建模:从原理到实战的降维打击指南
  • MySQL Binlog 监听:Canal + Spring Boot 实战指南
  • 【分布式理论14】分布式数据库存储:分表分库、主从复制与数据扩容策略
  • 网络协议相关知识有哪些?
  • 一次交换机故障导致的云平台(opensatck+ceph)不可用的记录
  • Compose 定制UI视图
  • Netty入门详解
  • pyside6学习专栏(二):程序图像资源的加载方式
  • 庙算兵棋推演AI开发初探(5-数据处理)
  • 阿里云子账号管理ECS权限配置全指南
  • Canvas进阶-2、可视化应用
  • C# 中关于补位的写法 PadLeft,PadRight 函数
  • 猎板PCB百科——键盘PCB