CentOS 7.9 安装Docker
拉取mysql 镜像
搜寻仓库里面有那些镜像
我们拉取mysql:latest的镜像
查看镜像
但是我们不知道mysql的具体版本号,我们使用docker inspect 命令来获取容器/镜像的元数据。
然后将这些数据输入到grep 命令来查找version的字符串
-i 或 --ignore-case : 忽略字符大小写的差别
docker image inspect mysql:latest | grep -i version
可以看到mysql 版本号为:8.0.27
在服务器中,创建存放数据,配置文件的文件夹,我这里放在/home/xt(自己的用户名)下面
mkdir -p /home/xt/mysql/data /home/xt/mysql/conf
将文件的所有权交给root 用户 Linux chown 命令
chown root /home/xt/mysql
设置文件夹的用户权限 Linux chmod命令
chmod -R 755 /home/xt/mysql
mysql配置文件
在Windows本地编辑一个my.cnf 配置文件,写入内容如下,
然后移动到服务器的/home/xt/mysql/conf文件夹下
# Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# The MySQL Server configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
default_authentication_plugin=mysql_native_password
# Custom config should go here
!includedir /etc/mysql/conf.d/
[client]
#socket = /usr/mysql/mysqld.sock
default-character-set = utf8mb4
[mysqld]
character_set_server = utf8mb4
collation_server = utf8mb4_bin
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
通过xftp软件将my.cnf 配置文件移动到如图路径位置(这个文件夹是我自己创的,你们移动到自己创的文件夹下面)
创建启动容器
docker run -p 3306:3306 --name mysql -v /home/xt/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /home/xt/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=xxxxx -d mysql:latest
命令说明:
- -p 3306:3306 : 将容器的 3306 端口映射到主机的 3306 端口
- –name mysql : 启动后容器名为 mysql
- -v /home/xt/mysql/conf/my.cnf:/etc/mysql/my.cnf : 将主机的/home/xt/mysql/conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf (配置文件)
- -v /home/xt/mysql/data:/var/lib/mysql : 将主机的/home/xt/mysql/data挂载到容器的 /var/lib/mysql (data目录为mysql配置的数据文件存放路径,建议挂载,是存储数据的,容器down掉,还能再次挂载数据。)
- -e MYSQL_ROOT_PASSWORD=xxxxx : 初始化 root 用户的密码
- -d 后台运行容器
进入容器内部
docker exec -it mysql /bin/bash
连接到mysql,输入上面设置的密码
显示所有数据库
使用其中的mysql数据库
展示user 表的host,user和plugin
select host,user,plugin from user;
如果root用户的插件不为mysql_native_password,则需要修改为mysql_native_password,
虽然最新版MySql换了新的身份验证插件(caching_sha2_password), 原来的身份验证插件为(mysql_native_password)。但是一些客户端工具比如Navicat 中还找不到新的身份验证插件(caching_sha2_password),因此,我们需要将mysql用户使用的 登录密码加密规则 还原成 mysql_native_password,方便客户端工具连接使用。
update user set plugin='mysql_native_password' where user='root';
修改访问密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码';
最后刷新权限
Mysql的权限问题以及flush privilegesflush privileges的使用场景:
当我们直接用DML语句修改系统权限表(mysql.user、mysql.db、mysql.tables_priv、mysql.columns_priv)时,内存中的权限数组是不会同步更新的,此时我们就需要flush privileges来更新内存权限数据了。
这样,就可以通过Navicat等客户端连接我服务器的mysql 了
如果有什么问题请到评论区留言,如果我看到了,一定会第一时间回复大家。