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

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
看运行结果

本地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';