赞
踩
如果你的云主机已经有下面的这些基础软件包请忽略
假设新拿到一台机器,为了以后使用命令方便,先安装一些基础软件包
# 给每台主机安装基础软件包
yum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate telnet
接下来安装docker(如果机器上已有docker请忽略)
docker安装 # 1.配置阿里云 repo 源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 2.安装 docker-ce yum install docker-ce -y # 3.配置镜像加速 tee /etc/docker/daemon.json << 'EOF' { "registry-mirrors":["https://kn0t2bca.mirror.aliyuncs.com", "https://gqs7xcfd.mirror.aliyuncs.com","https://hub-mirror.c.163.com"], "exec-opts": ["native.cgroupdriver=systemd"] } EOF # 4.docker启动和激活等 systemctl daemon-reload systemctl restart docker # 5.设置Docker开机自启 systemctl enable docker # 查看状态 systemctl status docker # 查看docker版本 docker -v
# 1.创建物理机挂载目录 sudo mkdir -p /data/mysql/data /data/mysql/logs /data/mysql/conf # 2.进入mysql配置目录 cd /data/mysql/conf # 3.创建mysq的my.cnf配置文件,补充mysql8.0的配置文件(如下) touch my.cnf # =============== 配置内容如下(可根据自己情况修改)============== [mysql] #设置服务器默认字符集为utf8mb4 default-character-set=utf8mb4 [mysqld] #配置服务器的服务号,具备日后需要集群做准备 server-id = 1 #开启MySQL数据库的二进制日志,用于记录用户对数据库的操作SQL语句,具备日后需要集群做准备 log-bin=mysql-bin #设置清理超过30天的日志,以免日志堆积造过多成服务器内存爆满 expire_logs_days=30 #允许最大的连接数 max_connections=16384 # 禁用符号链接以防止各种安全风险 symbolic-links=0 # 设置东八区时区 default-time_zone = '+8:00' #wait_timeout参数值,由默认的8小时,修改为30分钟。 wait_timeout=1800 #修改back_log参数值:由默认的50修改为500 每个线程256K 1.6W线程2G左右 back_log=500 character_set_server=utf8mb4 character-set-client-handshake = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect=SET NAMES utf8mb4 # =========================== 结 束 =========================== # 4.拉取mysql:8.0.36镜像文件 docker pull mysql:8.0.36
# 5.启动mysql:8.0.36
docker run -p 3306:3306 --name mysql --restart always -v /data/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /data/mysql/logs:/logs -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0.36
容器运行命令解释
docker run
: 启动一个新的容器。-p 3306:3306
: 将主机的 3306 端口映射到容器的 3306 端口,MySQL 默认使用 3306 端口。--name mysql
: 给这个容器命名为 mysql。--restart always
: 设置容器自动重启策略,always 表示无论因为什么原因退出,Docker 守护进程都会自动重启容器。-v /data/mysql/conf/my.cnf:/etc/mysql/my.cnf
: 将主机的 /data/mysql/conf/my.cnf 文件挂载到容器的 /etc/mysql/my.cnf 文件,这个文件是 MySQL 的配置文件。-v /data/mysql/logs:/logs
: 将主机的 /data/mysql/logs 目录挂载到容器的 /logs 目录,用于存储日志文件。-v /data/mysql/data:/var/lib/mysql
: 将主机的 /data/mysql/data 目录挂载到容器的 /var/lib/mysql 目录,用于存储数据库数据。-e MYSQL_ROOT_PASSWORD=root
: 设置 MySQL 的 root 用户密码为 root,通过环境变量 MYSQL_ROOT_PASSWORD 传递。-d
: 后台运行容器并返回容器 ID。mysql:8.0.36
: 使用 mysql 镜像的 8.0.36 版本来创建容器。
使用docker ps -a
查看所有容器的启动情况
如果容器状态一直是上面的Restarting
,则要通过docker logs -fn 500 mysql
查看docker启动日志
通过日志可以看到这里需要一个文件 /var/lib/mysql-files
那就在本地创建一个 ,然后停止、删除、并重新启动容器
# 物理机创建mysql-files
mkdir -p /var/lib/mysql-files
# 停止MySQL容器
docker stop mysql
# 删除MySQL容器
docker rm mysql
# 运行MySQL容器(此处增加了/var/lib/mysql-files的挂载文件)
docker run -p 3306:3306 --name mysql --restart always -v /var/lib/mysql-files:/var/lib/mysql-files -v /data/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /data/mysql/logs:/logs -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0.36
执行完毕 docker ps
看到如下,即启动成功
启动容器后,使用navicate客户端连接即可,假如出现了以下情况,说明输入的密码错误了,需要修改密码后再进行连接
注意上面的报错 using password :YES
说明使用了密码,但密码不对! 假如此时无论如何填写密码都不正确,那么就需要修改密码后再次登陆,步骤如下
1.首先进入容器内部
docker exec -it mysql ./bin/bash
然后尝试执行命令 mysql -uroot
使用无密码登陆,看是否可以登上mysql
2.进入并编辑容器内部的配置文件docker.cnf,使其具有免密码登陆权限
cd ./etc/mysql/conf.d/
当我们使用vim编辑器编辑容器内部的docker.cnf文件时,发现容器内部并没有提供vim工具,那就手动在容器内部安装一个
# 1.运行以下命令来安装Vim
apt-get update
apt-get install -y vim
# 2.验证Vim是否成功安装
vim --version
有了vim编辑器就开始修改docker.cnf
文件的内容,添加skip-grant-tables
属性使其可以免密登陆
docker.cnf原内容如下
[mysqld]
skip-host-cache
skip-name-resolve
vim添加skip-grant-tables
,修改后如下
[mysqld]
skip-host-cache
skip-name-resolve
skip-grant-tables
然后退出,并重启mysql容器
exit
docker restart mysql
3.无密码登陆,并重置密码
首先,要无密码登陆进mysql
mysql -uroot
然后修改密码为12345
5.7及以下版本
set password for 'root' = password('12345'); //修改本地密码
set password for 'root'@'localhost' = password('12345'); //修改远程密码
8.0以上版本
ALTER USER 'root'@'%' IDENTIFIED BY '12345';
ALTER USER 'root'@'localhost' IDENTIFIED BY '12345';
然后要把上边docker.cnf
文件中新增的skip-grant-tables
配置去掉,否则的话,密码就是摆设了,还是可以无密码登陆
然后退出容器,重启mysql
exit
docker restart mysql
本机装的MySQL数据库,本机可以正常连接,其他机器访问报错,is not allowed to connect to this MySQL server,防火墙等其他策略均配置没问题 。
出现该问题的原因是,MySQL数据库只允许自身所在的本机器连接,不允许远程连接。
注意:上面的图是我在容器内部把root
用户修改为允许外部访问之后才截的图,正常情况下使用navicate
是进不去的
所以要
先使用 docker exec -it mysql ./bin/bash
进入容器内部
然后mysql -uroot
进入mysql (有密码则使用mysql -uroot -p
进入)
然后使用use mysql;
进入mysql数据库
然后再执行修改语句,修改语句如下:
# 1.修改root用户的host
update user set host = '%' where user = 'root';
# 2.刷新配置
flush privileges;
# 3.查看修改结果
select host, user from user;
以上都做完,即可连接成功
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。