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 上工作?
如果无法复制,请建议最好的方法。
是不可能的。原因?
二进制日志不兼容。
更具体地说,二进制日志不向后兼容。
原因如下:
一个空的二进制文件...
我参考了 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 升级所做的只是改变 mysql.user 以适应新的权限。执行授权转储会产生独立于 mysql.user 布局的 SQL。
一旦您制作了这两个转储文件(MySQLData.sql和MySQLUserGrants.sql),只需将它们加载到旧 MySQL 版本的新安装中即可。