web-dev-qa-db-ja.com

MySQLは5.0.88を最新バージョンにアップグレードします

5.0.88から最新バージョンへのアップグレードに関して質問があります。

  1. なぜアップグレードする必要があるのですか?
  2. その場合、どのバージョンを検討する必要がありますか?
  3. すべての既知のリスクは何ですか?
  4. 段階的なアップグレードは推奨されますか?または、バイナリ置換が提案されていますか?
6

なぜアップグレードする必要があるのですか?

MySQL 5.1.37以前の場合、InnoDBは複数のCPU /複数のコアを利用しません。ハードウェアの規模を大きくしても、InnoDBの速度は向上しません。 MySQL 5.1.38は最初にInnoDBプラグインを導入しました。これは、マルチCPU /マルチコアエンゲージメントで利用可能なチューニングの多くの側面を備えています。これは、MySQL 5.5./5.6でネイティブInnoDBとして完全に利用可能になりました。これがこのテーマに関する私の過去の投稿です

もしそうなら、どのバージョンを検討すべきですか?

2か月前にリリースされましたが、今のところMySQL 5.6.10を信頼しています。私はすでにクライアントにMySQL 5.0.51aからそのバージョンを提供しました。 Jan 19, 2012からこの投稿を確認してください。 使用するMySQLのバージョンは? です。クライアントの本番サーバーは新しいMySQL 5.6クラスターに複製され、クライアントのカットオーバーを待機しています。

すべての既知のリスクは何ですか

MySQLのすべてのリリースと同様に、常にリリースノートを読む必要があります。心配することは、アップグレードを正しく行わないことだけです。別のリスクは、_ mysql_upgrade スクリプトを実行してmysql.userテーブルの列レイアウトを修正するのを忘れることです。

段階的なアップグレードが推奨されますか?またはバイナリ置換が提案されましたか?

個人的に、私はバイナリー置換に不快です。 MySQL 5.0.88からMySQL 5.6.10に直接アップグレードする方法があります。

STEP 01:mysqldumpは、mysqlスキーマを除くすべてのデータベース

MYSQL_CONN="-uroot -ppassword"
SQLSTMT="SELECT GROUP_CONCAT(schema_name SEPARATOR ' ')"
SQLSTMT="${SQLSTMT} FROM information_schema.schemata WHERE schema_name"
SQLSTMT="${SQLSTMT} NOT IN ('information_schema','mysql')"
DBLIST=`mysql ${MYSQL_CONN} -ANe"${SQLSTMT}"`
MYSQLDUMP_OPTIONS="--single-transaction --routines --triggers --databases ${DBLIST}"
mysqldump ${MYSQL_CONN} ${MYSQLDUMP_OPTIONS} > Data.sql

STEP 02:権限を純粋なSQLコマンドとしてダンプします

MYSQL_CONN="-uroot -ppassword"
SQLSTMT="SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',Host,''';')"
SQLSTMT="${SQLSTMT} FROM mysql.user WHERE user<>''"
mysql ${MYSQL_CONN} -ANe"${SQLSTMT}" | mysql ${MYSQL_CONN} -AN | sed 's/$/;/g' > Grants.sql

私は以前にこのテクニックをお勧めしました: myisam 5.0データベースを5.5 innodbサーバーにインポートする

STEP 03各MySQLファイルを新しいMySQL 5.6インスタンスにロードします

何かする前に、MySQL 5.6でroot @ localhostのパスワードを設定する必要があります。

一時パスワードは~/.mysql_secretにあります。そのパスワードを使用してroot @ localhostとしてログインします。次に、パスワードを変更します

SET PASSWORD=PASSWORD('whateverIwantasthenewpassword');

MySQLクライアントで、次を実行します

source Data.sql
source Grants.sql

それだけで十分です。

試してみる !!!

更新2019-06-24 13:30 EDT

Linuxユーザーの利益のために、@ SherylHohmanからのコメントに応じて、Vagrant環境でMYSQL_CONNを定義せずに(意図的に空白のまま)、上記のステートメントをSTEP 01およびSTEP 02からテストしました。

root@vt-mysql:~# mkdir DBAStackExchange
root@vt-mysql:~# cd DBAStackExchange
root@vt-mysql:~/DBAStackExchange# ls -l
total 0
root@vt-mysql:~/DBAStackExchange# SQLSTMT="SELECT GROUP_CONCAT(schema_name SEPARATOR ' ')"
root@vt-mysql:~/DBAStackExchange# SQLSTMT="${SQLSTMT} FROM information_schema.schemata WHERE schema_name"
root@vt-mysql:~/DBAStackExchange# SQLSTMT="${SQLSTMT} NOT IN ('information_schema','mysql')"
root@vt-mysql:~/DBAStackExchange# DBLIST=`mysql ${MYSQL_CONN} -ANe"${SQLSTMT}"`
root@vt-mysql:~/DBAStackExchange# MYSQLDUMP_OPTIONS="--single-transaction --routines --triggers --databases ${DBLIST}"
root@vt-mysql:~/DBAStackExchange# mysqldump ${MYSQL_CONN} ${MYSQLDUMP_OPTIONS} > Data.sql
root@vt-mysql:~/DBAStackExchange#
root@vt-mysql:~/DBAStackExchange#
root@vt-mysql:~/DBAStackExchange# SQLSTMT="SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',Host,''';')"
mysql ${MYSQL_CONN} -ANe"${SQLSTMT}" | mysql ${MYSQL_CONN} -AN | sed 's/$/;/g' > Grants.sqlroot@vt-mysql:~/DBAStackExchange# SQLSTMT="${SQLSTMT} FROM mysql.user WHERE user<>''"
root@vt-mysql:~/DBAStackExchange# mysql ${MYSQL_CONN} -ANe"${SQLSTMT}" | mysql ${MYSQL_CONN} -AN | sed 's/$/;/g' > Grants.sql
root@vt-mysql:~/DBAStackExchange#
root@vt-mysql:~/DBAStackExchange#
root@vt-mysql:~/DBAStackExchange# ls -l
total 4056
-rw-r--r-- 1 root root 4146556 Jun 24 10:22 Data.sql
-rw-r--r-- 1 root root    1326 Jun 24 10:23 Grants.sql
root@vt-mysql:~/DBAStackExchange# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 43
Server version: 5.6.33-0ubuntu0.14.04.1 (Ubuntu)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

6年前にここに投稿したステートメントは、まだLinuxで機能します。私はこれらをMySQL 5.6.33で実行しました

7
RolandoMySQLDBA