方法 #1

方法 #1

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

经过一番搜索,我发现了这个方法:

  1. 在 backup_data.sql 中转储数据库但不转储 mysql 数据库
  2. 这是最重要的一步:使用选项转储 mysql 数据库--complete-insert并将--no-create-info其保存在文件中(假设为 mysql.sql):其想法是获取一个 sql 数据库,类似于从头开始设置 5.5 版本然后创建用户。
  3. 卸载 5.0 - 安装 5.5
  4. 恢复 mysql 数据库并刷新权限以恢复它。
  5. 恢复其他数据库。

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

mysql -u root mysql < mysql.sql

我收到关于主键重复条目的错误。当我转储没有选项--complete-insert和的mysql 数据库时--no-create-info,恢复工作正常,但我得到的 sql 数据库与使用新的 5.5 设置创建的数据库不同,这不是我想要的。

对这个问题有什么想法或建议吗?

答案1

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

您可以mysql.user使用以下两种技术之一进行转储:

方法 #1

使用以下 Percona 工具之一

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

技巧 #2

你可以模仿pt-show-赠款如下:

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 个字符的密码()函数 hash 无法通过 old_password 获得。如果您拥有所有用户的纯文本密码,只需编辑 MySQLUserGrants.sql 并将其替换IDENTIFIED BY PASSWORD '16-char hash'IDENTIFIED BY 'plaintext password'。然后您可以在 MySQL 5.6 中执行它。完成后,快速删除 MySQLUserGrants.sql。

答案2

备份 mysql.* 数据库。使用标志重新导出 mysql 数据库--replace并重新导入。如果没有达到预期效果,查看此帖子中有关转储补助金的脚本。

相关内容