mysql第一话 - mysql基于docker的安装及使用

话说不会运维的开发不是一个好开发,给你一台测试服务器总不能连个数据库都不会装吧!
鉴于容器化技术的发展,本文主要记录mysql基于docker的安装及使用事项。

1.本文技术支持点

  • 容器化docker,不知道是什么以及怎么安装的,请先了解部署神器 – docker,一文带你从开发变运维
  • 部署配置docker-compose,不懂的请先了解docker-compose –- 单机多容器神器

2.容器中安装mysql

2.1 同一网段

如果当前mysql和其他服务在同一台机(用容器名连接),需要先创建一个网段,如果单独部署可以忽略

#创建网络my-net
docker network create my-net  

2.2 配置my.cnf

不配置可能会出现表名区分大小写。批量插入sql大小受限制,也可以忽略

[mysqld]
# 表名不区分大小写
lower_case_table_names=1
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
#一次执行大小最大1024M
max_allowed_packet=200M
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

2.3 docker run命令启动

因为mysql在docker镜像仓库有官方镜像,可以直接用,想使用最新版本号直接用mysql,我这里用的8.0
/root/local/mysql/mysql-files:/var/lib/mysql-files 本地部署有报错找不到这个目录,估计是升级导致的,可加可不加

docker run -d --name mysql01 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=a123456 -v /root/local/mysql/data:/var/lib/mysql -v /root/local/mysql/mysql-files:/var/lib/mysql-files --net my-net mysql:8.0.29

[root@m mysql]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
a8f2833d34dc        mysql:8.0.29         "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        0.0.0.0:3306->3306/tcp, 33060/tcp   mysql01

不懂的不要急,继续往下看yaml文件,每一项都有说明

2.4 docker-compose启动

  • 准备yaml文件,名称必须是docker-compose.yaml
version: '3.7'
services:
  mysql01:
    #镜像名称 不带版本取最新
    image: mysql:8.0.29
    #容器名称
    container_name: mysql01
    #异常停掉是否重启 按需
    restart: always
    #当前主机的3306映射容器内的3306
    ports:
    - "3306:3306"
	#初始的环节变量 MYSQL_ROOT_PASSWORD/root账户密码 必须
    environment:
    - MYSQL_ROOT_PASSWORD=123456
    - TZ=Asia/Shanghai
    #宿目录挂载到容器内
    volumes:
    - /root/local/mysql/data:/var/lib/mysql
    - /root/local/mysql/my.cnf:/etc/mysql/my.cnf
    #网段 同一网段可使用容器名进行连接
    networks:
    - my-net
networks:
  my-net:
    external: true
  • 启动并查看容器
[root@m mysql]# docker-compose up -d
Starting mysql01 ... done
[root@m mysql]# docker-compose ps
 Name               Command             State                 Ports              
---------------------------------------------------------------------------------
mysql01   docker-entrypoint.sh mysqld   Up      0.0.0.0:3306->3306/tcp, 33060/tcp

2.5 连接

账号:root,密码:123456,可以使用工具连接,也可以使用docker exec -it mysql01 /bin/sh进入容器内部执行mysql -u root -p然后输入密码进行连接,正常情况就不演示了

外网连接问题
1.密码正确,无权限

mysql> select host,user,plugin,authentication_string from mysql.user where user='root';
+-----------+------------------+-----------------------+------------------------------------------------------------------------+
| host      | user             | plugin                | authentication_string                                                  |
+-----------+------------------+-----------------------+------------------------------------------------------------------------+
| %         | root             | caching_sha2_password | $A$005$Y!;@&\>'.bT'/rhP0lL7RXsIKK8vAS51BPeJ5z1LK0cXRulyoFb5Hd/Z. |
+-----------+------------------+-----------------------+------------------------------------------------------------------------+
5 rows in set (0.00 sec)

host那列如果是localhost,表示只能内网访问

update mysql.user set host='%' where user='root';
flush privileges;//需要刷新权限

2.找不到caching_sha2_password模块
密码插件如果是caching_sha2_password,需要强制修改密码

alter user 'root'@'%' identified with mysql_native_password by '123456';

3.注意事项

  1. 端口映射时,保证宿主机端口不被占用
  2. 需要挂载的文件一定要保证存在才挂载
  3. 如果进行降版本的,data数据目录可能会存在解析不到,挂载过去启动会报错

以上就是本章的全部内容了。

上一篇:mybatis第十一话 - mybaits getConnection连接数据库的源码分析
下一篇:mysql第二话 - mysql架构和执行流程

盛年不重来,一日难再晨;及时当勉励,岁月不待人

你可能感兴趣的:(docker,数据库DB,linux,docker,mysql)