阿里云ecs服务器,centos7.9系统,docker中安装mysql8
1. 拉取镜像
docker pull mysql # 拉取镜像
docker images # 查看镜像
2. 基于宿主机实现mysql8数据目录、配置文件、初始化脚本的挂载
2.1 创建3个文件夹,一会创建容器需要用(用于挂载本地文件和目录)
mkdir -p /islirj/mydata/mymysql8/conf # 存放本地配置文件mysql8.cnf
mkdir -p /islirj/mydata/mymysql8/init # 放置数据库sql文件,初始化时被执行一次
mkdir -p /islirj/mydata/mymysql8/data
2.2 配置mysql.cnf的内容,并放入conf文件夹中
[client]
default_character_set=utf8mb4
[mysql]
default_character_set=utf8mb4
[mysqld]
character_set_server=utf8mb4
collation_server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
2.3 将sql文件放入init文件夹中
- sql文件只在容器创建时执行一次
- sql文件可以有多个
3. 创建mysql容器
# 1.删除原来的MySQL容器
docker rm -f mysql # -f 强制删除
# 2.创建并运行新mysql容器,挂载本地目录
docker run -d \ # 创建并运行一个容器,-d是让容器在后台运行
--name mymysql8 \ # 给容器起个名字,必须唯一
-p 3306:3306 \ # 设置端口映射
-e TZ=Asia/Shanghai \ # 设置环境变量
-e MYSQL_ROOT_PASSWORD=yourpassword \ # 设置密码
-v /islirj/mydata/mymysql8/data:/var/lib/mysql \ # 挂载
-v /islirj/mydata/mymysql8/conf:/etc/mysql/conf.d \
-v /islirj/mydata/mymysql8/init:/docker-entrypoint-initdb.d \
--restart=always \ # 当重启Docker时会自动启动该容器
-dit mysql:lates \ # 后台运行并可控制台接入;指定使用的镜像(latest代表最新版本;如果使用5.7则写为mysql:5.7)
3.1 测试是否成功
# 3.查看data目录,会发现里面有大量数据库数据,说明数据库完成了初始化
ls -l data
# 4.查看MySQL容器内数据
# 4.1.进入MySQL
docker exec -it mymysql8 mysql -uroot -pyourpassword
# 4.2.查看编码表
show variables like "%char%";
# 4.3.结果,发现编码是utf8mb4没有问题
# +--------------------------+--------------------------------+
# | Variable_name | Value |
# +--------------------------+--------------------------------+
# | character_set_client | utf8mb4 |
# | character_set_connection | utf8mb4 |
# | character_set_database | utf8mb4 |
# | character_set_filesystem | binary |
# | character_set_results | utf8mb4 |
# | character_set_server | utf8mb4 |
# | character_set_system | utf8mb3 |
# | character_sets_dir | /usr/share/mysql-8.0/charsets/ |
# +--------------------------+--------------------------------+
# 5.查看数据
# 5.1.查看数据库
show databases;
# 结果如下
# +--------------------+
# | Database |
# +--------------------+
# | information_schema |
# | mysql |
# | performance_schema |
# | pig |
# | pig_codegen |
# | pig_config |
# | pig_job |
# | sys |
# +--------------------+
3.2 出现错误:docker 启动MySQL一直处于restarting状态
解决方案:查看日志
命令:docker logs -f <容器名>
4. 远程连接mysql
4.1 ecs服务器设置安全组规则
- 阿里云的服务器默认端口是不对外开放的,如果想要供外部访问,需要在安全组中手动添加规则,开放端口
- 首先去百度,搜索ip,查看自己ip地址,我的ip是182.204.x.x,所以在第4步配置的时候写成182.204.0.0/16; 如果写成0.0.0.0/0代表所有ip都可以访问,有点危险。
- 做完这一步之后,尝试实用工具连接
- 如果连接报错,错误码为2048:参考4.2
- 如果是其它问题,参考4.3
4.2 报错
- 错误号码2058 Plugin caching_sha2_password could not be loaded:xxxxxxx
- 原因:出现这个问题,是因为 MySQL 从 8.0 版本开始,新增了caching_sha2_password授权插件,并且新建用户时默认使用该插件进行加密,而你的 sql工具 无法识别该加密方式加密的密码。
- 解决方案
4.3 设置数据库用户访问权限
将云服务器的3306端口开放之后还是不可以在本地进行连接,因为用户的访问权限默认是localhost,并不能从外部进行访问,需要手动赋权。文章来源:https://www.toymoban.com/news/detail-854164.html
- 使用如下命令查看数据库中各个用户的访问权限:
select user,host from mysql.user;
# 结果
# +------------------+-----------+
# | user | host |
# +------------------+-----------+
# | root | % |
# | mysql.infoschema | localhost |
# | mysql.session | localhost |
# | mysql.sys | localhost |
# | root | localhost |
# +------------------+-----------+
- 用如下命令将所需要开放的用户的访问权限改为任意:
# mysql5.7版本命令(密码一定要复杂)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '远程连接的密码' WITH GRANT OPTION;
# mysql8.0版本使用上述语句会报错:
# You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by 'password' with grant option'
# 原因:原因分析 :高版本的MySQL把将创建账户和赋予权限分开了。
# 解决方法:分开执行。
# 1. 创建账户
create user 'root'@'%' identified by '远程连接密码';
# 2. 赋予权限
grant all privileges on *.* to 'root'@'%' with grant option;
# 3. 刷新
flush privileges;
参考链接文章来源地址https://www.toymoban.com/news/detail-854164.html
到了这里,关于docker中安装mysql8的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!