详解关于MySQL 8.0走过的坑
在使用MySQL 8.0过程中,我们发现了一些常见的问题和坑点。以下将详细讲解并给出解决方案。
坑点1:默认密码认证方式改变
MySQL 8.0的默认密码认证方式改为了caching_sha2_password,而旧版MySQL默认认证方式是mysql_native_password。这就导致了一些连接旧版本MySQL的客户端可能会遇到鉴权慢、失败的问题。
解决方案
有两种解决方案可以参考:
-
在MySQL 5.7及以下版本创建新用户,使用mysql_native_password的认证方式。
CREATE USER 'username'@'hostname' IDENTIFIED WITH mysql_native_password BY 'password';
-
将MySQL 8.0的默认认证方式改为mysql_native_password。通过以下步骤完成该操作:
-
修改MySQL配置文件my.cnf,在[mysqld]段中添加以下内容,重启MySQL服务。
default_authentication_plugin=mysql_native_password
- 通过命令行修改用户密码
ALTER USER 'username'@'hostname' IDENTIFIED WITH mysql_native_password BY 'new_password';
坑点2:升级后varchar字符集问题
如果是从旧版本MySQL升级到MySQL 8.0,其中包含VARCHAR和TEXT数据类型,那么在升级完后,这些字段可能会出现字符集乱码的问题。
解决方案
将VARCHAR的字符集修改为默认字符集utf8mb4:
ALTER TABLE table_name MODIFY column_name VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
同理,将TEXT的字符集修改为默认字符集utf8mb4:
ALTER TABLE table_name MODIFY column_name TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
示例1:调整缓存大小
在使用MySQL 8.0过程中,我们发现访问量大时,MySQL会出现连接超时或者连接被拒绝的问题。这是由于MySQL 8.0默认的缓存大小(innodb_buffer_pool_size)只有134MB,在大流量访问下,读取频繁,会造成资源不足的情况。
解决方案
通过以下命令调整innodb_buffer_pool_size缓存的大小:
SET GLOBAL innodb_buffer_pool_size = 1G;
在实际应用场景中,可以根据服务器配置和应用负载进行调整。
示例2:MySQL日志过多
当MySQL 8.0出现问题或者异常时,日志记录的详细程度是很高的,默认情况下,MySQL 8.0会记录很多详细的日志,而这些日志会占用大量的空间。
解决方案
可以通过以下设置来调整日志记录的程度:
-
关闭慢查询日志和慢查询标准(slow_query_log和slow_query_log_file)
SET GLOBAL slow_query_log = ‘OFF’;
-
清除二进制日志
PURGE BINARY LOGS TO ‘bin_log.000003’;
-
关闭二进制日志记录
SET GLOBAL log_bin = ‘OFF’;
-
清除错误日志
FLUSH ERROR LOGS;
注意:在实际应用中,需要根据服务器配置和应用负载来进行调整,随着业务的扩展和增加,系统的日志记录也会变得越来越重要。可以把日志记录下来,便于后期排查问题、分析异常以及调优等。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解关于MySQL 8.0走过的坑 - Python技术站