1. 升级
1)升级的时候应该先升级replica
2)如果source使用的语句和依赖的行为在replica上不支持,即使replica已经升级成功也会导致复制出现问题
3)对5.7和8.0版本可以使用工具util.checkForServerUpgrade()来检查升级需要解决的一些问题,然后依个解决
	a) MySQL Shell 8.0.20需要有all权限,从MySQL Shell 8.0.21开始需要有reload,process,select权限
	b) mysqlsh> util.checkForServerUpgrade('user@example.com:3306', {"password":"password", "targetVersion":"8.0.27", "configPath":"/etc/my.cnf","outputFormat":"JSON"})
	c) mysqlsh -- util checkForServerUpgrade user@localhost:3306 --target-version=8.0.27 --config-path=/etc/my.cnf --output-format=JSON
4)如果sql mode是STRICT_TRANS_TABLES或者STRICT_ALL_TABLES,可能会导致已经升级的replica发生复制失败
5)如果使用了binlog_format=STATEMENT,replica升级后可能导致语句能在source上source上执行成功,但是在replica上执行失败
	a. 在source停止所有新的语句,等待replicas赶上之后进行升级replica
	b. 如果不能停止新的语句,临时修改binlog_format=ROW,等待所有的replica处理完到该更改点为止的所有的binlog然后执行replica升级
6)8.0中默认字符集从latin1变成了utf8mb4,如果从5.7升级到8.0的时候,可以在配置文件中指定字符集为latin1
	[mysqld]
	character_set_server=latin1
	collation_server=latin1_swedish_ci
7)标准升级步骤
	a). 先升级replica,每个replica上执行下面的步骤
		i. 做初步检查(参考《mysql升级前准备》
		ii. 关闭mysql服务器
		iii. 升级mysql的binaries或者packages
		iv. 重启mysql服务器
		v. 检查
			① 如果升级到8.0.16之前的版本,使用mysql_upgrade更新系统表和架构,然后关掉服务器,并重启服务器(如果开启了gtid,不要开启二进制日志记录,不要使用--write-binlog选项)
			②如果升级到8.0.16或者之后的版本,不用执行mysql_upgrade
		vi. 使用start replica或者start slave启动复制
	b). 所有的replica都升级完成之后,按照同样的步骤升级source
8)升级过程中有表repair或者rebuild(例如:collation改变需要表的索引rebuilt,可以分别在source和每个replica上执行这些操作)
	a) 停掉所有的replicas,升级binaries和packages,使用启动参数--skip-slave-start或者skip_slave_start系统参数启动数据库,执行数据库对象的重建
	b) 在source上Disable二进制日志,使用启动参数--skip-log-bin或者系统参数sql_log_bin=off启动数据库,执行对象重建,如果需要断开用户tcp/ip连接,使用skip_networking系统变量
	c) 在source上re-enable二进制日志,去掉--skip-log-bin或者sql_log_bin=on,去掉skip_networking系统变量
	d) 重启replicas,去掉--skip-slave-start或者skip_slave_start系统变量
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  1. 降级
1)降级的时候应该先降级master,
2)降级之前必须确保relica上的binlog和relay log已经完全应用并且移除他们
  • 1.
  • 2.