本篇将介绍如何使用 Docker 部署 MySQL 数据库及远程访问配置
安装 MySQL
拉取镜像
使用下面的命令拉取 MySQL 数据库的镜像:
1
2
3
$
sudo
docker pull mysql
# 拉取最新版本的镜像,当前为 MySQL 8 版本,tag 为 latest
$
sudo
docker pull mysql:5.7
# 指定拉取 MySQL 5.7 版本
也可以使用搜索命令,查找其他的 MySQL 相关镜像,其中有标识 Stars 数,即受欢迎程度。
1
$
sudo
docker search mysql
运行 MySQL
1
2
3
4
5
6
7
$
sudo
docker run -p 3306:3306 \
--name mysql \
-
v
$PWD
/conf
:
/etc/mysql/conf
.d \
-
v
$PWD
/logs
:
/logs
\
-
v
$PWD
/data
:
/var/lib/mysql
\
-e MYSQL_ROOT_PASSWORD=your-password \
-d mysql
容器中的mysql的配置文件:
character-set-server=utf8
lower_case_table_names=1 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION max_connections = 1000 [client] default-character-set=utf8
[mysql] default-character-set=utf8
如果需要屏蔽linux的大小写区分在conf目录中创建文件my.cnf,文件内容如下:
[mysqld]
lower_case_table_names=1
启动创建容器命令:
sudo docker run -p 3306:3306 --name mysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 -d mysql5.7
命令说明:
- -p 3306:3306 :将容器的 3306 端口映射到主机的 3306 端口。
- -v $PWD/conf:/etc/mysql/conf.d :将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。
- -v $PWD/logs:/logs :将主机当前目录下的 logs 目录挂载到容器的 /logs。
- -v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。
- -e MYSQL_ROOT_PASSWORD=your-password :初始化 root 用户的密码,建议使用复杂度高的密码。
- -d mysql : 要部署的镜像名,如果是5.7版本的话,这里则为mysql:5.7
docker run --name mysql -p 13306:3306 -e MYSQL_PASSWORD=123 -e MYSQL_DATABASE=demo mysql:8
配置远程访问
远程访问 MySQL 属于基本配置,但是在配置的时候要注意安全性问题,否则将存在安全性隐患,尤其是企业用服务器更要注重安全性。
并且需要注意服务器防火墙要开启 3306 端口,服务器提供商的安全组中也需要开启,否则会无法访问哦。
要配置远程访问,先要打开 MySQL 的控制终端,使用下面的命令开启:
1
2
3
4
5
$
sudo
docker
exec
-it mysql
bash
# 进入 MySQL 容器
$ mysql -uroot -p
# 登录 MySQL,执行后输入密码进入 MySQL
$ use mysql;
# 选择使用 mysql 数据库
MySQL 8 配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE
USER
'username'
@
'%'
IDENTIFIED
BY
'password'
;
# 创建一个账号,用来进行远程访问;
# {usernama} 是远程访问登录的用户名,不建议用 root;
# {
password
} 是远程访问的登录密码;
#
'%'
代表的是所有IP,如果可以尽量设置指定 IP 或 IP 段
GRANT
ALL
ON
*.*
TO
'username'
@
'%'
;
# 赋予所有权限给之前创建的账号
ALTER
USER
'username'
@
'%'
IDENTIFIED
WITH
mysql_native_password
BY
'password'
;
# 确认使用这里的密码登录此账号
FLUSH
PRIVILEGES
;
# 刷新权限
完整命令如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
CREATE
USER
'james'
@
'%'
IDENTIFIED
BY
'123456asd'
;
# 创建一个账号-james,用来进行远程访问;
GRANT
ALL
ON
*.*
TO
'james'
@
'%'
;
# 赋予所有权限给之前创建的账号:james
ALTER
USER
'james'
@
'%'
IDENTIFIED
WITH
mysql_native_password
BY
'123456asd'
;
# 确认使用密码{123456asd}登录此账号{james}
# 密码尽量复杂,安全性更高。
FLUSH
PRIVILEGES
;
# 刷新权限
配置完毕后,使用 Navicat 工具或其他工具进行连接测试即可。
MySQL 5.7 配置
1
2
3
4
5
6
7
GRANT
ALL
PRIVILEGES
ON
*.*
TO
'username'
@
'%'
IDENTIFIED
BY
'password'
WITH
GRANT
OPTION
;
# {usernama} 是远程访问登录的用户名,不建议用 root;
# {
password
} 是远程访问的登录密码;
#
'%'
代表的是所有IP,如果可以尽量设置指定 IP 或 IP 段
FLUSH
PRIVILEGES
;
# 刷新权限
配置完毕后,使用 Navicat 工具或其他工具进行连接测试即可。
注:如果无法访问请注意防火墙 3306 端口是否开启,服务器提供商的安全组中的端口是否开启。