Linux mysql5.5 を mysql5.7 にアップグレードする手順と落とし穴

Linux mysql5.5 を mysql5.7 にアップグレードする手順と落とし穴

Linux MySQL 5.5 が MySQL 5.7 にアップグレードされました

以下では、MySQL をアップグレードするための簡単な手順を紹介します。その後、123WORDPRESS.COM の編集者が、参考になる補足資料をいくつかまとめました。

1. mysql5.7.32をダウンロードする

公式ダウンロードアドレス: https://dev.mysql.com/downloads/mysql/

解凍

tar xvf mysql.tar.gz mysql/

2. 古いmysql binディレクトリに入り、mysqlデータをエクスポートします。

./mysql -uroot -pxxxx -h127.0.0.1 -P3306 </home/mysql5.5/bin/all.sql

3. 新しいmysqlルートディレクトリに入り、データを保存するデータディレクトリを作成します。

mkdirデータ

4. 新しく解凍したデータベースに対して、まず初期化コマンドを実行します。

CD ビン
./mysql_install_db --basedir=../ --datadir=../data

PS: 上記のアップグレードは Cent OS 上で行われましたが、Kylin をアップグレードしたときに、上記のステートメントが認識されず、次の初期化ステートメントに置き換える必要があることがわかりました。

./mysqld --defaults-file=../my.cnf --basedir=../ --datadir=../data --user=root --initialize

5. パスワードをスキップしてログインする

my.cnfの[mysqld]にskip-grant-tablesを追加する
my.cnfはデータベースの設定ファイルです

6. サービスを開始する

./mysqld --defaults-file=../my.cnf --basedir=../ --datadir=../data --user=root

7. パスワードを設定する

新しいコマンドラインウィンドウでmysqlにログインする

./mysql -uroot
mysql を使用します。
mysql.user を更新し、authentication_string=password('xxxx') を設定します。user='root' です。

8. サービスの停止

設定ファイル内のskip-grant-tablesをコメントアウトする

9. サービスを開始する

./mysqld --defaults-file=../my.cnf --basedir=../ --datadir=../data --user=root

10. 新しいコマンドラインログイン

./mysql -uroot -pxxxx
mysql を使用します。

現時点では、どのコマンドを実行しても、常に「このステートメントを実行する前に、ALTER USER ステートメントを使用してパスワードをリセットする必要があります。」というプロンプトが表示されます。
次に次の文を実行します

パスワードの設定 = PASSWORD('xxxx');

11. MySQLに接続するための他のIPアドレスを設定する

mysql を使用します。
*.* のすべての権限を、"xxxx" で識別される "root"@"%" に付与します。

12. 履歴データをインポートする

CD ビン
./mysql -uroot -pxxxx -h127.0.0.1 -P3306 </home/mysql5.5/bin/all.sql

13. アップデートを実行する

CD ビン
./mysql_アップグレード

14. アップグレード後、クエリステートメントでエラーが報告される場合があります。次のステートメントを実行できます。

@@sql_mode を 'STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION' に設定します。
sql_mode を 'STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION' に設定します。

以下は他のネットユーザーからのコメントです

MySQL 5.5 から 5.7 へのアップグレード

最近、MySQL をバージョン 5.5 から 5.7 にアップグレードするタスクがあります。これまでデータベースをアップグレードしたことがないので、試行錯誤しながら進めるしかありません。ネット上でたくさんの情報を見つけました。アップグレードする方法は2つだけです。

1. アップグレード方法

1. 論理アップグレード: mysqldump を使用して SQL ファイルを直接エクスポートし、新しい MySQL5.7 データベースを作成し、エクスポートした SQL ファイルを新しいデータベースにインポートします。もちろん、この方法を使用する場合は、mysqldump ではなく mydumper を使用することをお勧めします。当社では大量のデータがあるため、この方法で処理しませんでした。

2. インプレース アップグレード: このアップグレード方法はシンプルで高速です。元の MySQL インストール ディレクトリと /etc/my.cnf 構成ファイルを直接置き換え、mysql_upgrade スクリプトを使用してシステム テーブルのアップグレードを完了します。

2. 環境の紹介

当社の MySQL クラスターは Atlas の読み取り/書き込み分離を使用しており、MySQL プロキシの下に 4 つのデータベース サーバーがあります。

マスター: 172.16.100.1

スレーブ1:172.16.100.2

スレーブ2:172.16.100.3

奴隷3:172.16.100.4

現在のデータベースバージョン: "5.5.21

設定ファイル: /etc/my.cnf

データディレクトリ: /data/mysql

オペレーティングシステムのバージョン: CentOS6.9

3. アップグレードのアイデア

オンライン業務を中断することはできないため、まずスレーブの 1 つをクラスターから追い出し、MySQL 5.7 にアップグレードすることにしました。次に、MySQL 5.7 デバイスをクラスターに追加しました。データが同期された後、マスター ノードとスレーブ ノードを切り替え、他のスレーブ ノードをアップグレードしました。

4. 練習

4.1. mysql-proxyにログインし、スレーブの1つをクラスタから追い出す

mysql -uuser -ppwd -h127.0.0.1 -P234

バックエンドプロキシライブラリを表示する

mysql> SELECT * FROM backends;

+-------------+-------------------+--------+------+
| backend_ndx | アドレス | 状態 | タイプ |
+-------------+-------------------+--------+------+
| 1 | 172.16.100.1:3306 | アップ | rw |
| 2 | 172.16.100.2:3306 | アップ | ro |
| 3 | 172.16.100.3:3306 | アップ | ro |
| 4 | 172.16.100.4:3306 | アップ | ro |
+-------------+-------------------+--------+------+

セット内の行数は 5 です (0.00 秒)
サービス172.16.100.4をクラスターから除外する
mysql> バックエンド 4 を削除

4.2. MySQLのインストールディレクトリを置き換える

mysqlの公式ウェブサイトにアクセスし、mysql5.7バージョンmysql-5.7.23-linux-glibc2.12-x86_64.tar.gzをダウンロードします。

mysql5.7を解凍する

tar -zxf mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz -C /usr/local/

以前の mysql ディレクトリがリンクとして作成された場合は、リンクをキャンセルして再度リンクするだけです。

/usr/local/ をコピーします

MySQLのリンクを解除

ln -s mysql-5.7.23-linux-glibc2.12-x86_64 mysql

以前の mysql ディレクトリがリンクされていない場合は、名前を変更して別の mysql ディレクトリをリンクします。

/usr/local/ をコピーします

mysql5.5 をアップグレードする

ln -s mysql-5.7.23-linux-glibc2.12-x86_64 mysql (アップグレードにはより便利なので、できるだけこの方法を使用することをお勧めします)

4.3. MySQLサービスを開始する

MySQL 5.7 以降では、データベースを初期化する必要はありません。つまり、mysql_install_db コマンドを実行する必要はありません。

/usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --basedir=/usr/local/mysql --user=mysql --skip-grant-tables --skip-networking &

ps -ef |grep mysql

エラーがある場合はログ情報を確認してください

4.4. システム テーブルのデータ ディクショナリ情報を更新します。コマンドは次のとおりです。

mysql_upgrade は、mysql のアップグレード ディレクトリにあります。

出力は次のようになります。

「ALTER TABLE ** FROCE」というエラー プロンプトが表示される場合がありますが、これらのエラーについては心配しないでください。MySQL は後で自動的に修復します。データベースの状況によっては、修復時間が少し長くなる場合があります。今回はアップグレードに 2 時間以上かかりました。

最後に、出力が「アップグレード プロセスが正常に完了しました」であれば、アップグレードが成功したことを意味します。

4.5. アップグレード後にMySQLを再起動する

/usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --basedir=/usr/local/mysql --user=mysql &

アップグレードが完了したかどうかを確認します。アップグレードが成功した場合、出力は次のようになります。

このMySQLのインストールはすでに5.7.23にアップグレードされています。mysql_upgradeを実行する必要がある場合は、--forceを使用してください。

4.6.マスタースレーブ構成を再構成する

マスタースレーブ構成をやり直す

mysql> マスターを master に変更します。master_host="172.16.100.1",master_user="***",master_passowrd="***",master_log_file=" mysql-bin.000004", master_log_pos=1083;

mysql> スレーブを起動します。

mysql> スレーブステータスを表示します\G;

「はい」が 2 つある場合は正常であることを意味します。

4.7 読み取り書き込み分割クラスタへの参加

mysql-proxyデバイスに移動する

mysql -uuser -ppwd -h127.0.0.1 -P234

mysql>スレーブ172.16.100.4を追加します

mysql> バックエンドから * を選択します。

状態が up の場合、クラスターが正常に参加したことを意味します。

追記:

データベースのアップグレードは初めてで、全体的なアイデアが正しいかどうかわからなかったので、最初にテスト環境でテストし、数日間テストして問題がないことを確認した後、オンラインでアップグレードを実行しました。参考用です。

MySQL 5.5 から 5.7 へのアップグレード中に遭遇した落とし穴

経緯はこうです。当社には、5.5 の古い MySQL バージョンがいくつかあります。最近、プロジェクトがアップグレードされ、いくつかのフィールドが追加されました。spring-data-jpa を使用してテーブル構造を自動的に更新すると、MySQL バージョン 5.5 ではテーブルのデフォルト値として 2 つ以上の current_timestamps をサポートしていないため、エラーが報告されました。したがって、データベースのアップグレードを検討する必要があります

まずサーバーのバージョンを確認してください

もう一度ソースを見てください


ちなみに、弊社はAWSのEC2を利用しているので、ソースはすべてamzから取得しています。

yum update mysql-server を試しましたが、効果がなかったので、続行しました。

オンラインでいろいろと読みましたが、まず古いバージョンのデータベースをアンインストールしてから、新しいバージョンのデータベースをインストールするようにと書いてありました。では、データはどうしたらいいのでしょうか? 安全のため、まずデータベースを 1 つずつバックアップしました。MySQL データベースにも多数のユーザーと権限があることがわかったので、MySQL もバックアップしてから作業を開始しました。

1. データベースをアンインストールする

yum で mysql-server を削除します

しかし、ここでのインストールは異なるようなので、今 yum が見つけたものをすべてアンインストールしました。

アンインストールする前に MySQL サービスをオフにすることを忘れないでください。そうしないと、新しいバージョンをインストールした後、mysql --version を使用して MySQL ログインが 5.7 か 5.5 かを確認し、サービスを再起動すると、さまざまな問題が発生します。一部のファイルが削除されなかったため、新しくインストールされたデータベースは非常に奇妙に見えました。 。 。

2. 新しいデータベースをインストールする

yum 検索 mysql57

まず、利用可能なバージョンを確認してください。これについては何も言うことはありません。

yum インストール msyql57-server.x86_64

インストールしても大丈夫です。何がインストールされているか見てみましょう


奇妙なことに、mysql-config はまだ 5.5 に依存していますが、使用時に問題は見つかりませんでした。

3. 構成

インストール後、次のmy.cnfを変更します。

私のサーバーは /etc/my.cnf にあります。他のイメージが変更されたかどうかはわかりません。

設定時に、データ保存スペースがまだあることをふと思い出し、使えるか確認するために設定してみました。

そこで、my.cnf に次の行を追加しました (5.5 の多くの設定は非推奨になっており、以前の my.cnf は削除する必要があります。そうしないと、起動時にエラーが報告されます)


設定後、サービスを決定的に開始します

サービスmysqldの開始

案の定、私はエラーを報告しました

起動ログを確認しました

[エラー] 致命的なエラー: mysql.user テーブルが破損しています。mysql_upgrade を実行してください。

エラー: Zend_Db_Adapter_Exception: SQLSTATE[HY000] [2002] そのようなファイルまたはディレクトリはありません。さらに、このエラーを報告しようとしたときに例外が発生しました: Zend_Exceptionキー 'translate' のエントリが登録されていません (Abstract.php:144)

しまった、どうすればいいんだ?Google で検索したら、次の記事を見つけました: https://support.plesk.com/hc/en-us/articles/115001659169-MySQL-fails-to-start-mysql-user-table-is-damaged

具体的な解決策は以下のとおりです

a. サーバーホストにログインする

b. /etc/my.cnfファイルの[mysqld]セクションに skip-grant-tables を追加すると、セーフ モードが有効になります (パスワード検証などはありません)。

c. サービスmysqldの開始

d.mysql_アップグレード

e. サービスmysqldを再起動する

mysql_upgradeを実行しました


公式ドキュメントを確認したところ、アップグレード後に互換性がないものが多数あるという一般的な意味です。公式では、以前のワークスペースを修復するためのこのスクリプトを提供しています

アップグレードはシームレスでした。MySQL データベース内のすべてのユーザーは以前のデータベースに残っていたため、影響を受けませんでした。

アップグレードが完了しました

Linux MySQL 5.5 を MySQL 5.7 にアップグレードする詳細な手順に関するこの記事はこれで終わりです。MySQL 5.5 から 5.7 へのアップグレードに関する関連コンテンツの詳細については、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Linux 環境に MySQL 8.0 をインストールするプロセスの紹介
  • Linux環境でよく使われるMySQLコマンドの紹介
  • Linux での MySQL のインストールに関するチュートリアル
  • Linux 環境に mysql5.7.36 データベースをインストールするチュートリアル

<<:  Vue 2.0 の基礎を詳しく解説

>>:  Dockerディスク容量不足の問題を解決する

推薦する

CentOS 7.4 64 ビット版に MySQL 8.0 をインストールして設定するための詳細な手順

ステップ1: MySQL YUMソースを取得するMySQLの公式サイトにアクセスして、RPMパッケー...

DockerでLinuxシェルコマンドを実行する方法

Docker でシェル コマンドを実行するには、コマンドの前に sh -c を追加する必要があります...

NGINXがウェブサイトのPV、UV、独立IPをカウントする方法の詳細な説明

Nginx: PV、UV、独立IPウェブサイトを作成する人なら誰でも、ウェブサイトのPV、UV、その...

MySQL インデックス プッシュダウンを 5 分で学ぶ

目次序文インデックス プッシュダウンとは何ですか?インデックスプッシュダウン最適化の原理インデックス...

Typescript での infer キーワードの使用に関する詳細な理解

目次推測する事例:理解を深める参照する後で忘れないように、キーワード infer をメモしておきます...

クラウドネイティブテクノロジー Kubernetes (K8S) の紹介

目次01 Kubernetes とは何ですか? 02 KubernetesとCompost+Swar...

MySQLデータベースについて学びましょう

目次1. データベースとは何ですか? 2. データベースの分類は? 3. データベースとデータ構造の...

JavaScript のショートカットのヒント

目次1. 配列を結合する2. 配列をマージする(最初に) 3. 配列の複製4. 構造化分解割り当て5...

Vue画像拡大鏡コンポーネントのカプセル化と使用方法の詳細な説明

Vue画像拡大鏡コンポーネントパッケージに基づいて、参考までに具体的な内容は次のとおりです。画像拡大...

CSSは5つの一般的な2D変換を実装します

CSS の 2D 変換を使用すると、移動、回転、拡大縮小、変形などの基本的な変換操作を 2 次元空間...

Centos システムの指定された場所に Nginx をインストールする方法

Centos システムの指定された場所に Nginx をインストールするにはどうすればいいですか?は...

Vue の foreach 配列と js の traversal 配列の書き方の説明

Vue foreach配列を記述し、jsで配列をトラバースする方法シナリオVueでAxiosを使用し...

CSS が初期読み込み時の白い画面の時間に与える影響

外部 CSS ファイルを使用したレンダリング パイプライン上図では、HTML データの要求から DO...

JavaScript におけるセミコロンの詳細

序文JavaScript ではセミコロンはオプションであり、使用するかどうかは主にコーディング スタ...