OpenShift3“容器MYSQL经常崩溃”

时间:2017-12-09 06:37:01

标签: mysql openshift openshift-3 openshift-online

在openshift3中,我正在托管Java应用程序。 我创建了MYSQL并删除了,现在我想再次创建MYSQL,但它显示错误“容器MYSQL频繁崩溃”。 我附上图片供参考。 "SQLCrash_Image" "ConsoleOutput_Image" 新图片: - "Monitoring&Events_Image" "Logs_image" "Monitoring&Events_Image2" 任何人都可以帮忙解决这个问题吗?

日志:

D:\Openshift ocCommands>oc get pods
NAME             READY     STATUS             RESTARTS   AGE
mysql-2-deploy   0/1       Error              0          9h
mysql-3-9rmt3    0/1       CrashLoopBackOff   4          2m
mysql-3-deploy   1/1       Running            0          2m

D:\Openshift ocCommands>oc logs mysql-3-9rmt3
error: Invalid MySQL username
You must either specify the following environment variables:
MYSQL_USER (regex: '^[a-zA-Z0-9_]+$')
MYSQL_PASSWORD (regex: '^[a-zA-Z0-9_~!@#$%^&*()-=<>,.?;:|]+$')
MYSQL_DATABASE (regex: '^[a-zA-Z0-9_]+$')
Or the following environment variable:
MYSQL_ROOT_PASSWORD (regex: '^[a-zA-Z0-9_~!@#$%^&*()-=<>,.?;:|]+$')
Or both.
Optional Settings:
MYSQL_LOWER_CASE_TABLE_NAMES (default: 0)
MYSQL_LOG_QUERIES_ENABLED (default: 0)
MYSQL_MAX_CONNECTIONS (default: 151)
MYSQL_FT_MIN_WORD_LEN (default: 4)
MYSQL_FT_MAX_WORD_LEN (default: 20)
MYSQL_AIO (default: 1)
MYSQL_KEY_BUFFER_SIZE (default: 32M or 10% of available memory)
MYSQL_MAX_ALLOWED_PACKET (default: 200M)
MYSQL_TABLE_OPEN_CACHE (default: 400)
MYSQL_SORT_BUFFER_SIZE (default: 256K)
MYSQL_READ_BUFFER_SIZE (default: 8M or 5% of available memory)
MYSQL_INNODB_BUFFER_POOL_SIZE (default: 32M or 50% of available memory)
MYSQL_INNODB_LOG_FILE_SIZE (default: 8M or 15% of available memory)
MYSQL_INNODB_LOG_BUFFER_SIZE (default: 8M or 15% of available memory)

 For more information, see https://github.com/sclorg/mysql-container

1 个答案:

答案 0 :(得分:1)

如何诊断崩溃循环

以下是我建议遵循的步骤。如果您可以在每个步骤中提供日志的输出,那么我们将帮助我们查看问题。

步骤1:安装OC客户端

只有到目前为止,您才能通过用户界面,您需要oc客户端进行更深入的故障排除。

首先,通过Web界面登录您的群集。选择屏幕右上角的问号,然后选择“命令行工具”

Screenshot of CLI Instructions for OpenShift

按照说明下载并安装客户端。

第2步:显示当前窗格

一旦您获得了客户端并登录,请运行:

oc get pods

哪个应显示pod名称列表。请将问题的内容粘贴到您的问题中(作为文字,而不是图片!)

步骤3:找到崩溃的pod并获取其日志

你有一个正在崩溃的pod,它将被称为mysql-2-6c009。我们需要它的日志。粘贴输出:

oc logs mysql-2-6c009

步骤4:如果找不到pod,请重新部署

如果由于部署失败而无法再看到该窗格,请尝试运行:

oc rollout latest mysql

然后再次运行oc get pods,直到看到崩溃的广告连播。

第5步:解决问题!

日志显示问题,您没有指定正确设置数据库所需的环境变量。如果我们检查文档,我们可以看到相同的] OpenShift - MySQL](https://docs.openshift.com/enterprise/3.0/using_images/db_images/mysql.html#environment-variables):

  

您必须指定用户名,密码和数据库名称。如果您未指定全部三个,则pod将无法启动,OpenShift将继续尝试重新启动它。

要设置值,请尝试以下操作:

oc set env dc/mysql MYSQL_USER=user MYSQL_PASSWORD=P@ssw0rd MYSQL_DATABASE=db1

这将使用变量更新您的部署配置。如果您在配置更改时将其配置为更新,则应自动重新部署,如果不运行,则应自动重新部署:

oc rollout latest

将来,您可以使用首先设置的环境变量创建应用程序,如下所示:

oc new-app -e \
MYSQL_USER=<username>,MYSQL_PASSWORD=<password>,MYSQL_DATABASE=<database_name> \
registry.access.redhat.com/openshift3/mysql-55-rhel7

有关详细信息,请参阅these docs

日志显示:

提示和技巧

pod名称的工作原理

豆荚的名称可以提供一些细节。以下是它们的工作原理:

mysql-2-deploy

这意味着它是msql服务的第二个部署。这是编制特定部署的pod。

mysql-2-6c009

这意味着它是在第二次部署期间部署的mysql服务。最后的六位数字来自pod id,它们必须在那里,因为你可以将许多服务实例部署到许多pod。

看着豆荚

随着您越来越熟悉命令行工具,您可能会发现自己正在运行oc get pods和类似的命令。如果你是linux,你可以使用watch工具来帮助(在Mac上,只做brew install watch)。然后运行:

watch -n 1 -d oc get pods

此命令将显示pod的实时视图,每秒更新一次:

watch       # run the following command repeatedly, showing the output
-n 1        # run every second (this is optional, the default is 2s)
-d          # show a diff, highlighting the changes as they happen
oc get logs # the command to watch

这个命令非常有用,你会经常使用它!

快速获取pod的日志

试试这个bash函数:

function podlogs() {
  echo "Getting logs for $1 for the last $2 duration"
  oc logs -f --since=$2 `oc get pods | grep $1 | grep 'Running' | grep -Ev 'deploy' | awk '{print $1}'`
}

它允许你运行这样的命令:

# get all logs for containers which match 'mysql' for the last 5 mins
podlogs mysql 5m

向我的好友Praba致敬,获得最后一个提示。

请使用相关日志更新问题,我们可以从那里获取!