Openshift 3 mysql.user表已损坏。请运行mysql_upgrade openshift

时间:2017-10-19 11:48:49

标签: mysql openshift

问题

在OpenShift V3上启动mysql部署时,我遇到以下异常:

mysql.user table is damaged. Please run mysql_upgrade

我无法运行mysql_upgrade因为pod尚未准备就绪。

问题

我有以下问题

  • 如何解决此问题,或
  • 如何备份数据

1 个答案:

答案 0 :(得分:1)

如果pod无法启动,您可以将包含数据的卷装入另一个pod并下载(oc rsyncinteractive tutorial here)您在{{{ 1}}。然后,您可以尝试从中恢复数据。

通常,如果您在较新的MySQL版本上处理较旧的数据库转储/var/lib/mysql/data/脚本(使用sql创建),则可能会发生这种情况。在这种情况下,mysqldump用户也可能从表中删除(如果它不在旧数据库中)。如果您创建了这样的转储,仍然有旧的转储,并且"足够好" ,您应该能够按照以下步骤再次导入原始数据并防止这种情况:

  1. 使用较旧的MySQL数据库版本中的root创建先前创建的数据库转储的备份副本,这样如果事情向南,您可以随时返回它。
  2. 编辑数据库转储mysqldump文件并删除操作sql表的所有内容;也就是说,删除mysql.user-- Table structure for table 'user'部分下的行并保存修改后的文件。我假设您在MySQL部署配置中已在环境变量中指定了您的用户和密码。
  3. 将数据库窗格缩小为0个副本。
  4. 删除你的mysql持久量声明;如上所述,这将删除您将卷安装到另一个窗格后希望下载的数据库。
  5. 以相同名称重新创建PVC。
  6. 将MySQL pod扩展为一个副本。这将初始化数据库并根据环境变量创建用户。
  7. 使用-- Dumping data for table 'user'将步骤2中创建的修改后的sql转储文件(即不影响mysql.user表的文件)复制到数据库窗格。
  8. 在MySQL窗格中,按照this migration guide (step 6)使用上传的文件还原数据库。
  9. oc rsync在应用程序数据库上为您的用户授予所有权限(适当地替换GRANT ALL PRIVILEGES ON <database> TO '<mysql_user>'@'%'<database>。)
  10. 退出pod上的MySQL CLI,然后在shell中运行<mysql_user>