docker-mysql8实践
- docker hub官方mysql镜像:https://hub.docker.com/_/mysql
- 官方镜像里已经有容器运行的具体说明,这里就不再赘述了
注意事项
大小写敏感问题
- 由于mysql8默认表名大小写敏感,因此从5.7以前切换到8的需要注意一下大小写的问题,笔者在这里建议数据库统一小写,因此不建议去修改mysql8变成大小写不敏感
- 如果原先的表已经不区分大小写,为了兼容以前的数据,那么还是得将mysql8改为大小写不敏感
- 用户可以先通过
show global variables like ‘%lower_case%’
- 查看下是否大小写敏感,其中lower_case_table_names为1表示大小写不敏感,默认是0,敏感。
这个字段是只读的,因此没法直接修改。 - 特别注意的是只有在首次运行数据的时候可以修改(即mysql刚启动服务还没有任何自定义数据库和表创建的时候),若果已经有了自己的数据库,那么无法修改此项值
- 修改的方法如下(两种办法):
- 在run的命令中增加"–lower_case_table_names=1"到末尾,注意是末尾。这样容器启动时顺便修改了此值。
- 在配置文件my.cnf中增加"lower_case_table_names=1"
caching_sha2_password问题
- 通过第三方工具在连接数据库时会报 caching_sha2_password的问题
- 解决办法如下:
- 在my.cnf中增加“default-authentication-plugin=mysql_native_password”
default-authentication-plugin=mysql_native_password
- 接着修改root用户密码,以启用新的验证方式
use mysql;
ALTER USER ‘root’@’%’ IDENTIFIED WITH mysql_native_password BY ‘new password’;
FLUSH PRIVILEGES;
创建只读用户的变化
- 在mysql8以前创建账号是可以和授权放在一条sql语句的,在8后需要变成两条
- mysql8以前的做法
-- 创建只读用户 grant SELECT on *.* to 'reader'@'%' identified by 'reader' ; -- 创建具有增删查改权限的用户 grant Select,Update,insert,delete on *.* to 'writer'@'%' identified by 'writer';
- mysql8的做法
-- 创建只读用户 create user 'reader'@'%' identified by 'reader'; grant SELECT on *.* to 'reader'@'%' ; -- 创建具有增删查改权限的用户 create user 'writer'@'%' identified by 'writer'; grant Select,Update,insert,delete on *.* to 'writer'@'%' ;
log-bin问题
- 如果sql语句出现以下错误
ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable)
- 那么在配置文件my.cnf中增加如下语句即可
skip-log-bin
字符警告
- 在my.cnf中配置字符集为utf8的时候出现了如下警告
–character-set-server: ‘utf8’ is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
- 意思就是说UTF8MB3快过时了,推荐用UTF8MB4。
实际项目
-
目录结构如下:
-
其中conf下的my.cnf文件如下
[mysqld] #是否启用bin log skip-log-bin #允许最大连接数 max_connections=200 # 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统 max_connect_errors=10 # 服务端使用的字符集默认为UTF8 character-set-server=utf8 # 默认使用“mysql_native_password”插件认证 default_authentication_plugin=mysql_native_password #忽略表名大小写 1--忽略 lower_case_table_names=1
-
start.sh文件如下,注意–lower_case_table_names=1 要放在最后一行
扫描二维码关注公众号,回复: 4935129 查看本文章#!/bin/sh docker volume create mysql8_data docker run -it -d \ --restart always \ -p 3306:3306 \ -v mysql8_data:/var/lib/mysql \ -v /etc/localtime:/etc/localtime:ro \ -v $PWD/conf:/etc/mysql/conf.d \ -v $PWD/logs:/logs \ -e MYSQL_ROOT_PASSWORD=root \ --name mysql8 \ mysql:8.0.13 \ --lower_case_table_names=1
参考
mysql8.0创建用户授予权限报错解决方法 - 一个程序媛的成长之路 - CSDN博客
https://blog.csdn.net/skyejy/article/details/80645981
MySQL 8 配置文件 - 薛定谔 - 博客园
https://www.cnblogs.com/equation/p/9443097.html
Docker 部署 Mysql8.0 - 没长正 - CSDN博客
https://blog.csdn.net/xsj34567/article/details/80940238
CentOS 7连接mysql 8提示2059 - authentication plugin 'caching_sha2_password - Airt的博客 - CSDN博客
https://blog.csdn.net/airt_xiang/article/details/80261674