mysql5.7.27 обновить mysql8.0.16

mysql5.7 обновить mysql8

Описание:

1. Это обновление основано на бинарном установочном пакете mysql5.7.27, что позволяет избежать длительной компиляции исходного кода.
2. Вы можете напрямую обновить MySQL5.7 до 8.0, но только между версией General Availability (GA). , А то поддерживаются только версии 5.7.9 и выше. Если это не-GA версия, то прямое обновление не поддерживается.
3. Обновление между версиями не поддерживается, например обновление с 5.6 до 8.0.

Перед обновлением:

Версия 5.7.27
имеет базу данных wg_qc_common; wg_qc_sm_9
имеет данные в
базе данных. В базе данных есть другие пользователи.
Шаги обновления:

step1: Загрузите двоичный установочный пакет 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, чтобы
гарантировать, что триггер не должен иметь отсутствующих или пустых определений или недопустимых определений (с помощью таблицы SHOW TRIGGERS или INFORMATION_SCHEMA TRIGGERS вы можете проверить 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) Имя таблицы и существительные словаря данных

Убедитесь, что в системной базе данных MySQL MySQL 5.7 нет таблицы с тем же именем, что и словарь данных версии 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 в mysqld добавлена ​​новая опция –upgrade с дополнительными значениями NONE, AUTO, MINIMAL, FORCE.
NONE:不尝试进行升级
AUTO:默认选项,MySQL 进行数据字典升级和服务升级
MINIMAL:仅升级数据字典
FORCE:强制升级,类似旧的 mysql_upgrade –force
2) Новый метод обновления MySQL 8.0.16 обычно делится на 2 этапа.
1> Обновить словарь данных (DD)
2> Обновление сервера: обновите системную таблицу MySQL, обновите таблицу пользователей, обновите системную таблицу, обновите справочную таблицу обновлений
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
step8: Добавьте команду mysql в переменную среды (/ etc / profile) и проверьте обновленную версию
export PATH=$PATH:/usr/local/mysql8/bin
source /etc/profile

Вставьте описание изображения сюда

Шаг 9: Проверьте целостность данных

Вставьте описание изображения сюда

рекомендация

отblog.csdn.net/weixin_44729138/article/details/105614669