linux上用docker安装mysql
背景
以前我在自己买的腾讯云的服务器上安装mysql很麻烦,要创建很多目录,执行很多命令,而且很容易出错,出错了之后要去各种百度谷歌解决问题,花费很多的时间。有兴趣可以看看我之前的文章,怎么在linux上安装mysql。
现在使用虚拟化技术docker,我们可以很容易安装mysql。下面我们开始行动起来吧。
安装docker
- yum install -y yum-utils device-mapper-persistent-data lvm2
- yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- yum clean all
- yum makecache fast
- yum -y install docker-ce(在阿里云镜像站上面可以找到docker-ce的软件源,使用国内的源速度比较快)
- systemctl start docker(启动docker)
- docker version( 查看安装的docker版本)
安装mysql
-
先运行命令:docker volume create mysql_data 创建数据挂载点(即存储数据的地方,这样即便mysql容器删除了,数据还是在)
-
搜索mysql镜像 docker search mysql
-
拉取镜像 docker pull mysql:latest
-
查看本地镜像 docker images
5.创建配置文件存放位置 和数据映射位置
mkdir -p /mysql/config /mysql/data
6 创建编辑配置文件
vi /mysql/config/my.conf
my.conf配置文件内容如下
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
运行命令:
docker run -d -p 3306:3306 --restart always --privileged=true --name mysql-test -e MYSQL_ROOT_PASSWORD=123456 -v /mysql/config/my.conf:/etc/my.cof -v=/mysql/data:/var/lib/mysql mysql
-d 后台运行容器
-p 3306:3306 指定端口映射(主机(宿主)端口:容器端口)
–restart=always 开机启动
–privileged=true 提升容器内权限
–name 为容器指定一个名称
-e 设置环境变量
MYSQL_ROOT_PASSWORD=123456 初始密码
-v /mysql/config/my.conf:/etc/my.cof 映射配置文件
-v=/mysql/data:/var/lib/mysql 映射数据目录
mysql 镜像名称
7 查看容器 docker ps
解决caching_sha2_password问题
这是我们用小海豚连接下mysql8,你可能会遇到这样的错误:
plugin ‘caching_sha2_password’ cannot be loaded:
这是因为caching_sha2_password的验证方式不支持想是navicate和sqlyog等客户端,我们需要更改验证方式
docker exec -it mysql-test bash
mysql -u root -p
use mysql;
ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘123456’ PASSWORD EXPIRE NEVER;
ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
这是我们可以看到最后那条user是root的记录的plugin改了但是第一条没改,好多教程说到这儿就没了,但是还是连不上,必须把root的验证方式都改成,
ALTER USER ‘root’@’%’ IDENTIFIED BY ‘123456’ PASSWORD EXPIRE NEVER;
ALTER USER ‘root’@’%’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
当然最后还要记得 FLUSH PRIVILEGES;
再次连接远程数据库,连接成功:
ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘123456’ PASSWORD EXPIRE NEVER;
ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
ALTER USER ‘root’@’%’ IDENTIFIED BY ‘123456’ PASSWORD EXPIRE NEVER;
ALTER USER ‘root’@’%’ IDENTIFIED WITH mysql_native_password BY ‘123456’;