话说不会运维的开发不是一个好开发,给你一台测试服务器总不能连个数据库都不会装吧!
鉴于容器化技术的发展,本文主要记录mysql基于docker的安装及使用事项。
如果当前mysql和其他服务在同一台机(用容器名连接),需要先创建一个网段,如果单独部署可以忽略
#创建网络my-net
docker network create my-net
不配置可能会出现表名区分大小写。批量插入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
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文件,每一项都有说明
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
账号: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';
以上就是本章的全部内容了。
上一篇:mybatis第十一话 - mybaits getConnection连接数据库的源码分析
下一篇:mysql第二话 - mysql架构和执行流程
盛年不重来,一日难再晨;及时当勉励,岁月不待人