[玩转Linux] [Docker] MySQL安装和配置
简介
不建议在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安装和配置相关推荐
- Linux系统Mysql安装与配置
安装环境 系统 centos 7.9 myslq版本 community 5.7.38 安装步骤 1. 查看并卸载系统中是否自带mysql [root@localhost ~]# rpm -qa|gr ...
- Linux环境——MySQL安装及配置(5.7版本)
数据库安装包下载地址:https://dev.mysql.com/downloads/mysql/ 选择适合自己的版本,我的环境是Linux Red Hat Enterprlse Linux (64 ...
- Linux环境——MySQL安装及配置(8.0版本)
虚拟机环境是Linux Red Hat Enterprlse Linux (64位),本次安装的是Mysql 8.0版本. 由于有经验了,所以又弄了台虚拟机练手,承接上一篇博客(https://ww ...
- 企业版mysql安装教程linux,linux上mysql安装详细教程
所有平台的MySQL下载地址为: MySQL 下载. 挑选你需要的 MySQL Community Server 版本及对应的平台. MySQL - MySQL服务器.你需要该选项,除非你只想连接运行 ...
- Linux——MySQL安装及配置环境变量
Linux--MySQL安装及配置环境变量 1.安装包准备: 2.在虚拟机查询主机IP: 3.运行Xftp,新建一个会话,命名为MySQL安装: 4.新建一个会话,命名为MySQL安装: 5.把安装包 ...
- 图解MySQL在Linux下的安装与配置
MySQL简介 MySQL是最流行的RDBMS(Relational Database Management System:关系数据库管理系统)之一,被广泛地应用在互联网上的中小型网站中.关联数据库将 ...
- LAMP-架构环境网站搭建;在Apache Web服务器上部署PHPBB3网站详细步骤;Linux+Apache2+PHP+MySQL 安装和配置
在Apache Web服务器上部署PHPBB3网站 LAMP-架构环境网站搭建;在Apache Web服务器上部署PHPBB3网站详细步骤:Linux+Apache2+PHP+MySQL 安装和配置 ...
- centos6.5 php5.2,Linux中PHP安装与配置(CentOS-6.5:php-5.2.13)
1 PHP简介 PHP(PHP: Hypertext Preprocessor的缩写,中文名:"超文本预处理器")是一种通用开源脚本语言.语法吸收了C语言.Java和Per ...
- linux 下mysql的管理,Linux下 MySQL安装和基本管理
•安装linux一些必须的包: 1.yum install gcc gcc-c++ gcc-g77 autoconf automake zlib* fiex* libxml* ncurses-deve ...
最新文章
- linux传文件到xp,Linux与Windows XP之间使用FTP互传文件
- 华大 MCU 之六 SEGGER Embedded Studio 及 Ozone 使用 Jlink 调试
- mysql 列 随机数_mysql mmp 某字段插入随机数!(说不定那天就忘记了,存下来再说)...
- java代码题目_java题目代码?
- Python合并Excel2007+中多个WorkSheet
- 8.11 NOIP模拟测试17 入阵曲+将军令+星空
- Vue之webpack之vue
- html网站 放新闻 文件夹名字 是什么,服务器上传网页文件时应注意哪几点?
- 基于E4A的手机蓝牙串口助手app制作
- html-菜鸟--书架仿饿了么首页—Html学习(1)
- gds文件 导出_GaussDB 200使用GDS服务导入导出数据
- 使用Blender导出多个动画的GLTF模型
- 场景识别帮助小白用户实现一键式智能拍照修图
- Oracle数据库cmd登陆
- 又一篇Android Recovery的文章
- 助你掌握搜索神器,10个实用的Elasticsearch查询技巧
- 样本均值,顺序统计量,样本中位数, 样本方差,样本标准差,直方图,核密度估计曲线,经验分布函数图,箱形图;matlab实现
- 目前绝大多数处理语言先验性文章总结
- 自相关与互相关的理解与物理意义
- 【前端面试】39道Vue高频面试题,亲测有效!!!快来看看呀!!