mysql5.7アップグレードmysql8
説明:
1.このアップグレードは、mysql5.7.27のバイナリインストールパッケージに基づいています。これにより、長時間のソースコードのコンパイルを回避
できます。2。MySQL5.7から8.0に直接アップグレードできますが、一般提供(GA)バージョン間のみです。、そして5.7.9以降のみがサポートされます。非GAバージョンの場合、直接アップグレードはサポートされていません。
3. 5.6から8.0へのアップグレードなど、クロスバージョンアップグレードはサポートされていません。
アップグレードする前に:
バージョン5.7.27に
はデータベースwg_qc_commonがあり、wg_qc_sm_9に
は
データベースにデータがあります。データベースには他のユーザーがいます。
アップグレード手順:
ステップ1:mysql8.0.16のバイナリインストールパッケージをダウンロードし、指定されたディレクトリをアップロードします
下载地址:https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.16-linux-glibc2.12-x86_64.tar.xz
ステップ2:指定されたディレクトリに解凍し、インストールパッケージの属性を変更します
cd /root/
tar -xf mysql-8.0.16-linux-glibc2.12-x86_64.tar.xz -C /usr/local/ && cd /usr/local/
mv mysql-8.0.16-linux-glibc2.12-x86_64 mysql8 && chown -R mysql.mysql mysql8
ステップ3:アップグレード条件が満たされているかどうかを手動で確認します
1)以下の問題が発生してはならない
テーブルに廃止されたデータ型または関数を含めることはできません。トリガートリガーに欠落または空の定義や無効な定義がないこと
を
確認するための.frmファイルがあってはなりません(SHOWTRIGGERSまたはINFORMATION_SCHEMATRIGGERSテーブルを介して、character_set_clientをトリガー、collation_connection、データベース照合の値)
cd /usr/local/mysql57/bin
./mysqlcheck -u root -p --all-databases --check-upgrade
2)パーティションテーブル
ネイティブパーティションをサポートしていないストレージエンジンのパーティションテーブルを使用しないようにしてください。次のコマンドでクエリを実行できます。
SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE ENGINE NOT IN ('innodb', 'ndbcluster') AND CREATE_OPTIONS LIKE '%partitioned%';
結果が返される場合は、パーティションテーブルがinnodbストレージエンジンであるか、パーティション化されていないテーブルに変更する必要があります。
テーブルのストレージエンジンを変更します。
ALTER TABLE table_name ENGINE = INNODB;
パーティションテーブルを非パーティションテーブルに変更します。
ALTER TABLE table_name REMOVE PARTITIONING;
3)テーブル名とデータディクショナリ名詞
MySQL5.7のMySQLシステムデータベースに8.0のデータディクショナリと同じ名前のテーブルがないことを確認してください。
次のSQLクエリを使用できます。
SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE LOWER(TABLE_SCHEMA) = 'mysql'
and LOWER(TABLE_NAME) IN
(
'catalogs',
'character_sets',
'collations',
'column_type_elements',
'columns',
'events',
'foreign_key_column_usage',
'foreign_keys',
'index_column_usage',
'index_partitions',
'index_stats',
'indexes',
'parameter_type_elements',
'parameters',
'routines',
'schemata',
'st_spatial_reference_systems',
'table_partition_values',
'table_partitions',
'table_stats',
'tables',
'tablespace_files',
'tablespaces',
'triggers',
'version',
'view_routine_usage',
'view_table_usage'
);
そのようなテーブルがある場合は、名前を変更する必要があります。例:
LOCK TABLE old_table1 WRITE;-データが書き込まれると、テーブルを一時的にロックできます。
ALTER TABLE old_table1 RENAME new_table1
注:アプリケーションもそれに応じて変更する必要があります。そうしないと、不要な問題が発生します。
4)外部キー制約名
外部キー制約名が64文字を超えるテーブルがないことを確認してください。これは、次のSQLで表示できます。
SELECT CONSTRAINT_SCHEMA, TABLE_NAME,CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
WHERE LENGTH(CONSTRAINT_NAME) > 64;
ある場合は、それを変更します。といった:
ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol;
5)Mysql8でサポートされていないテーブルはInnoDBに移行する必要があります
8.0.13以降に更新する前に、システム表スペースおよび一般表スペースを含む表パーティションがInnoDB表スペースに保管されていないことを確認してください。次のSQLで照会できます
SELECT DISTINCT NAME, SPACE, SPACE_TYPE
FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES
WHERE NAME LIKE '%#P#%' AND SPACE_TYPE NOT LIKE 'Single';
その場合は、次のように、表を共有表スペースから独自の表スペース(innodb-file-per-table)に移動します。
ALTER TABLE table_name REORGANIZE PARTITION partition_name
INTO (partition_definition TABLESPACE=innodb_file_per_table);
ステップ4:元のデータベースをバックアップします
1)倉庫をすばやく閉じる
現在の環境がコールドシャットダウン(innodb_fast_shutdown = 2)で構成されている場合は、次のように高速または低速シャットダウンに変更する必要があります。
SET GLOBAL innodb_fast_shutdown = 1; --快关闭
SET GLOBAL innodb_fast_shutdown = 0; --慢关闭
高速または低速のシャットダウンにより、InnoDBは、リリースバージョン間でファイル形式が異なる場合に処理できる状態で、元に戻すログとデータファイルを保持します。
SET GLOBAL innodb_fast_shutdown=0; 这里选择慢关闭
2)データベースとバックアップを停止します
/etc/init.d/mysqld stop #关闭数据库
或者
cd /usr/local/mysql57/bin
./mysqladmin -u root -p shutdown #关闭数据库(涉及主从同步的话,建议先关闭主从同步进程,再停掉主数据库)
ps -ef | grep mysqld | grep -v grep #确认不存在mysql进程
cp -rf -p /u01/mysql/data /u01/mysql/data_5.7 #备份数据文件
cp -p /etc/my.cnf /etc/my.cnf_5.7 #备份配置文件
cp -p /etc/init.d/mysqld /etc/init.d/mysqld_5.7 #备份启停脚本
ステップ5:構成ファイル(/etc/my.cnf)を変更します
“basedir = /usr/local/mysql #替换成“basedir = /usr/local/mysql8”
lower_case_table_names = 1 #(mysql5.7有,检查下)
skip-grant-tables #不添加,后期会用到
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER #不添加,后期会用到
query_cache_size = 64M #注释掉
query_cache_limit = 2M #注释掉
query_cache_type = 2 #注释掉
query_cache_min_res_unit = 2k #注释掉
default_table_type = InnoDB #注释掉
ステップ6:データベースをアップグレードする
1)MySQL 8.0.16の新しいアップグレード方法では、新しいオプション–upgradeがmysqldに追加されます。オプションの値はNONE、AUTO、MINIMAL、FORCEです。
NONE:不尝试进行升级
AUTO:默认选项,MySQL 进行数据字典升级和服务升级
MINIMAL:仅升级数据字典
FORCE:强制升级,类似旧的 mysql_upgrade –force
2)MySQL 8.0.16の新しいアップグレード方法は、一般的に2つのステップに分かれています。
1>アップグレードデータディクショナリ(DD)
2>サーバーのアップグレード:MySQLシステムテーブルのアップグレード、ユーザーテーブルのアップグレード、sysテーブルのアップグレード、ヘルプの更新テーブルのアップグレード
cd /usr/local/mysql8/bin
./mysqld --upgrade=AUTO
3)データベースを閉じます
cd /usr/local/mysql8/bin
./mysqladmin -uroot -p -S /tmp/mysql.sock shutdown
4)起動スクリプトをコピーします
cp -p support-files/mysql.server /etc/init.d/mysqld
ステップ7:データベースを再起動します
/etc/init.d/mysqld restart
ステップ8:mysqlコマンドを環境変数(/ etc / profile)に追加し、アップグレードされたバージョンを確認します
export PATH=$PATH:/usr/local/mysql8/bin
source /etc/profile