Docker安装mysql

/ mysql / 没有评论 / 1816浏览

Docker安装mysql

嘿,everybody!今天更新的内容是使用docker快速安装部署mysql服务(Docker安装redis),话不多说,开整~~

Docker安装mysql

1.首先下载mysql镜像

docker pull mysql

2.然后创建一个文件夹用来存放mysql的配置文件,日志,以及数据等(也就是所谓的挂载目录,作用就是将此目录中的文件或文件夹覆盖掉容器内部的文件或文件夹)

3.在上面创建的目录下使用命令启动mysql容器

docker run -it -d -p 3306:3306 --name docker_mysql -v $PWD/conf/my.cnf:/etc/mysql/my.cnf -v $PWD/logs:/var/log -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 docker.io/mysql

解释一下上面命令的意义:

-d:表示后台运行,不加-d执行上面的命令你就会看到mysql启动的日志信息了

-p:表示端口映射,冒号左面的是我们的宿主机的端口,也就是我们虚拟机的端口,而右侧则表示的是mysql容器内的端口

--name:是我们给mysql容器取的名字

-v:表示挂载路径,$PWD表示当前目录下,冒号左面的表示我们宿主机的挂载目录,也就是我们虚拟机所在的文件路径,冒号右边则表是的是mysql容器在容器内部的路径,上面的命令我分别挂载了my.cnf(mysql的配置文件),如需使用配置文件的方式启动mysql,这里则需要加上,mysql的日志,还有mysql存放数据所在的目录

再往后是mysql的密码,以及mysql容器的容器名

怎么样,是不是超级简单,哈哈哈,两步搞定,简直比windows装一个mysql还要快有木有

好了不闹了,我们言归正传。。。

我在安装使用的时候也踩了好多坑,比如下面我遇到的问题:

遇到的问题

坑一

我在pull mysql的时候没有加版本号,则pull下来的应该是最新版的mysql8,但当我执行完命令,我用Navicat去连接我刚刚启动的mysql服务,正当我期待效果的同时,what???连不上,what fuck,呸呸呸,这里我们文明用语奥,嘿嘿嘿!!!

Navicat报错如大概下面图片这个样纸的:(ps下面的图是我网上找的,大家将就看哈,当时遇到忘记截图了)

1

mysql在虚拟机中可以启动,但是使用navicat启动连不上,后来发现是由于mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password,所以需要把mysql用户登录密码加密规则还原成mysql_native_password。

然后我们进入mysql容器:docker exec -It 容器id bash

然后我们登陆哈,输入mysql的登陆命令:mysql -uroot -p 回车

然后输入密码:balabalabala

然后输入sql如下(意思是为root用户设置密码为123456):

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

然后再输入命令刷新:flush privileges;

然后我们重新使用Navicat连接mysql,buling~~,连接成功,啊,咋就成功了呢,咱也不知道,咱也不敢问啊!!!

坑二

使用1核1G的服务器,启动mysql频繁宕机

如果有的小伙伴和博主一样使用1核1G的服务器,请看这里。。。别问我为啥使用这么低的配置,因为穷,因为穷。。。

博主发现刚跑起来mysql没多久,mysql服务自己就宕机了,没错,当宕机了,重新启动成功,发现不一会mysql又宕机了,没有错,又宕机了~~ 唉 !!!

最后博主机智的发现由于mysql8所占内存过大,服务器器把mysql服务给干掉了,所以博主一生气果断卸载删除mysql8容器,你以为博主要专门买一个阿里云的数据库吗,那你真是太天真了,小伙伴们不要像博主一样天真啊,还是花钱的好呦~~

博主一本正经的说道:因为穷,所以博主又去重新下载了mysql5.6的版本,然后想方设法的去的去搞了一套mysql5.6的配置,以牺牲mysql服务事物特性(原子性,隔离性,一致性,稳定性),关闭innodb引擎,启用MYISAM引擎换来的占用内存小,比较稳定的mysql,这才勉强让mysql在博主的服务器上存活下来。

ps:建议有需要的小伙伴还是去搞一个大点内存的服务器,或者专门买一个云数据库来使用,实在不行,也可以使用我这种方式试试,嘿嘿!

my.cnf配置

port= 3306

character-set-server=utf8

performance_schema_max_table_instances=200

table_definition_cache=200

table_open_cache=128

innodb=OFF

default-storage-engine=MYISAM

default-tmp-storage-engine=MYISAM

loose-innodb-trx=0

loose-innodb-locks=0

loose-innodb-lock-waits=0

loose-innodb-cmp=0

loose-innodb-cmp-per-index=0

loose-innodb-cmp-per-index-reset=0

loose-innodb-cmp-reset=0

loose-innodb-cmpmem=0

loose-innodb-cmpmem-reset=0

loose-innodb-buffer-page=0

loose-innodb-buffer-page-lru=0

loose-innodb-buffer-pool-stats=0

loose-innodb-metrics=0

loose-innodb-ft-default-stopword=0

loose-innodb-ft-inserted=0

loose-innodb-ft-deleted=0

loose-innodb-ft-being-deleted=0

loose-innodb-ft-config=0

loose-innodb-ft-index-cache=0

loose-innodb-ft-index-table=0

loose-innodb-sys-tables=0

loose-innodb-sys-tablestats=0

loose-innodb-sys-indexes=0

loose-innodb-sys-columns=0

loose-innodb-sys-fields=0

loose-innodb-sys-foreign=0

loose-innodb-sys-foreign-cols=0

join_buffer_size = 64M

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

**下面是博主使用docker pull 的mysql5.6版本的启动命令。。。

启动命令:映射成功版本

docker run -it -d -p 3306:3306 --name docker_mysql_5.6 -v $PWD/conf/my.cnf:/etc/mysql/my.cnf -v $PWD/logs:/var/log -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 docker.io/mysql:5.6

今天的更新到这里就结束了,拜拜!!!