我想从版本5.0(我有5.0.86)升级到5.5(比如5.5.17)
经过一番search,我发现这个方法:
--complete-insert和--no-create-info来转储mysql数据库:想法是获得一个类似于安装5.5版本从零开始创build用户。 我的问题发生在第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.user :
使用以下Percona工具之一
将任一程序的输出回复到文本文件。
您可以按如下方式模拟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上有关倾销赠款的脚本。