5.0.88から最新バージョンへのアップグレードに関して質問があります。
なぜアップグレードする必要があるのですか?
MySQL 5.1.37以前の場合、InnoDBは複数のCPU /複数のコアを利用しません。ハードウェアの規模を大きくしても、InnoDBの速度は向上しません。 MySQL 5.1.38は最初にInnoDBプラグインを導入しました。これは、マルチCPU /マルチコアエンゲージメントで利用可能なチューニングの多くの側面を備えています。これは、MySQL 5.5./5.6でネイティブInnoDBとして完全に利用可能になりました。これがこのテーマに関する私の過去の投稿です
Sep 12, 2011
: MySQLで複数のコアを使用することは可能ですか?Mar 16, 2012
: Debianでの単一のMySQLクエリに複数のコアを使用Jul 23, 2012
: 16 GBのRAMを搭載したQuadCoreマシンでMySQLを最大限に活用する方法もしそうなら、どのバージョンを検討すべきですか?
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で実行しました