最近因项目需求需要在鲲鹏云主机A上部署Docker版的MySQL,由于该环境无法联网,因此无法使用在线方式安装。好在另外一个环境有相同的鲲鹏云主机B,操作系统也是一样,而且也可以联网,因此先在这台主机上将MySQL的镜像做好,然后导入到前面提到的环境。
操作系统基本信息如下:
[root@test ~]# uname -a
Linux cim01 4.19.148+ #1 SMP Mon Oct 5 22:04:46 EDT 2020 aarch64 aarch64 aarch64 GNU/Linux
操作系统版本信息如下:
[root@test ~]# cat /etc/.kyinfo
[dist]
name=Kylin-Server
milestone=10-SP1-Release-Build04-20200711
arch=arm64
beta=False
time=2020-07-11 17:16:54
dist_id=Kylin-Server-10-SP1-Release-Build04-20200711-arm64-2020-07-11 17:16:54
[servicekey]
key=873336
[os]
to=测试环境
term=2021-08-21
[installer]
kylin_type=standard
操作步骤如下:
主机B上执行命令docker images:
REPOSITORY TAG IMAGE ID CREATED SIZE
yrzr/gitlab-ce-arm64v8 latest 9cbe4bebd053 4 months ago 2.84GB
jenkins/jenkins lts 520660973651 5 months ago 504MB
nginx latest 91582cfffc2d 6 months ago 192MB
arm64v8/mysql latest bdfb0ec4d54a 7 months ago 599MB
garethflowers/svn-server latest 942dd6df19f9 11 months ago 18.6MB
nacos/nacos-server 2.0.3 433eb51fef8d 2 years ago 1.05GB
redis 4.0.9 1f0d7a5aa2a6 5 years ago 101MB
继续执行docker save -o mysql.tar arm64v8/mysql。
docker save命令语法:docker save [OPTIONS] IMAGE [IMAGE...]
docker save -o, --output 将归档文件输出到的文件。
然后将mysql.tar上传到主机A,执行docker load -i mysql.tar
docker load命令语法:docker load [OPTIONS]
docker load -i 指定导出的文件。
docker load -q 精简输出信息。
执行完成后,镜像已导入到云主机A上docker中,可使用docker images进行查看是否导入成功。
如果主机A可以上网或者有可下载的镜像源,可以忽略前面的步骤,直接从这里开始操作。
首先在云主机A上创建/data/docker/mysql和/data/docker/mysql/data目录,然后将文件my.cnf上传到/data/docker/mysql,my.cnf内容如下
[mysqld]
# 设置3306端口
port=3306
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
performance_schema_max_table_instances = 600
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8
云主机A上创建MySQL镜像执行如下命令:
docker run -d -p 3306:3306 --name mysql --privileged=true -e MYSQL_ROOT_PASSWORD="888888" -e MYSQL_USER="admin" -e MYSQL_PASSWORD="888888" -v=/data/docker/mysql/my.cnf:/etc/my.cnf -v=/data/docker/mysql/data:/var/lib/mysql arm64v8/mysql:latest
docker run 参数
-i:保持容器运行,加入-it参数后,容器创建后会自动进入容器中,退出容器后,容器会自动关闭。
-t:为容器重新分配一个伪输入终端,通常和-i同时使用。
-d:以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec 进入容器。
-it:创建的容器一般称为交互式容器。
-id:创建的容器一般称为守护式容器、
–name:威创建的容器命名。
-p:映射端口 外部端口:容器内部暴露的端口
进入镜像进行授权
docker exec -it mysql /bin/bash
使用 docker exec 命令的格式如下:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
其中,OPTIONS 可以省略,常用的选项如下:
-i:保持标准输入打开,使得可以与容器交互。
-t:分配一个伪终端,使得可以与容器交互。
CONTAINER 是要操作的容器的名称或 ID。
COMMAND 是要在容器内运行的命令。
ARG... 是命令的参数。
执行登录
mysql -uroot -p
输入密码,然后依次执行如下命令:
GRANT ALL ON . TO 'root'@'%';
GRANT ALL ON . TO 'admin'@'%';
FLUSH PRIVILEGES;
退出镜像访问,在主机A上设置外网访问
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
设置成功后可使用如下命令查看端口是否开通
[root@test ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp3s0
sources:
services: ssh mdns dhcpv6-client cockpit http https
ports: 80/tcp 3306/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
如果还是无法访问,使用vim /etc/sysconfig/iptables,增加
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
[root@test ~]# vim /etc/sysconfig/iptables
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
然后执行
service iptables restart
这时候就可以在其它服务器上执行连接这台服务器的mysql了
使用命令
mysql -h IP地址 -P3306 -uadmin -p
mysql.tar为方便大家使用,提供天翼云盘下载,地址为:https://cloud.189.cn/t/bQFJBb7NNbuq (访问码:ple3)