kn007的个人博客
♥ You are here: Home > 软件与网络 > VPS > MySQL 8.0.11的更新之路

MySQL 8.0.11的更新之路

by | 68 Comments

提醒:本文最后更新于 2379 天前,文中所描述的信息可能已发生改变,请仔细核实。

总算赶在0点前发了出来,就不配图了。

在北京时间今天的18:10,MySQL更新了最新的GA版本8.0.11。

尴尬的是,那时候我正在将MySQL从5.7.21升级到5.7.22(在今天15:15放出)。

所以更新至5.7.22后,又马不停蹄的开了台测试机,测试了8.0.11。

便开始掉坑之旅,在摔得鼻青脸肿后,边查文档边爬出来。。。

让我一一道来,首先是my.cnf的。

Symbolic links现在默认就是禁用了,无需再去标记禁用了,如果你标记的话,会有个提醒:

'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.

再有就是“expire-logs-days”参数已经没有了,取而代之的是“binlog_expire_logs_seconds”,如名,单位是秒,不要搞错了。

据说,purge方式也不一样,但我没细究,回头看看。错误提示如下:

The syntax 'expire-logs-days' is deprecated and will be removed in a future release. Please use binlog_expire_logs_seconds instead.

SQL Mode的NO_AUTO_CREATE_USER也没有了。

In MySQL 8.0.11, several deprecated features related to account management have been removed, such as use of the GRANT statement to modify nonprivilege characteristics of user accounts, the NO_AUTO_CREATE_USER SQL mode, the PASSWORD() function, and the old_passwords system variable.

Using GRANT to create users. Instead, use CREATE USER. Following this practice makes the NO_AUTO_CREATE_USER SQL mode immaterial for GRANT statements, so it too is removed.

实际应用时,发现不用加密手段,根本登录不上MySQL(比如用phpMyAdmin等就不行,用命令行就没事)。

查了下,发现是MySQL 8.0改了默认加密方式为“caching_sha2_password”:

In MySQL 8.0, caching_sha2_password is the default authentication plugin rather than mysql_native_password.

咋整?那就改回来呗,改回“mysql_native_password”。

default_authentication_plugin=mysql_native_password

另外MySQL的X Plugin默认跟随启动,作用我还没具体了解,早在5.7就有了,但一直没用它。

跟随启动后,如果你是用socket,它会在相同目录生成mysqlx.sock。并且他的连接方式强制要SSL,至少第一次要,如果我没理解错,官方是这么写的:

This means that the first use of an account must be done using an SSL connection with the X Plugin authentication cache enabled. Once this initial authentication over SSL has succeeded non-SSL connections can be used.

所以你也能在日志文件看到告警,如果你没有配置SSL的话:

Plugin mysqlx reported: 'Failed at SSL configuration: "SSL context is not usable without certificate and private key"

文档虽说mysqlx-ssl与ssl相等,但mysqlx-ssl=0或者skip、disabled都没用。并无办法禁用这一警告,如果谁知道方法和文档位置,麻烦告知下,谢谢。

而且这个的实际应用能有多少,也是个疑问。

之前说MySQL已经不用MyISAM存储了。确实没错,核心引擎已经不再使用MyISAM了,改为InnoDB了。但MyISAM引擎仍然是可用的,但是有限支持,具体可以看文档,传送门

In MySQL 8.0, it is normally necessary to use ENGINE to specify the MyISAM storage engine because InnoDB is the default engine.

In MySQL 8.0, the MyISAM storage engine provides no partitioning support. Partitioned MyISAM tables created in previous versions of MySQL cannot be used in MySQL 8.0. For more information, see Section 23.6.2, “Partitioning Limitations Relating to Storage Engines”.

其实想知道MySQL怎么禁用MyISAM这些插件,像MariaDB很容易禁用,给MySQL配上禁用参数,只会提示不认识这个参数。。

还有现在utf8mb4默认编码使用的是utf8mb4_0900_ai_ci,据说有优化,先用着看看有没有坑吧。。。

十分推荐升级,性能和效率提升很多。其他坑暂时没遇到过,正在尝试调优。

好了,就先简单说到这,其他需要补充的,后续再补充。

哦,对了,还有Nginx Amplify只能识别MySQL版本,却得不到任何数据,已经提交issue了。


MySQL 8.0之前的版本,当使用--all-databases 参数导出数据的时候,不加--routines和--events选项也可以导出触发器、存储过程等信息,因为这些信息都存放于proc和event表中,导出所有表即可导出这些信息。

但是在MySQL 8.0中,proc表和event表都不再使用,并且定义触发器、存储过程的数据字典表不会被导出。所以在8.0中使用mysqldump、mysqlpump导出数据的时候,如果需要导出触发器、存储过程等内容,一定需要加上--routines和--events选项。

转载请注明转自:kn007的个人博客的《MySQL 8.0.11的更新之路

donate
有所帮助?

Comments

68 Comments立即评论
  1. LV2回复

    听说8.0性能提升很多。但现在好多转mariadb和postgre的

    1. MOD回复

      @davelv: 是啊,我还在MySQL阵营,因为感觉足够用了。

    2. 回复

      @davelv: mysql文档太糟糕了,和PG不是一个级别

  2. 回复

    password函数也被移除了,之前跳过配置启动直接修改密码的方式也不行了,只有第一次启动看日志找到初始root密码 :cry:

    1. MOD回复

      @boyizmen: 可以啊。看文档。
      你可以配置免密root用户,然后再改密码就好了。

    2. 回复

      @kn007: 移除了,https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-11.html#mysqld-8-0-11-deprecation-removal,你也可以试试在8.0执行看会不会报错 select password('aA12)abc')

    3. MOD回复

      @boyizmen: 我说的不是这个,你初始化的时候,可以选择的。。。
      兄弟,我就是全新安装的。。。我试过可以的。

    4. MOD回复

      @boyizmen: 不大明白,你们为什么要走这种方式。

      按照官方方式来,不好吗?

      可以选择创建空密码root用户,回头设置密码就好了。

    5. 回复

      @kn007: 我是通过yum安装的,官方推荐就是这种方式。。。日志里有初始密码
      https://dev.mysql.com/doc/refman/8.0/en/linux-installation-yum-repo.html

    6. MOD回复

      @boyizmen: yum安装的,我没试过。
      我就想知道,初始化是谁初始化?
      如果是yum初始化,那你就删了初始化,重新初始化就可以了。多看文档,有个insecure选项。

    7. 回复

      @kn007: yum安装不需要初始化的,直接服务启动即可,主要是其他方式安装麻烦 :o ,如果编译安装还要注册服务,添加自启动脚本,其实还是懒 :cry:

    8. MOD回复

      @boyizmen: 那也可以删了初始化,重新初始化啊。。。毕竟就一命令而已。。

    9. MOD回复

      @boyizmen: 启动脚本,在support-files里不就有了,文档也说了。 :grin:

    10. MOD回复

      @boyizmen: 文档地址: https://dev.mysql.com/doc/refman/8.0/en/data-directory-initialization-mysqld.html

      多看文档,而不是就随便看几页。。
      文档不是摆设和套文,都是有用的,有疑问用英文搜索一下就知道了。

    11. 回复

      @kn007: 大哥这个早就看过了,我就是不想弄初始化才用yum安装的

    12. MOD回复

      @boyizmen: 那聊完了,一条命令都不肯打。。那没办法的。

  3. 回复

    :oops: 最糗的是发现多了json类型,以为是新功能,翻了半天更新日志没有,原来在5.7就添加了 :cry:

    1. MOD回复

      @boyizmen: :grin: 感觉都不怎么看release log的。。。

  4. 我已经都转到 MariaDB 了!

    1. MOD回复

      @明月登楼: 转啊,每个人需求不同。

  5. 回复

    :lol: 你的防火墙有什么设置吗?一打开代理 或者 一关闭代理(总之,网络变换)之后,立马无法访问“此网站无法提供安全连接 kn007.net 发送的响应无效”。chrome 66.0

    1. MOD回复

      @mrjoel: 咦,这不是所有https网站都会么 :grin:
      更换网络环境,没加载完的话,可能会这样吧,我自己变换是没问题,但有时卡下网络就会出现

    2. 回复

      @kn007: 我的意思是说,在没清除cookie前就再也打不开了,一直这样提示。此时切换隐身模式照常打开。 没见过其他网站有这种情况 还以为是你防火墙呢

    3. MOD回复

      @mrjoel: 没什么道理吧。。。
      你这么说我也是第一次见,没听到其他小伙伴提到。
      下次遇见麻烦提供下cookie。谢谢

  6. LV2回复

    我更新后一看,吃内存厉害,得,又降回5.7

    1. MOD回复

      @公子: 我是比以前还要低了。。。可能我锁定内存分配了。
      另外8快了非常多。

icon_wink.gificon_neutral.gificon_mad.gificon_twisted.gificon_smile.gificon_eek.gificon_sad.gificon_rolleyes.gificon_razz.gificon_redface.gificon_surprised.gificon_mrgreen.gificon_lol.gificon_idea.gificon_biggrin.gificon_evil.gificon_cry.gificon_cool.gificon_arrow.gificon_confused.gificon_question.gificon_exclaim.gif