• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 升级复制设置

    升级参与复制设置的服务器时,升级过程取决于当前服务器版本和要升级到的版本。本节提供有关升级如何影响复制的信息。有关升级MySQL的一般信息,请参见“升级MySQL

    从较早的MySQL版本系列将主服务器升级到8.0时,首先应确保该主服务器的所有从服务器都使用相同的8.0.x版本。如果不是这种情况,则应首先升级从站。要升级每个从属服务器,请将其关闭,将其升级到适当的8.0.x版本,重新启动它,然后重新启动复制。从站在升级后创建的中继日志为8.0格式。

    影响严格SQL模式(STRICT_TRANS_TABLESSTRICT_ALL_TABLES)的操作的更改可能会导致升级后的从属服务器上的复制失败。如果您使用基于语句的日志记录(binlog_format=STATEMENT),则如果从属服务器在主服务器上进行了升级,则未升级的主服务器将执行无错误的语句,这可能会导致从属服务器失败并且复制将停止。为了解决这个问题,请在主服务器上停止所有新语句,然后等待从服务器追上。然后升级奴隶。或者,如果您不能停止新语句,则暂时更改为主服务器(binlog_format=ROW)上的基于行的日志记录,并等待直到所有从属服务器都处理了生成的所有二进制日志为止。然后升级奴隶。

    在MySQL 8.0中,默认字符集已从更改latin1utf8mb4。在复制设置中,从MySQL 5.7升级到8.0时,建议在升级之前将默认字符集改回MySQL 5.7中使用的字符集。升级完成后,可以将默认字符集更改为utf8mb4。假设使用先前的默认值,保留它们的一种方法是使用my.cnf文件中的以下行启动服务器:

    [mysqld]
    character_set_server=latin1
    collation_server=latin1_swedish_ci
    

    从属服务器升级后,关闭主服务器,将其升级到与从属服务器相同的8.0.x版本,然后重新启动它。如果您已将主数据库临时更改为基于行的日志记录,请将其更改回基于语句的日志记录。8.0主服务器能够读取升级之前编写的旧二进制日志,并将其发送到8.0从服务器。从站识别旧格式并正确处理它。主机在升级后创建的二进制日志为8.0格式。这些也被8.0从站识别。

    换句话说,升级到MySQL 8.0时,从属服务器必须是MySQL 8.0,然后才能将主服务器升级到8.0。请注意,从8.0降级到较旧的版本并非如此简单:您必须确保已完全处理任何8.0二进制日志或中继日志,以便可以在继续降级之前将其删除。

    从一个MySQL系列迁移到另一个MySQL系列时,某些升级可能需要删除并重新创建数据库对象。例如,排序规则更改可能需要重建表索引。如有必要,此类操作在“ MySQL 8.0中的更改”中进行了详细介绍。最安全的做法是分别在从站和主站上执行这些操作,并禁用这些操作从主站到从站的复制。为此,请使用以下过程:

    1. 停止所有从属并升级它们。使用--skip-slave-start选项重新启动它们,以使它们不连接到主机。执行重新创建数据库对象所需的任何表修复或重建操作,例如使用REPAIR TABLEALTER TABLE或转储和重新加载表或触发器。
    2. 在主数据库上禁用二进制日志。为此,无需重新启动主服务器,请执行一条SET sql_log_bin = OFF语句。或者,停止主服务器,然后使用--skip-log-bin选件重新启动它。如果重新启动主服务器,则可能还希望禁止客户端连接。例如,如果所有客户端都使用TCP / IP连接,则skip_networking在重新启动主服务器时启用系统变量。
    3. 禁用二进制日志后,执行重新创建数据库对象所需的任何表修复或重建操作。在此步骤中必须禁用二进制日志,以防止以后记录这些操作并将其发送给从站。
    4. 重新启用主服务器上的二进制日志。如果设置sql_log_binOFF更早,请执行一条SET sql_log_bin = ON语句。如果重新启动了主服务器以禁用二进制日志,请在--skip-log-bin不启用且不启用skip_networking系统变量的情况下重新启动它,以便客户端和从属计算机可以连接。
    5. 重新启动从站,这次没有--skip-slave-start选项。

    如果要将现有的复制设置从不支持全局事务标识符的MySQL版本升级到支持全局事务标识符的版本,则在确保设置满足GTID的所有要求之前,不应在主服务器或从属服务器上启用GTID。基于的复制。请参见“使用GTID设置复制”,其中包含有关将现有复制设置转换为使用基于GTID的复制的信息。

    在MySQL 8.0.16之前的版本中,当服务器在启用全局事务标识符(GTID)的情况下运行(gtid_mode=ON)时,请勿通过mysql_upgrade(该--write-binlog选项)启用二进制日志记录。从MySQL 8.0.16开始,服务器执行整个MySQL升级过程,但是在升级过程中禁用二进制日志记录,因此没有问题。

    gtid_mode=ON如果转储文件包含系统表,则不建议在服务器()上启用GTID时加载转储文件。mysqldump为使用非事务性MyISAM存储引擎的系统表发出DML指令,并且在启用GTID时不允许这种组合。还应注意,将一个启用了GTID的服务器中的转储文件加载到另一个启用了GTID的服务器中,会导致生成不同的事务标识符。