Get in touch
or send us a question?
CONTACT

INPLACE nâng cấp từ MySQL 5.7 lên MySQL 8.0

Bản sẵn có chung của MySQL 8.0 đã được công bố vào tháng 4 và nó đi kèm với một loạt tính năng mới. Bạn có thể tìm thấy tổng quan về các tính năng và cải tiến mới được thực hiện trong MySQL 8.0 trong blog sau .

Máy chủ có thể được nâng cấp bằng cách thực hiện nâng cấp INPLACE hoặc nâng cấp LOGICAL. Nâng cấp INPLACE bao gồm việc tắt máy chủ MySQL 5.7, thay thế các tệp nhị phân cũ bằng các tệp nhị phân MySQL 8.0 và sau đó khởi động máy chủ MySQL 8.0 trên thư mục dữ liệu cũ. Nâng cấp LOGICAL bao gồm xuất SQL từ phiên bản MySQL 5.7 bằng cách sử dụng tiện ích sao lưu hoặc xuất như mysqldump hoặc mysqlpump , cài đặt các tệp nhị phân MySQL 8.0, sau đó áp dụng SQL cho phiên bản MySQL mới.

Nâng cấp INPLACE nhanh hơn nâng cấp LOGICAL vì không yêu cầu tải cơ sở dữ liệu sau khi cài đặt phiên bản MySQL 8.0. Ngoài ra, trong khi tải cơ sở dữ liệu trong quá trình nâng cấp LOGICAL, có thể gặp phải lỗi do sự không tương thích dẫn đến phải sửa đổi tệp SQL đã xuất.

Bài đăng trên blog này mô tả các bước đơn giản cần tuân theo để thực hiện nâng cấp INPLACE lên MySQL 8.0.

  1. Bước đầu tiên trong việc nâng cấp lên MySQL 8.0 là kiểm tra tính sẵn sàng nâng cấp của máy chủ MySQL 5.7 hiện có. Chúng tôi muốn quá trình này trở nên đơn giản đối với người dùng nên đã giới thiệu tiện ích Trình kiểm tra nâng cấp đi kèm với MySQL Shell 8.0. Blog về Trình kiểm tra nâng cấp mô tả cách chạy tiện ích và kiểm tra xem có cần thực hiện bất kỳ hành động nào trước khi nâng cấp hay không. Hãy để tôi chạy tiện ích trên máy chủ MySQL 5.7 đang chạy trước khi thử nâng cấp lên MySQL 8.0.
npgopala@siv20$ ./mysqlsh root:@localhost:3307 -e "util.checkForServerUpgrade();"
mysqlsh: [Warning] Using a password on the command line interface can be insecure.
The MySQL server at localhost:3307 will now be checked for compatibility issues for upgrade to MySQL 8.0...
MySQL version: 5.7.24 - Source distribution

1) Usage of db objects with names conflicting with reserved keywords in 8.0
  No issues found

2) Usage of utf8mb3 charset
  No issues found

3) Usage of use ZEROFILL/display length type attributes
  No issues found

4) Issues reported by 'check table x for upgrade' command
  No issues found

5) Table names in the mysql schema conflicting with new tables in 8.0
  No issues found

6) Usage of old temporal type
  No issues found

7) Foreign key constraint names longer than 64 characters
  No issues found

No known compatibility errors or issues for upgrading the target server to MySQL 8 were found.
npgopala@siv20$

2. Tiện ích không báo lỗi nào cần sửa. Vì vậy, tôi có thể tiến hành nâng cấp máy chủ lên MySQL 8.0 bằng cách thay thế các tệp nhị phân cũ.Tại thời điểm này, hãy sao lưu thư mục dữ liệu bằng tiện ích sao lưu hoặc xuất như mysqldump hoặc mysqlpump . Điều quan trọng là bảo vệ dữ liệu của bạn bằng cách tạo bản sao lưu cơ sở dữ liệu hiện tại của bạn, bao gồm cơ sở dữ liệu hệ thống mysql và các tệp nhật ký.

3. Có thể tải xuống các tệp nhị phân MySQL 8.0 từ đây và máy chủ MySQL 8.0 có thể được khởi động trên thư mục dữ liệu cũ. Tôi đã bắt đầu với cấu hình mặc định ở đây:

npgopala@siv20:~/workspace1/mysql-trunk/dbg-8.0$ ./runtime_output_directory/mysqld --basedir=/home/npgopala/workspace1/mysql-trunk/dbg-8.0 --datadir=/home/npgopala/data57 --log-error=/home/npgopala/workspace1/mysql-trunk/dbg-8.0/mysql1.log --socket=/home/npgopala/workspace1/mysql-trunk/dbg-8.0/mysql.sock --port=3307 --gdb --user=`whoami` --console --lc-messages-dir=./sql/share

4. Máy chủ đã hoạt động, bây giờ tôi chạy ‘mysql_upgrade’ để kiểm tra và nâng cấp tất cả các bảng hệ thống cũng như kiểm tra các bảng người dùng.

npgopala@siv20$ ./runtime_output_directory/mysql_upgrade  --socket=/home/npgopala/workspace1/mysql-trunk/dbg-8.0/mysql.sock --port=3307 --user=root
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Upgrading system table data.
Checking system database.
mysql.columns_priv                                 OK
mysql.component                                    OK
mysql.db                                           OK
mysql.default_roles                                OK
mysql.engine_cost                                  OK
mysql.func                                         OK
mysql.general_log                                  OK
mysql.global_grants                                OK
mysql.gtid_executed                                OK
mysql.help_category                                OK
mysql.help_keyword                                 OK
mysql.help_relation                                OK
mysql.help_topic                                   OK
mysql.innodb_index_stats                           OK
mysql.innodb_table_stats                           OK
mysql.ndb_binlog_index                             OK
mysql.password_history                             OK
mysql.plugin                                       OK
mysql.procs_priv                                   OK
mysql.proxies_priv                                 OK
mysql.role_edges                                   OK
mysql.server_cost                                  OK
mysql.servers                                      OK
mysql.slave_master_info                            OK
mysql.slave_relay_log_info                         OK
mysql.slave_worker_info                            OK
mysql.slow_log                                     OK
mysql.tables_priv                                  OK
mysql.time_zone                                    OK
mysql.time_zone_leap_second                        OK
mysql.time_zone_name                               OK
mysql.time_zone_transition                         OK
mysql.time_zone_transition_type                    OK
mysql.user                                         OK
Found outdated sys schema version 1.5.0.
Upgrading the sys schema.
Checking databases.
events.event_table                                 OK
events.event_table_2                               OK
foreign_keys.t1                                    OK
foreign_keys.t2                                    OK
foreign_keys.t3                                    OK
foreign_keys.t4                                    OK
foreign_keys.t5                                    OK
foreign_keys.t6                                    OK
foreign_keys.t7                                    OK
foreign_keys.t8                                    OK
partitions.p5_sub                                  OK
sp.t                                               OK
sys.sys_config                                     OK
tablespace.t1                                      OK
tablespace.t2                                      OK
tablespace.t3                                      OK
tablespace.t4                                      OK
test.55_temporal                                   OK
test.child                                         OK
test.geom                                          OK
test.jemp                                          OK
test.jemp_myisam                                   OK
test.opening_lines                                 OK
test.parent                                        OK
test.t_blackhole                                   OK
test.t_blob                                        OK
test.t_blob_myisam                                 OK
test.t_compressed                                  OK
test.t_compressed2                                 OK
test.t_compressed3                                 OK
test.t_dynamic                                     OK
test.t_gen_stored                                  OK
test.t_gen_stored_myisam                           OK
test.t_gen_stored_myisam2                          OK
test.t_index                                       OK
test.t_json                                        OK
test.t_myisam_compressed                           OK
test.t_sc~!@#$%^&*(                                OK
test.vt2                                           OK
triggers.t1                                        OK
triggers.t2                                        OK
view_with_column_names.t1                          OK
Upgrade process completed successfully.
Checking if update is needed.
npgopala@siv20$ 

Các bảng hệ thống đã được nâng cấp và các bảng người dùng đã được kiểm tra.

5. Hãy để tôi bắt đầu kết nối máy khách và kiểm tra xem tất cả cơ sở dữ liệu cũ của tôi có hiện diện hay không.

npgopala@siv20$ ./runtime_output_directory/mysql --socket=/home/npgopala/workspace1/mysql-trunk/dbg-8.0/mysql.sock --port=3307 --user=root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 8.0.12 Source distribution
 
Copyright (c) 2000, 2018, 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> show databases;
+------------------------+
| Database               |
+------------------------+
| events                 |
| foreign_keys           |
| information_schema     |
| mysql                  |
| partitions             |
| performance_schema     |
| sp                     |
| sys                    |
| tablespace             |
| test                   |
| triggers               |
| view_with_column_names |
+------------------------+
12 rows in set (0.00 sec)
 
mysql> 

6. Tắt máy chủ và khởi động máy chủ. Kiểm tra tệp nhật ký để đảm bảo không có lỗi nào được báo cáo.

2018-06-06T09:11:28.167169Z 0 [System] [MY-010116] [Server] /home/npgopala/workspace1/mysql-trunk/dbg-8.0/runtime_output_directory/mysqld (mysqld 8.0.12) starting as process 27147
2018-06-06T09:11:30.261139Z 0 [System] [MY-010931] [Server] /home/npgopala/workspace1/mysql-trunk/dbg-8.0/runtime_output_directory/mysqld: ready for connections. Version: '8.0.12'  socket: '/home/npgopala/workspace1/mysql-trunk/dbg-8.0/mysql.sock'  port: 3307  Source distribution

Điều này đánh dấu sự hoàn thành của quá trình nâng cấp INPLACE. Nếu quá trình nâng cấp không thành công do một số lỗi, máy chủ sẽ hoàn nguyên mọi thay đổi đối với thư mục dữ liệu. Nỗ lực nâng cấp lại lên MySQL 8.0 bao gồm:

  • Nếu có bất kỳ nhật ký làm lại nào trong thư mục dữ liệu, hãy xóa tất cả chúng.
  • Khởi động máy chủ MySQL 5.7 trên cùng thư mục dữ liệu.
  • Sửa tất cả các lỗi được báo cáo trong quá trình nâng cấp.
  • Thực hiện nâng cấp INPLACE lên MySQL 8.0 lần nữa.

Trong blog tiếp theo của tôi, tôi sẽ thảo luận về các vấn đề có thể gặp phải khi thực hiện nâng cấp lên MySQL 8.0. Trong khi đó, vui lòng xem lại các điều kiện tiên quyết để nâng cấp và những thay đổi ảnh hưởng đến việc nâng cấp lên MySQL 8.0 trước khi nâng cấp.