CentOS 7 安装mysql 8.0 图文教程
今天分享如何在docker上部署mysql 8.0,并解决部署过程遇到的问题。
如果需要其他mysql版本,可以到docker hub进行查找,地址:https://hub.docker.com/_/mysql
1、查看mysql镜像列表
docker search mysql2、拉取自己需要的镜像版本,这里我们选择的是默认版本
docker pull mysql3、查看下载的镜像版本
docker images4、创建挂载目录,目录地址根据自己需要创建
mkdir -p /dockerdata/mysql/conf /dockerdata/mysql/data5、根据下图,了解到主配置文件 my.cnf 加载了 /etc/mysql/conf.d 文件夹下所有的配置(后缀必须是 .cnf),新建配置文件 myconf.cnf,并写入自定义配置内容。
1)、通过vim新建myconf.cnf
vim myconf.cnf2)、输入内容后通过esc+wq指令保存,这里注意,如果配置lower_case_table_names启动会报错,自己试了下确实会启动失败,具体结局方式需要查找相关文档,问题来源:https://bugs.mysql.com/bug.php?id=90695
[mysqld] #Mysql服务的唯一编号 每个mysql服务Id需唯一 server-id = 1 #服务端口号 默认3306 port = 3306 #数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节) character-set-server = utf8mb4 #数据库字符集对应一些排序等规则,注意要和character-set-server对应 collation-server = utf8mb4_general_ci #设置client连接mysql时的字符集,防止乱码 init_connect='SET NAMES utf8mb4' #最大连接数 max_connections = 400 #最大错误连接数 max_connect_errors = 1000 #时区配置 default-time_zone = '+8:00' #慢sql等等其他的日志配置可以自己网上查找,配置新参数后,后记得重启6、启动容器,挂载目录和密码根据自己需求配置
docker run -it -d --name mysql \ -v /dockerdata/mysql/conf:/etc/mysql/conf.d \ -v /dockerdata/mysql/data:/var/lib/mysql \ -p 3306:3306 -p 33060:33060 -e MYSQL_ROOT_PASSWORD=123456 mysql # 账号为root, MYSQL_ROOT_PASSWORD 密码根据自己需求配置7、查看容器状态
docker ps -a8、使用Navicat测试连接
以上,docker部署mysql就完成了。
1、Navicat连接mysql出现authentication plugin ‘caching_sha2_passord’错误。
问题原因:mysql 8.0 默认使用 caching_sha2_password 身份验证机制,从原来的 mysql_native_password 更改为caching_sha2_password。从 5.7 升级 8.0 版本的不会改变现有用户的身份验证方法,但新用户会默认使用新的 caching_sha2_password 。客户端不支持新的加密方式。如果你安装的是5.7等版本应该不会出现这个错误。
解决方法:
#进入容器内部 docker exec -it XXX /bin/bash #访问mysql,并输入密码 mysql -u root -p #更换密码的验证方式,然后进行刷新 ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; flush privileges; #退出容器 先按,Ctrl+P; 再按,Ctrl+Q2、数据库时区问题,有的同学安装后,发现时间戳等自动生成的时间小于当前时间8小时
问题原因:这里我们可以进入docker内部,执行sql指令查看当前的时间和time_zone配置
mysql> select now(); mysql> show variables like '%time_zone%';解决方法一:通过mysql命令设置time_zone
优点:不需要重启MySQL服务,缺点:MySQL服务重启,设置就会消失
mysql> set time_zone = '+8:00'; mysql> set global time_zone = '+8:00';解决方法二:通过cnf配置,我在上文中的cnf配置已经设置了时区,配置完后记得要重启
[mysqld] #设置默认时区 default-time_zone='+8:00'设置后我们再查看time_zone,问题就解决了
