安装包和脚本及配置文件必须在统一目录下

mysql8.0离线安装脚本_配置文件

vim mysql.sh

#!/bin/sh

echo '导入镜像。。。'

docker load < mysql-server_8.0.tar

if [ $? -eq 0 ]; then
echo "镜像导入成功!"
else
echo "镜像导入失败!"
fi

echo '导入镜像到容器。。。。。。'

docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql/mysql-server:8.0

#(如果以上命令不行 可换 docker run --name mysql -p 3306:3306 -v /mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.6)
#查看容器启动状态

if [ $? -eq 0 ]; then
echo "容器启动成功!"
else
echo "容器启动失败!"
fi


echo '启动成功后,进入容器内部拷贝配置文件,到宿主主机。。。。'
#mkdir -r /usr/local/mysql8.0.20

if [ ! -d "/usr/local/mysql8.0.20" ];then
mkdir -p /usr/local/mysql8.0.20
else
echo "文件夹已经存在"
fi

#docker cp mysql:/etc/mysql /usr/local/mysql8.0.20

if [ ! -f "/usr/local/mysql8.0.20" ];then
echo "文件已经存在"
else
docker cp mysql:/etc/mysql /usr/local/mysql8.0.20
fi


if [ ! -f "/usr/local/mysql8.0.20" ]; then
echo "配置拷贝成功!"
else
echo "配置拷贝失败!"
fi


#echo '先停止容器。。。'

docker stop mysql

if [ $? -eq 0 ]; then
echo "容器停止成功!"
else
echo "容器停止失败!"
fi



#echo '再删除容器。。。'

docker rm mysql

if [ $? -eq 0 ]; then
echo "容器删除成功!"
else
echo "容器删除失败!"
fi


#echo '导入配置文件。。。'

#cat mysql8.0.20.sh

echo '创建容器。。。'

sh mysql8.0.20.sh

if [ $? -eq 0 ]; then
echo "容器创建成功!"
else
echo "容器创建失败!"
fi


#echo ' 查看是否启动成功。。。'

docker ps -a


配置脚本

#!/bin/sh
docker run \
-p 3306:3306 \
--name mysql \
--privileged=true \
--restart unless-stopped \
-v /usr/local/mysql8.0.20/mysql:/etc/mysql \
-v /usr/local/mysql8.0.20/mmysql8.0.20/logs:/logs \
-v /usr/local/mysql8.0.20/mmysql8.0.20/data:/var/lib/mysql \
-v /etc/localtime:/etc/localtime \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql/mysql-server:8.0

命令解释:路径可以自己改

-p 端口映射 

-p --net=host

-p 3306:3306   #-p本地端口:容器端口 

--privileged=true  挂载文件权限设置

--restart unless-stopped  设置 开机后自动重启容器

-v /mnt/sda1/mysql8.0.20/mysql:/etc/mysql    挂载配置文件

-v /mnt/sda1/mysql8.0.20/logs:/logs \      挂载日志

-v /mnt/sda1/mysql8.0.20/data:/var/lib/mysql \  挂载数据文件 持久化到主机,

-v /etc/localtime:/etc/localtime    容器时间与宿主机同步

-e MYSQL_ROOT_PASSWORD=123456    设置密码

-d  mysql:8.0.20   后台启动,mysql

执行脚本

./mysql.sh

看运行结果

mysql8.0离线安装脚本_配置文件_02


本地mariadb客户端连接容器mysql8.0数据库报错

我在使用navicat 进行MySQL管理是出现了。2059 - authentication plugin 'caching_sha2_password' -navicat连接异常。这个错误。

这个错误的原因是由于MySQL8.0之后的加密规则为caching_sha2_password.而在此之前的加密规则为mysql_native_password。

可以将加密规则改成mysql_native_password来。

mysqldata>mysql -h 127.0.0.1 -P 13306 -uroot -p

Enter password: ****

ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded: ÕÒ²»µ½Ö¸¶¨µÄÄ£¿é¡£

解决方案:

1.进入mysql容器

docker exec -it mysql2 /bin/bash

2.进入mysql

mysql -uroot -pmima

先授权root在修改密码 

update user set host = '%' where user = 'root';

mysql -u root -pvmwaremysql>use mysql;

mysql>update user set host = '%' where user = 'root';

mysql>select host, user from user;

3.修改密码为root

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

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