一个计算机技术爱好者与学习者

0%

好好学MySQL:使用Docker安装配置MySQL

1. 前言

本文中,我们学习使用Docker安装配置MySQL的方法。

相关文档:

2. 安装配置MySQL

2.1. 安装MySQL5.7.x

1、登录dockerhub查看需要的mysql版本

2、下载mysql镜像(以mysql5.7.28为例)

1
docker pull mysql:5.7.28

3、准备mysql配置

1
2
3
4
docker run --name tmp-mysql -d -e MYSQL_ROOT_PASSWORD=voidking mysql:5.7.28
mkdir -p /opt/mysql/conf.d
docker cp tmp-mysql:/etc/mysql/conf.d/. /opt/mysql/conf.d
docker rm tmp-mysql -f

4、启动mysql服务

1
2
3
4
5
6
docker run --name vk-mysql -d \
-p 3306:3306 \
-v /opt/data/mysql:/var/lib/mysql \
-v /opt/mysql/conf.d:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=voidking \
mysql:5.7.28

以上命令:

  • 命名容器为vk-mysql,后台运行
  • 映射宿主机3306端口到容器3306端口
  • 映射宿主机 /opt/data/mysql 目录到容器 /var/lib/mysql ,用于持久化mysql数据库数据
  • 映射宿主机 /opt/mysql/conf.d 目录到容器 /etc/mysql/conf.d ,用户持久化mysql配置
  • 设置数据库密码为voidking

更多启动参数参考How to use this image
其中有一个 MYSQL_ROOT_HOST 也是一个常用参数,设置为 % 表示允许所有客户端连接,但是经验证不添加也可以。

PS:mysql启动脚本路径为 /usr/local/bin/docker-entrypoint.sh

5、验证安装

1
2
docker ps
docker logs vk-mysql

2.2. MySQL5.7.x 配置文件说明

2.2.1. 默认配置文件路径

  • 配置文件路径为 /etc/mysql/my.cnf
  • 配置文件会先后引用 /etc/mysql/conf.d//etc/mysql/mysql.conf.d 目录中的以cnf结尾的配置文件
  • /etc/mysql/conf.d/ 目录中包含 docker.cnf、mysql.cnf、mysqldump.cnf
  • /etc/mysql/mysql.conf.d 目录中包含 mysqld.cnf

2.2.2. 默认配置内容

my.cnf

1
2
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

docker.cnf

1
2
3
[mysqld]
skip-host-cache
skip-name-resolve

mysql.cnf

1
[mysql]

mysqldump.cnf

1
2
3
4
[mysqldump]
quick
quote-names
max_allowed_packet = 16M

mysqld.cnf

1
2
3
4
5
6
7
8
9
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
#log-error = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

2.2.3. 自定义配置文件

示例:custom.cnf

1
2
3
[mysqld]
general_log_file=/var/log/mysql/mysql.log
general_log = 1

上面的配置,会开启sql日志。

更多配置参考文档Server System Variables

2.3. 安装MySQL8.0.x

1、登录dockerhub查看需要的mysql版本

2、下载mysql镜像(以mysql8.0.28为例)

1
docker pull mysql:8.0.28

3、准备mysql配置

1
2
3
4
docker run --name tmp-mysql -d -e MYSQL_ROOT_PASSWORD=voidking mysql:8.0.28
mkdir -p /opt/mysql/conf.d
docker cp tmp-mysql:/etc/mysql/conf.d/. /opt/mysql/conf.d
docker rm tmp-mysql -f

4、启动mysql服务

1
2
3
4
5
6
7
8
docker run --name vk-mysql -d \
-p 3306:3306 \
-v /opt/mysql/data:/var/lib/mysql \
-v /opt/mysql/mysql-files:/var/lib/mysql-files \
-v /opt/mysql/conf.d:/etc/mysql/conf.d \
-v /opt/mysql/log:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=voidking \
mysql:8.0.28

以上命令:

  • 命名容器为vk-mysql,后台运行
  • 映射宿主机3306端口到容器3306端口
  • 映射宿主机 /opt/data/mysql 目录到容器 /var/lib/mysql ,用于持久化mysql数据库数据
  • 映射宿主机 /opt/mysql/mysql-files 目录到容器 /var/lib/mysql-files ,用于导出导入mysql文件数据(secure_file_priv)
  • 映射宿主机 /opt/mysql/conf.d 目录到容器 /etc/mysql/conf.d ,用户持久化mysql配置
  • 映射宿主机 /opt/mysql/log 目录到容器 /var/log/mysql ,用户持久化mysql日志
  • 设置数据库密码为voidking

更多启动参数参考How to use this image
其中有一个 MYSQL_ROOT_HOST 也是一个常用参数,设置为 % 表示允许所有客户端连接,但是经验证不添加也可以。

PS:mysql启动脚本路径为 /usr/local/bin/docker-entrypoint.sh

5、验证安装

1
2
docker ps
docker logs vk-mysql

2.4. MySQL8.0.x 配置文件说明

2.4.1. 默认配置文件路径

  • 配置文件路径为 /etc/mysql/my.cnf
  • 配置文件会引用 /etc/mysql/conf.d/ 目录中的以cnf结尾配置文件
  • /etc/mysql/conf.d/ 目录中包含 docker.cnf、mysql.cnf

2.4.2. 默认配置内容

my.cnf

1
2
3
4
5
6
7
8
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL

# Custom config should go here
!includedir /etc/mysql/conf.d/

docker.cnf

1
2
3
[mysqld]
skip-host-cache
skip-name-resolve

mysql.cnf

1
[mysql]

2.4.3. 自定义配置文件

示例:custom.cnf

1
2
3
[mysqld]
general_log_file=/var/log/mysql/mysql.log
general_log = 1

上面的配置,会开启sql日志。

更多配置参考文档Server System Variables

3. 测试访问MySQL

3.1. 容器内访问MySQL

1
2
docker exec -it vk-mysql /bin/bash
mysql -uroot -p

3.2. 其他容器访问MySQL

1、启动mysql client

1
2
3
4
5
6
7
8
9
10
docker run --name mysql-client -d \
-v /data/mysql-client:/data/mysql-client
-e MYSQL_ROOT_PASSWORD=mysql123 \
mysql:5.7.28

# or
docker run --name mysql-client -d \
-v /data/mysql-client:/data/mysql-client
-e MYSQL_ROOT_PASSWORD=mysql123 \
mysql:8.0.28

2、使用mysql client访问mysql
已知docker宿主机IP为192.168.56.130。

1
2
docker exec -it mysql-client /bin/bash
mysql -h 192.168.56.130 -P 3306 -u root -p

3.3. 宿主机上访问MySQL

centos7上访问mysql server5.7.x

1
2
yum install -y mariadb.x86_64 mariadb-libs.x86_64
mysql -h 127.0.0.1 -uroot -p

centos7上访问mysql server8.0.x

1
2
3
4
5
6
7
8
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
curl -L https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 -o /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
rpm -ivh mysql80-community-release-el7-3.noarch.rpm # 安装repo源
yum makecache
yum list | grep mysql
yum list mysql-community-client --showduplicates | sort -r
yum install mysql-community-client-8.0.28-1.el7.x86_64 --setopt=protected_multilib=false

ubuntu18上访问mysql server5.7.x

1
2
3
#apt install mysql-client-core-8.0
apt install mysql-client-core-5.7
mysql -h 127.0.0.1 -uroot -p

4. 开放访问

1、开放端口

1
2
3
4
5
6
7
8
# centos
firewall-cmd --add-port=3306/tcp --permanent
systemctl reload firewalld
# 或者
systemctl stop firewalld

# ubuntu18
ufw allow 3306

2、安装mysql-client,方法同上

3、访问mysql-server
已知docker宿主机IP为192.168.56.130。

1
mysql -h 192.168.56.130 -P 3306 -u root -p

输入密码,即可连接到vk-mysql容器服务。

  • 本文作者: 好好学习的郝
  • 原文链接: https://www.voidking.com/dev-docker-mysql/
  • 版权声明: 本文采用 BY-NC-SA 许可协议,转载请注明出处!源站会即时更新知识点并修正错误,欢迎访问~
  • 微信公众号同步更新,欢迎关注~