简介

不建议在docker里运行MySQL数据库软件,仅当测试或数据重要性不高时使用。生产环境推荐安装到KVM

方法 / 步骤

一:安装MySQL

# 查看docker版本
docker -v
--------------------------------------------
[root@bogon /]# docker -v
Docker version 1.13.1, build 7d71120/1.13.1
--------------------------------------------

1.1 搜索查看可用的MySQL

docker search mysql

1.2 拉取MySQL镜像

# 指定版本
docker pull mysql:5.7
#最新mysql:8.0.29 版本
docker pull mysql:8.0.29

1.3 查看本地镜像

docker images
--------------------------------------------------------------------------------------------
[root@bogon /]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/mysql     5.7                 efa50097efbd        7 days ago          462 MB
--------------------------------------------------------------------------------------------

1.4运行容器

默认端口号 3307
注意docker 参数应该排在MySQL参数之前


# MySQL5.7
docker run \
-p 3307:3306 \
--privileged=true \
--restart=always \
--name mysql3307 \
-v /docker/mysql3307/conf:/etc/mysql/conf.d \
-v/docker/mysql3307/logs:/logs \
-v/docker/mysql3307/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=useradmin \
-d mysql:5.7# MySQL8 (默认密码是123456)
docker run \
-p 3307:3306 \
--privileged=true \
--restart=always \
--name mysql3307 \
-v /docker/mysql3307/conf:/etc/mysql/conf.d \
-v/docker/mysql3307/logs:/logs \
-v/docker/mysql3307/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:8.0.29
  • 运行成功

二: 修改Docker (MySQL)相关配置

找到容器的配置目录

笔者的配置目录/docker/mysql3307/conf
编辑 my.cnf 文件如果没有就创建一个
cd /docker/mysql3306/conf/
vi my.cnf

  • 默认配置文件(默认开启binlog)
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd# 跳过DNS 主机名解析
skip-name-resolve
#开启binlog
log-bin = mysql-bin
#选择row模式
binlog-format = ROW
#配置mysql replication需要定义,不能和canal的slaveId重复
server_id = 1
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid#
# include all files from the config directory
#
!includedir /etc/my.cnf.d#数据库默认字符集
character-set-server = utf8mb4#数据库字符集对应一些排序等规则,注意要和character-set-server对应
collation-server = utf8mb4_general_ci#设置client连接mysql时的字符集,防止乱码
init_connect= 'SET NAMES utf8mb4'
​
#是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names = 1
# 开启该选项 root账号可以免密码登录(一般为注释)
# skip-grant-tables# 5.7 以上版本 开启以下配置(去掉:ONLY_FULL_GROUP_BY)  否则 使用之前group by 函数会报错
# sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
# 8.0+版本去掉 NO_AUTO_CREATE_USER (不支持)
# sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
  • 重启容器
# 注意这里权限太高会导致运行忽略
sudo chmod 644 /docker/mysql3306/conf/my.cnfdocker restart [目标容器id]# 查看MySQL是否开启binlog 如果显示OFF则代表未开启
show variables like 'log_bin';

三: 相关问题解决

3.1 安装之后外网登录不上

# 在配置文件my.cnf中放开下面的注释,(免密码登录)
# skip-grant-tables# 进入容器
docker exec -it [容器名称] /bin/bash# 查找root的配置信息
select host from user where user='root';
# 更新root账号host字段为% 然后退出update user set host = '%' where user ='root';
# 在配置文件把跳过免密码登录关闭(注释) 然后重启

3.2 重新设置root密码

# 启动命令行更新密码为 123456
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# 或者下面命令行(适用于root主机没有限制情况下)
#ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';# 刷新权限
flush privileges;

四:其他相关资料

4.1 docker命令

# 查看docker 容器日志,
docker logs ${id}# 进入容器命令
docker exec -it [容器名称] /bin/bash#  一、查看容器,复制容器id 即container id
docker ps -a
# 二、停止容器
docker stop 你的容器id
# 三、重启容器
docker restart 你的容器id#三、删除容器
docker rm 容器id
#四、查看镜像,复制镜像id即images id
docker images
#五。删除镜像
docker rmi 镜像id

4.2 通用配置文件 - 参考

[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=/usr/local/mysql
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql/mysqldb
# 允许最大连接数
max_connections=1000
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=100
# 服务端使用的字符集默认为UTF8
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
#是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names = 1
#MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭
#MySQL默认的wait_timeout  值为8个小时, interactive_timeout参数需要同时配置才能生效
interactive_timeout = 1800
wait_timeout = 1800
#Metadata Lock最大时长(秒), 一般用于控制 alter操作的最大时长sine mysql5.6
#执行 DML操作时除了增加innodb事务锁外还增加Metadata Lock,其他alter(DDL)session将阻塞
lock_wait_timeout = 3600
#内部内存临时表的最大值。
#比如大数据量的group by ,order by时可能用到临时表,
#超过了这个值将写入磁盘,系统IO压力增大
tmp_table_size = 64M
max_heap_table_size = 64M
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8mb4

参考资料 & 致谢

[1] docker修改容器配置文件的3种方法总结

[玩转Linux] [Docker] MySQL安装和配置相关推荐

  1. Linux系统Mysql安装与配置

    安装环境 系统 centos 7.9 myslq版本 community 5.7.38 安装步骤 1. 查看并卸载系统中是否自带mysql [root@localhost ~]# rpm -qa|gr ...

  2. Linux环境——MySQL安装及配置(5.7版本)

    数据库安装包下载地址:https://dev.mysql.com/downloads/mysql/ 选择适合自己的版本,我的环境是Linux  Red Hat Enterprlse Linux (64 ...

  3. Linux环境——MySQL安装及配置(8.0版本)

    虚拟机环境是Linux  Red Hat Enterprlse Linux (64位),本次安装的是Mysql 8.0版本. 由于有经验了,所以又弄了台虚拟机练手,承接上一篇博客(https://ww ...

  4. 企业版mysql安装教程linux,linux上mysql安装详细教程

    所有平台的MySQL下载地址为: MySQL 下载. 挑选你需要的 MySQL Community Server 版本及对应的平台. MySQL - MySQL服务器.你需要该选项,除非你只想连接运行 ...

  5. Linux——MySQL安装及配置环境变量

    Linux--MySQL安装及配置环境变量 1.安装包准备: 2.在虚拟机查询主机IP: 3.运行Xftp,新建一个会话,命名为MySQL安装: 4.新建一个会话,命名为MySQL安装: 5.把安装包 ...

  6. 图解MySQL在Linux下的安装与配置

    MySQL简介 MySQL是最流行的RDBMS(Relational Database Management System:关系数据库管理系统)之一,被广泛地应用在互联网上的中小型网站中.关联数据库将 ...

  7. LAMP-架构环境网站搭建;在Apache Web服务器上部署PHPBB3网站详细步骤;Linux+Apache2+PHP+MySQL 安装和配置

    在Apache Web服务器上部署PHPBB3网站 LAMP-架构环境网站搭建;在Apache Web服务器上部署PHPBB3网站详细步骤:Linux+Apache2+PHP+MySQL 安装和配置 ...

  8. centos6.5 php5.2,Linux中PHP安装与配置(CentOS-6.5:php-5.2.13)

    1 PHP简介     PHP(PHP: Hypertext Preprocessor的缩写,中文名:"超文本预处理器")是一种通用开源脚本语言.语法吸收了C语言.Java和Per ...

  9. linux 下mysql的管理,Linux下 MySQL安装和基本管理

    •安装linux一些必须的包: 1.yum install gcc gcc-c++ gcc-g77 autoconf automake zlib* fiex* libxml* ncurses-deve ...

最新文章

  1. linux传文件到xp,Linux与Windows XP之间使用FTP互传文件
  2. 华大 MCU 之六 SEGGER Embedded Studio 及 Ozone 使用 Jlink 调试
  3. mysql 列 随机数_mysql mmp 某字段插入随机数!(说不定那天就忘记了,存下来再说)...
  4. java代码题目_java题目代码?
  5. Python合并Excel2007+中多个WorkSheet
  6. 8.11 NOIP模拟测试17 入阵曲+将军令+星空
  7. Vue之webpack之vue
  8. html网站 放新闻 文件夹名字 是什么,服务器上传网页文件时应注意哪几点?
  9. 基于E4A的手机蓝牙串口助手app制作
  10. html-菜鸟--书架仿饿了么首页—Html学习(1)
  11. gds文件 导出_GaussDB 200使用GDS服务导入导出数据
  12. 使用Blender导出多个动画的GLTF模型
  13. 场景识别帮助小白用户实现一键式智能拍照修图
  14. Oracle数据库cmd登陆
  15. 又一篇Android Recovery的文章
  16. 助你掌握搜索神器,10个实用的Elasticsearch查询技巧
  17. 样本均值,顺序统计量,样本中位数, 样本方差,样本标准差,直方图,核密度估计曲线,经验分布函数图,箱形图;matlab实现
  18. 目前绝大多数处理语言先验性文章总结
  19. 自相关与互相关的理解与物理意义
  20. 【前端面试】39道Vue高频面试题,亲测有效!!!快来看看呀!!

热门文章

  1. 爱上你,是我的劫难(转)
  2. 工程经济学知识点总结
  3. 【收藏】内部优惠券之淘口令使用篇
  4. android vlayout 刷新,vlayout使用说明(一)
  5. jeecg jar下载
  6. OSChina 周三乱弹 ——吸血鬼哪有这么色!
  7. 利用 API 实现数据压缩和解压缩
  8. ifndef和if !defined的使用
  9. 图基础知识:色调、色饱和度、色相
  10. 奈学DDD领域模型驱动设计