MySQL从5.0升级到5.5

我想从版本5.0(我有5.0.86)升级到5.5(比如5.5.17)

经过一番search,我发现这个方法:

  1. 转储数据库,但不是在backup_data.sql中的mysql数据库
  2. 这是最重要的一步:在一个文件(可以说mysql.sql)中使用选项--complete-insert--no-create-info来转储mysql数据库:想法是获得一个类似于安装5.5版本从零开始创build用户。
  3. 卸载5.0 – 安装5.5
  4. 恢复mysql数据库并刷新权限来恢复它。
  5. 恢复其他数据库。

我的问题发生在第4步:当我这样做:

 mysql -u root mysql < mysql.sql 

我得到关于重要主要重复条目的错误。 当我转储MySQL数据库没有选项--complete-insert--no-create-info --complete-insert --no-create-info ,恢复工作正常,但我获得一个SQL数据库不同,如果我创build一个新的5.5安装程序,这不是我想要的。

任何关于这个问题或任何build议的想法?

你不能mysqldump的mysql模式,只是导入到更高的版本。 为什么? 在DBA StackExchange中,我在一年前回答了这个问题: 无法以root身份授予权限 。 简而言之, mysql.user表对于每个主要版本的MySQL都有不同的列数:

  • 在MySQL 5.6中有43列
  • MySQL 5.5中有42列
  • MySQL 5.1中有39列
  • MySQL 5.0中有37列
  • MySQL 4.x中的31列
  • 看到我的答案看到专栏

你可以做的是使用以下两种技术之一来转储mysql.user

技术#1

使用以下Percona工具之一

  • PT-显示赠款
  • MK-显示赠款

将任一程序的输出回复到文本文件。

技术#2

您可以按如下方式模拟pt-show-grants

 cd MYSQL_CONN="-uroot -ppassword" SQLSTMT="SELECT CONCAT('SHOW GRANTS FOR '," SQLSTMT="${SQLSTMT} QUOTE(user),'@',QUOTE(host),';') " SQLSTMT="${SQLSTMT} FROM mysql.user WHERE user<>''" mysql ${MYSQL_CONN} -ANe"${SQLSTMT}" > GetGrants.sql echo "SET sql_log_bin = 0;" > MySQLUserGrants.sql mysql ${MYSQL_CONN} -AN < GetGrants.sql | sed 's/$/;/g' >> MySQLUserGrants.sql rm -f GetGrants.sql 

这是将补助金从版本迁移到最简洁,最安全的方式。 我已经成功将MySQL 5.0升级到MySQL 5.1 / 5.5。 你不能去MySQL 5.0到MySQL 5.6,因为恕我直言,16个字符的PASSWORD()函数哈希不可通过old_password。 如果您拥有所有用户的纯文本密码,只需使用IDENTIFIED BY 'plaintext password'编辑MySQLUserGrants.sqlreplaceIDENTIFIED BY PASSWORD '16-char hash' IDENTIFIED BY 'plaintext password' 。 然后你可以在MySQL 5.6中执行它。 完成后,快速删除MySQLUserGrants.sql。

备份mysql。*数据库。 用--replace标志重新导出你的mysql数据库并重新导入。 如果没有达到预期的效果, 请查看此post上有关倾销赠款的脚本。