Docker の MySQL コンテナのタイムゾーン問題の修正

Docker の MySQL コンテナのタイムゾーン問題の修正

序文

Ahhang が Springboot プロジェクトを開発していたとき、フロントエンドから検証コードが常に無効であると通知されました。ローカル テストでは問題はありませんでしたが、リモート サーバーのデータベース時間を確認すると、なんと 8 時間も早まっていました。明らかに、これは MySQL のタイム ゾーンの問題でした。この記事では、Docker で MySQL コンテナのタイム ゾーンを変更する方法を説明します。

解決

まず、データベースのタイムゾーンが本当に間違っているかどうかを確認しましょう。MySQL データベースに入り、次のステートメントを実行します。

今すぐ選択();

次のようなデータが返されます:

mysql> NOW() を選択してください。
+---------------------+
| 今() |
+---------------------+
| 2020-07-04 15:46:46 |
+---------------------+
セット内の1行(0.09秒)

現在のタイムゾーンを確認するには、次のコマンドを入力します。

'%time_zone%' のような変数を表示します。

次のようなデータが返されます:

mysql> '%time_zone%' のような変数を表示します。
+------------------+--------+
| 変数名 | 値 |
+------------------+--------+
| システムタイムゾーン | UTC |
| タイムゾーン | +00:00 |
+------------------+--------+
セット2行(0.12秒)

返された時間があなたの時間と数時間異なり、タイムゾーンが正しくない場合(+08:00 ではない場合)、下を見る必要があることを意味します。

方法1: 一時的な変更

緊急に必要になった場合は、この一時的な変更を行うことができます。次のコマンドを実行します。

グローバルタイムゾーンを '+8:00' に設定します。

次のコマンドを再度実行して、返された結果が現在の時刻であることを確認します。

今すぐ選択();

現在の時刻を返すことで、変更が成功したことが証明されます。

この方法が「一時的な変更」と呼ばれる理由は、MySQL を再起動すると変更が無効になるためです。

方法2: 起動時にパラメータを追加する

この方法は、MySQL コンテナを再作成できる条件に適用されます。

コンテナを作成するときに、タイムゾーンを指定するコマンドを追加する必要があります (東部標準時ゾーン 8 は上海ですが、必要に応じて独自のタイムゾーンに変更できます)。

-e TZ=アジア/上海

したがって、完全な docker run コマンドは次のようになります (参考用であり、実際の実行コマンドは若干異なる場合があります)。

docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -e TZ=Asia/Shanghai -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0

各パラメータの目的を確認するには、私の記事「Docker で MySQL をインストールする」をご覧ください。

方法3: コンテナ内の構成を変更する

次のように入力して、mysql コンテナに入ります。

docker exec -it コンテナID bash

MySQL 構成ファイルを変更します (2 つのケース):

テキストエディタで /etc/mysql/mysql.conf.d を開きます。

または

テキストエディタで /etc/mysql/my.cnf を開きます。

上記のコマンドで bash: vim: command not found が返される場合は、まず Docker コンテナに vim コマンドがない場合の解決策をお読みください。

設定ファイルを入力したら、i をクリックして編集モードに入り、設定ファイルの行を追加します。

デフォルトのタイムゾーン = '+08:00'

図示のとおり:

プロフィールを追加する

完了したら、ESC キーを押して :wq と入力し、保存して終了します。

次に、exit と入力して Docker コンテナを終了します。

次に、mysql コンテナを再起動する必要があります。次のコマンドを入力します。

docker コンテナ ID を再起動

これまでのところ、タイムゾーン構成は正常に変更されました。

再起動後、次のコマンドを入力して成功を確認します。

今すぐ選択();

返された時刻が現在の時刻と一致する場合、変更は成功します。

結論

お急ぎの場合は方法1を、お急ぎでない場合は方法2をおすすめします。ご都合に合わせてお選びください。

Docker の MySQL コンテナのタイムゾーン問題を修正する方法についての記事はこれで終わりです。Docker の MySQL コンテナのタイムゾーンの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • DockerにMySQL 8.0をインストールする方法
  • docker-compose を使用して MySQL を実行する方法
  • MySQL 5.7 の Docker バージョンを MySQL 8.0.13 にアップグレードし、データを移行する
  • Docker を使用した MySQL のデプロイの詳細説明 (データ永続化)
  • DockerでMySQLコンテナを作成する簡単な手順
  • Docker環境でMySQLを実行し、Binlogを有効にしてマスタースレーブ同期を構成する方法

<<:  クールな花火効果を実現するjs

>>:  Linux でリモートから MySQL を自動的にバックアップする方法

推薦する

Windows で mysql-8.0.18-winx64 をインストールするチュートリアル (画像とテキスト付き)

1. インストールパッケージをダウンロードするインストール パッケージは次の場所にあります:参考:...

MySQL PXC は IST 送信のみで新しいノードを構築します (推奨)

需要シナリオ: 既存の PXC 環境には大量のデータがあります。新しく購入したサーバーをこのクラスタ...

JDBC が MySQL に接続して中国語を処理するときに文字化けする問題の解決方法の詳細説明

JDBC が MySQL に接続して中国語を処理するときに文字化けする問題の解決方法の詳細説明最近、...

水平プログレスバーの最後にテキストを表示するための実装コードの CSS 記述

問題の説明仕事で以下の成果を達成したいと考えています。 解決div タグに相対配置を追加し、絶対配置...

CSSスプライト技術は複数の背景を1つのPNG画像に統合しますCSSポジショニング

アメリカのYAHOOがページ制作で使用している画像統合技術。これらのアイコン、列背景、画像ボタンを定...

HTML に埋め込まれた Flash HTML ウェブページ コードに Flash ファイルを埋め込むソリューション (パート 2)

上の記事で、SWFObject V1.5 の使い方の紹介は一旦終了です。これから、SWFObject...

innerHTML を理解する

<br />関連記事: innerHTML HTML DOM insertRow() メ...

vueプロジェクトのマルチ環境設定(.env)の実装

目次マルチ環境構成とは何ですか? また、なぜそれが必要なのですか? .env ファイルはどこで設定さ...

MySQL における楽観的ロックと悲観的ロックの例

データベース管理システムにおける同時実行制御のタスクは、データベース内の同じデータに同時にアクセスす...

Vue でのルーティングガードの具体的な使用法

目次1. グローバルガード1.1 グローバルフロントガード1.2 グローバルポストルートガード1.3...

MySQLは複数テーブル関連統計(サブクエリ統計)の例を実装します

この記事では、例を使用して、MySQL で複数テーブルの関連統計を実装する方法について説明します。ご...

MySQL 8.0.18 はクローンプラグインを使用して MGR 実装を再構築します

3 ノード MGR 内の 1 つのノードに異常があり、MGR クラスターに再度追加する必要があるとし...

div+css3 を使用して背景グラデーション ボタンを実装するためのサンプル コード

フロントエンド ページの需要が増加し続けるにつれて、一部のシーンではグラデーションの背景要素が必要に...

Vue+js はビデオのフェードインとフェードアウト効果を実現します

Vue+jsはビデオのフェードインとフェードアウトを実現します。参考までに、具体的な内容は次のとおり...

CentOS 6.8 に MySQL 8.0.18 をインストールするチュートリアルの簡単な分析 (RPM 方式)

今日は、CentOS 6.8 サーバーに MySQL 8.0.18 をインストールする方法を記録しま...