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 を自動的にバックアップする方法

推薦する

DockerコンテナのIPアドレスを表示する方法

私はずっとDockerにはIPアドレスがないと思っていました。実はDockerのネットワークテンプレ...

XHTML CSSを使用して正式なブログを書く

ブログの正式名称は「Web log」で、中国語で「ネットワークログ」を意味します。後にブログに短縮さ...

LeetCode の SQL 実装 (182. 重複するメールボックス)

[LeetCode] 182.重複メールPerson という名前のテーブル内のすべての重複メールを...

Nofollowタグの書き方と使い方

「nofollow」タグは数年前に Google、Yahoo、Microsoft によって提案されま...

Vueはチャットインターフェースを実装する

この記事の例では、チャットインターフェースの表示を実現するためのVueの具体的なコードを参考までに共...

Linux ソフトウェアのインストール場所を確認する簡単な方法

1. ソフトウェアのインストールパスを確認します。 Linuxソフトウェアをインストールできる場所は...

フロントエンドアプリケーションのjenkins+gitlab+nginxデプロイメント

目次関連する依存関係のインストールドッカーDockerでJenkinsをインストールするDocker...

Ubuntu 20.04 CUDA & cuDNN のインストール方法 (グラフィカル チュートリアル)

CUDA インストール cuda をダウンロードサポートされているcudaバージョンを表示するには...

Linux での Apache サービスの展開と構成

目次1 Apacheの役割2 Apacheのインストール3. Apacheを有効にする4 Apach...

VMware vSAN 入門概要

1. 背景1. vSphere の共有ストレージの背景を簡単に紹介するvSphere の重要な機能は...

Vue プロジェクトの最初の画面のパフォーマンス最適化コンポーネントの実践ガイド

目次Vue ファースト スクリーン パフォーマンス最適化コンポーネント説明するインターセクションオブ...

Linuxフラッシュのインストール方法

Linuxにフラッシュをインストールする方法1. Flashの公式サイトにアクセスし、ダウンロードを...

ルート変更を監視するJavaScriptの詳細な説明

目次歴史pushState() メソッドpushState() の使用シナリオreplaceStat...

MySQL 1対多関連クエリのページングエラー問題の解決方法

XML価格照会のクエリデータにはリストが含まれているため、コレクションが必要です <結果マップ...

Nginx 仮想ホスト (IP ベース) を構成する 3 つの方法の詳細な説明

Nginx は、IP ベースの仮想ホスト構成、ポート ベースの仮想ホスト構成、ドメイン名ベースの仮想...