docker中安装mysql8

阿里云ecs服务器,centos7.9系统,docker中安装mysql8

1. 拉取镜像

docker pull mysql # 拉取镜像
docker images # 查看镜像

查看mysql镜像是否成功下载

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文件

  1. sql文件只在容器创建时执行一次
  2. 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服务器设置安全组规则
  1. 阿里云的服务器默认端口是不对外开放的,如果想要供外部访问,需要在安全组中手动添加规则,开放端口
  2. 首先去百度,搜索ip,查看自己ip地址,我的ip是182.204.x.x,所以在第4步配置的时候写成182.204.0.0/16; 如果写成0.0.0.0/0代表所有ip都可以访问,有点危险。

设置安全组

  1. 做完这一步之后,尝试实用工具连接
  2. 如果连接报错,错误码为2048:参考4.2
  3. 如果是其它问题,参考4.3

sqlyog连接

4.2 报错
  1. 错误号码2058 Plugin caching_sha2_password could not be loaded:xxxxxxx
  2. 原因:出现这个问题,是因为 MySQL 从 8.0 版本开始,新增了caching_sha2_password授权插件,并且新建用户时默认使用该插件进行加密,而你的 sql工具 无法识别该加密方式加密的密码。
  3. 解决方案
4.3 设置数据库用户访问权限

将云服务器的3306端口开放之后还是不可以在本地进行连接,因为用户的访问权限默认是localhost,并不能从外部进行访问,需要手动赋权。

  1. 使用如下命令查看数据库中各个用户的访问权限:
select user,host from mysql.user;

# 结果
# +------------------+-----------+
# | user             | host      |
# +------------------+-----------+
# | root             | %         |
# | mysql.infoschema | localhost |
# | mysql.session    | localhost |
# | mysql.sys        | localhost |
# | root             | localhost |
# +------------------+-----------+
  1. 用如下命令将所需要开放的用户的访问权限改为任意:
# 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;

参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值