docker-mysql8实践

docker-mysql8实践

注意事项

大小写敏感问题

  • 由于mysql8默认表名大小写敏感,因此从5.7以前切换到8的需要注意一下大小写的问题,笔者在这里建议数据库统一小写,因此不建议去修改mysql8变成大小写不敏感
  • 如果原先的表已经不区分大小写,为了兼容以前的数据,那么还是得将mysql8改为大小写不敏感
  • 用户可以先通过

show global variables like ‘%lower_case%’

  • 查看下是否大小写敏感,其中lower_case_table_names为1表示大小写不敏感,默认是0,敏感。
    在这里插入图片描述
    这个字段是只读的,因此没法直接修改。
  • 特别注意的是只有在首次运行数据的时候可以修改(即mysql刚启动服务还没有任何自定义数据库和表创建的时候),若果已经有了自己的数据库,那么无法修改此项值
  • 修改的方法如下(两种办法):
  1. 在run的命令中增加"–lower_case_table_names=1"到末尾,注意是末尾。这样容器启动时顺便修改了此值。
  2. 在配置文件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

猜你喜欢

转载自blog.csdn.net/huweijian5/article/details/86471078