从 5.5.20 到 5.0.XX 服务器的复制是否有效?

vin*_*nny 5 mysql replication mysql-5 mysql-5.5

我给了两台运行在两个完全不同版本的 MySQL 服务器上的机器。我想从 5.5.20 复制到 5.0 服务器。那有可能吗?

因为我记得当我从 5.0 传输数据到 5.5.20 时,我必须运行命令upgrade table才能在 5.5.20 上工作?

如果无法复制,请建议最好的方法。

Rol*_*DBA 7

是不可能的。原因?

二进制日志不兼容。

更具体地说,二进制日志不向后兼容。

原因如下:

一个空的二进制文件...

  • MySQL 5.0 和后面是 98
  • MySQL 5.1 是 106
  • MySQL 5.5 是 107

我参考了 ServerFault 中的这个细微差别

您可以设置从较旧 MySQL 版本到较新 MySQL 版本的复制,而不是相反。

如果您需要将 MySQL 5.5 中的数据移植回旧版本,则只能求助于 mysqldump 除 mysql 架构之外的所有数据库。

DBLIST=`mysql -u... -p... -AN -e"select group_concat(schema_name separator ' ') from information_schema.schemata where schema_name not in ('information_schema','mysql')"`
MYSQLDUMP_OPTIONS="--add-drop-database"
MYSQLDUMP_OPTIONS="${MYSQLDUMP_OPTIONS} --single-transaction"
MYSQLDUMP_OPTIONS="${MYSQLDUMP_OPTIONS} --routines --triggers"
mysqldump -u... -p... ${MYSQLDUMP_OPTIONS} --databases ${DBLIST} > MySQLData.sql
Run Code Online (Sandbox Code Playgroud)

您可以使用pt-show-grants将授权提取为 SQL 。这是我的个人模拟,如果它:

mysql -u... -p... --AN -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql -u... -p... --skip-column-names -AN | sed 's/$/;/g' > MySQLUserGrants.sql
echo "flush privileges;" >> MySQLUserGrants.sql
Run Code Online (Sandbox Code Playgroud)

您必须将授权转储为 SQL 的原因是 mysql.user 表中的列在升级时发生更改。

当你这样做desc mysql.user;select count(1) from information_schema.columns where table_schema='mysql' and table_name='user';你得到以下信息时:

  • MySQL 5.0 中的 37 列
  • MySQL 5.1 中的 39 列
  • MySQL 5.5 中的 42 列

mysql 升级所做的只是改变 mysql.user 以适应新的权限。执行授权转储会产生独立于 mysql.user 布局的 SQL。

一旦您制作了这两个转储文件(MySQLData.sqlMySQLUserGrants.sql),只需将它们加载到旧 MySQL 版本的新安装中即可。