阿里云 Docker 安装Mysql的步骤以及排坑

1,065 阅读2分钟

最近买了阿里云基础款作为Java的后台以及数据库服务器。 在开始我的后台学习的第一步,那就是搭建各种各样的环境,比如Mysql。

服务器系统:Centos 7

采用的是通过Docker来进行各个后台组件的搭建

第一步:搭建Docker

#卸载系统之前的docker 
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
                  
                  
sudo yum install -y yum-utils

# 配置镜像
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
    
sudo yum install docker-ce docker-ce-cli containerd.io

sudo systemctl start docker
# 设置开机自启动
sudo systemctl enable docker

# 检查docker是否安装成功和
docker -v
sudo docker images

第二步:设置Docker镜像

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://chqac97z.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

第三步:安装mysql

sudo docker pull mysql:5.7

# --name指定容器名字 -v目录挂载 -p指定端口映射  -e设置mysql参数 -d后台运行
sudo docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

#检查mysql是否安装成功
[root@localhost vagrant]# docker ps
#安装成功信息
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
6a685a33103f        mysql:5.7           "docker-entrypoint.s…"   32 seconds ago      Up 30 seconds       0.0.0.0:3306->3306/tcp, 33060/tcp   mysql

Docker安装的mysql目录进入和退出命令

docker exec -it mysql bin/bash
exit;
#因为有目录映射,所以我们可以直接在镜像外执行
vi /mydata/mysql/conf/my.conf 

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

#重启mysql
docker restart mysql

第四步:设置Mysql的用户支持远程连接

新建的mysql的root用户,可能只能本地连接,远程连接是无效的。需要到mysql的用户表中修改权限。

#进入docker的mysql容器中
docker exec -it mysql /bin/bash

#进入mysql
mysql -u root -p            

#进入mysql 配置数据库
use mysql;

#查看用户表信息
select Host, user from user;
+-----------+---------------+
| Host      | user          |
+-----------+---------------+
| localhost | root          |
| localhost | mysql.session |
| localhost | mysql.sys     |
+-----------+---------------+
3 rows in set (0.00 sec)

发现用户表中,root的Host为localhost,这个类型导致root用户只能本地连接!需要将其改为‘%’,代表支持所机器都能访问。

#更新root的host类型
update user set host=%where user=’root’;

以上设置完成后,重启mysql,基本可以远程连接,但是会因为其他问题导致连接失败

第五步:Mysql远程连接失败

1、查看网络问题

ping xxx.xxx.xxx.xxx(服务器地址),如果不可以就是网络问题。

2、查看端口问题

telnet xxx.xxx.xxx.xxx 3306,如果连接失败,配置防火墙。

3、查看端口配置

netstat -apn|grep 3306

4、查看阿里云安全组是否开启相应端口

image.png

image.png

ps: 阿里云默认是关闭3306端口的,就算所有的配置都正确,也无法远程连接,应该是所有服务器都是会默认关闭的。用云服务器的留意这个。

因为开启3306端口不安全;linux上监听一个端口这个最好别用3306,一般都是加个1,比如13306这样的,然后docker做个镜像,配置下mysql的参数,把13306端口映射到docker的3306。