最近买了阿里云基础款作为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、查看阿里云安全组是否开启相应端口
ps: 阿里云默认是关闭3306端口的,就算所有的配置都正确,也无法远程连接,应该是所有服务器都是会默认关闭的。用云服务器的留意这个。
因为开启3306端口不安全;linux上监听一个端口这个最好别用3306,一般都是加个1,比如13306这样的,然后docker做个镜像,配置下mysql的参数,把13306端口映射到docker的3306。