[玩转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.cnf

docker 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种方法总结

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Linux系统上安装Docker配置MySQL容器通常涉及以下几个步骤: 1. **安装 Docker**: - 首先,检查你的系统是否已经安装Docker,可以运行`sudo docker run hello-world`来测试。如果没有,访问Docker官网下载适合你系统的安装包,然后按照官方文档进行安装。 2. **添加 Docker GPG密钥和仓库**: ``` sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null ``` 3. **安装 Docker**: ``` sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io ``` 4. **启动并启用 Docker**: ``` sudo systemctl start docker sudo systemctl enable docker ``` 5. **安装 MySQL Docker 镜像**: 在终端中运行以下命令,将MySQL镜像拉取到本地,并启动一个新的MySQL容器。这会创建一个名为`mysql-server`的新数据库实例: ``` sudo docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=mysecretpassword -d mysql:latest ``` 将`mysecretpassword`替换为你想要设置的root用户密码。 6. **验证安装和连接**: 使用以下命令检查MySQL容器是否正在运行,并连接到它: ``` docker exec -it some-mysql bash mysql -u root -p ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OxYGC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值