mysql 8.0学习

发布时间 2023-08-16 17:38:03作者: 蚌壳里夜有多长

1.创建用户

GRANT ALL ON dbname.*(tablename) TO 'your_mysql_name'@'your_client_host';

2.mysql5.7升级到mysql8.0

首先,我们要大概了解下MySQL5.7和8.0有哪些不同,参考官方文档和其他网友文章,概括总结出MySQL8.0以下几点新特性:

默认字符集由latin1变为utf8mb4。
MyISAM系统表全部换成InnoDB表。
JSON特性增强。
支持不可见索引,支持直方图。
sql_mode参数默认值变化。
默认密码策略变更。
新增角色管理。
支持窗口函数,支持Hash join。
根据版本变化及官方升级教程,列举出以下几点注意事项:

1.注意字符集设置。为了避免新旧对象字符集不一致的情况,可以在配置文件将字符集和校验规则设置为旧版本的字符集和比较规则。
2.密码认证插件变更。为了避免连接问题,可以仍采用5.7的mysql_native_password认证插件。
3.sql_mode支持问题。8.0版本sql_mode不支持NO_AUTO_CREATE_USER,要避免配置的sql_mode中带有NO_AUTO_CREATE_USER。
4.是否需要手动升级系统表。在MySQL 8.0.16版本之前,需要手动的执行mysql_upgrade来完成该步骤的升级,在MySQL 8.0.16版本及之后是由mysqld来完成该步骤的升级。
5.myslq 5.7.11 or 更早的版本需要ALTER INSTANCE ROTATE INNODB MASTER KEY;表空间加密是5.7.11才有的特性所以得开启表空间加密

  步骤

5.7.11升级到8.0.16之后

第一步

5.7软件上操作

SET GLOBAL innodb_fast_shutdown = 1; -- fast shutdown

或者

 

SET GLOBAL innodb_fast_shutdown = 0; -- slow shutdown

保证数据刷新到磁盘

mysqladmin -u root -p shutdown

 

关闭mysql

解压mysql8.0.20二进制包

修改mysql8.0参数

# 最后几个for8.0的参数要格外注意
[mysqld]
user = mysql        
datadir = /data/mysql/data  
port = 3306               

socket = /data/mysql/tmp/mysql.sock
pid-file  = /data/mysql/tmp/mysqld.pid
tmpdir = /data/mysql/tmp    
skip_name_resolve = 1
max_connections = 2000
group_concat_max_len = 1024000
lower_case_table_names = 1
log_timestamps=SYSTEM
max_allowed_packet = 32M
binlog_cache_size = 4M
sort_buffer_size = 2M
read_buffer_size = 4M
join_buffer_size = 4M
tmp_table_size = 96M
max_heap_table_size = 96M
max_length_for_sort_data = 8096
default_time_zone = '+8:00'

#logs
server-id = 1003306
log-error = /data/mysql/logs/error.log
slow_query_log = 1
slow_query_log_file = /data/mysql/logs/slow.log
long_query_time = 3
log-bin = /data/mysql/logs/binlog
binlog_format = row
log_bin_trust_function_creators = 1
gtid_mode = ON
enforce_gtid_consistency = ON

#for8.0
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
character-set-server = utf8
collation_server = utf8_general_ci
basedir = /usr/local/mysql8
skip_ssl
default_authentication_plugin=mysql_native_password

 执行升级程序

/usr/local/mysql8/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql &

  最后升级成功