在MySQL服务器从5.1.51迁移到5.5.10后恢复转储文件会抛出错误1064

在MySQL服务器从5.1.51迁移到5.5.10后恢复转储文件会抛出错误1064,mysql,migration,upgrade,Mysql,Migration,Upgrade,在运行MySQL服务器5.1.51和64位的Windows7机器上,在迁移到5.5.10之前,我使用MySQL Administrator备份了我的整个数据库。安装5.5.10后,我尝试还原转储文件,但它抛出一个错误: ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right synta

在运行MySQL服务器5.1.51和64位的Windows7机器上,在迁移到5.5.10之前,我使用MySQL Administrator备份了我的整个数据库。安装5.5.10后,我尝试还原转储文件,但它抛出一个错误:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TYPE = MyISAM  DEFAULT CHARSET latin1 COLLATE latin1_german1_ci  ; SELECT co_n' at line 9"
我尝试通过几个MySQL应用程序工作台、SQLYog和命令行进行恢复,但都抛出相同的错误。它还会抛出一些警告,但这些警告不会显示

两个问题:

当然,你能帮我解决这个问题吗?我是否必须以某种方式编辑sql转储文件?不过这很麻烦,因为它超过3GB。我以为我已经遵循了MySQL文档中提到的所有升级步骤,所以现在我有点沮丧和害怕数据丢失

从命令行还原时,如何使mysql.exe将所有警告和错误记录到文本文件中

意见1

MySQL在从以前的主要版本迁移数据时提供升级脚本。我通常不使用它们。以下是我从一个主要版本迁移到另一个主要版本时所做的操作:

mysqldump除了mysql模式之外的所有数据库。不同主要版本的mysql模式是不同的

从MySQL 5.5.10的新安装开始

从mysql转储中加载除mysql 5.5.10中的mysql之外的所有数据库

那么mysql模式呢?你可以用一种非常特殊的方式把它扔掉

这就是我为Linux所做的,从mysql 5.1.51中转储mysql模式:

mysql -h... -u... -p... --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql -h... -u... -p... --skip-column-names -A | sed 's/$/;/g' > MySQLGrants51.sql
这将生成所有SQL GRANT命令以重新创建用户和权限

由于您使用的是Windows,因此可以执行以下操作:

mysql -h... -u... -p... --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql -h... -u... -p... --skip-column-names -A > C:\MySQLGrants51.sql
您必须在记事本中编辑C:\MySQLGrants51.sql,以便文件的每一行都以分号结尾

现在进入MySQL 5.5.10的客户端并运行

源C:\MySQLGrants51.sql

意见2

错误1064 42000:您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解使用near'TYPE=MyISAM DEFAULT CHARSET latin1 COLLATE latin1\u german1\u ci的正确语法


此错误消息具有“TYPE=MyISAM”。不应该读“ENGINE=MyISAM”吗?

您需要做的是使用mysqldump工具重复转储。这是唯一能够进行非无用转储的工具。其他GUI工具也尝试过,但失败了,因为它们没有经过充分的测试,特别是在这种情况下


将您的转储文件放入Bin,并使用mysqldump创建一个新的转储文件。首选使用5.5版本的mysqldump。

hi rolando,1:事实上,我只转储了我的数据库,我认为这应该没问题,因为我没有覆盖mysql和其他模式?2:也许你是对的,但是我自己没有写转储文件,那么为什么mysql转储会产生错误呢?TYPE=MyISAM对mysql 4.x是向后兼容的。尝试编辑每个CREATE TABLE语句末尾的all TYPE=以表示ENGINE=insteadok,我将尝试替换这些,但怀疑这是否是错误的原因,因为我希望5.5与反向语法兼容。另一个问题:用旧的5.1.51版本覆盖新服务器的数据文件夹,然后运行mysql_升级,这也行吗?我通常不使用它们。这应该行得通,但我听到很多抱怨。顺便说一句,我有MySQL 5.1和MySQL 5.5的客户端。我刚刚运行了show变量,比如“table_type”;。这个变量在MySQL 5.5中不存在。虽然我已经解决了这个问题,但我发现您的建议对下次非常有用。谢谢