☘️博主介绍☘️:
✨又是一天没白过,我是奈斯,DBA一名✨
✌✌️擅长Oracle、MySQL、SQLserver、Linux,也在扩展大数据方向的知识面✌✌️
❣️❣️❣️大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注❣️❣️❣️
随着版本的更新,MySQL也在持续发展和完善。为了确保数据库系统始终保持最新状态并获得最佳性能,定期进行版本升级是至关重要的。从MySQL 5.7到8.0,再到更新的版本,每一次升级都带来了许多改进和新功能,从而提高了系统的稳定性和安全性。
在进行MySQL版本升级之前,了解新版本的特点和要求是非常重要的。需要仔细评估新版本是否与现有的系统兼容,并确保具备必要的资源和技术支持。此外,备份数据库也是升级过程中的关键步骤,以防止数据丢失或损坏。
版本升级前的注意事项:
MySQL8.0版本:MySQL8.0的升级是不支持 回滚升级 。不支持从MySQL 8.0降级到MySQL 5.7,或从MySQL 8.0版本降级到以前的MySQL 8.0版本。唯一支持的替代方案是恢复升级前的备份。因此,在开始升级过程之前必须备份数据。也就是说需要升级之前的备份来恢复,而不是升级之后的备份来恢复。
官方文档8.0版本:MySQL :: MySQL 8.0 Reference Manual :: 4 Downgrading MySQL
MySQL5.7版本:跨版本降级,或者小版本之间降级都 支持 。降级仅在通用版本(GA)之间受支持。使用逻辑降级方法支持从MySQL 5.7降级到5.6。不支持跳过版本的降级。例如,不支持从MySQL 5.7直接降级到5.5。支持在发布系列中降级。例如,支持从MySQL 5.7.z降级到5.7.y。也支持跳过发布。例如,支持从MySQL 5.7.z降级到5.7.x。
官方文档5.7版本:MySQL :: MySQL 5.7 Reference Manual :: 2.11 Downgrading MySQL
大版本升级路径:
mysql 5.7 -> mysql 8.0
mysql 5.6 -> mysql 5.7 -> mysql 8.0
mysql 8.0.x -> mysql 8.0.y
注意:MySQL是不能够跨越大版本升级的,想从5.6直接升级到8.0是不行的,需要先升级MySQL 5.7再升级至MySQL 8.0。
大版本升级方案(or迁移方案)有哪些(全):这些办法同样适用于小版本升级
1)逻辑备份恢复:mysqldump、mysqlpump、mydumper
2)物理迁移:clone Plugin与XtraBackup
3)mysql_upgrade:适用于5.6 to 5.7,5.7 to 8.0;但5.6 to 8.0跨度太大可能会导致数据丢失或者升级失败。
大版本之间功能差异列表(阿里云文档 or 官方文档):
1)MySQL 5.7和MySQL 5.6版本功能差异列表 or MySQL 8.0和MySQL 5.7版本功能差异列表:升级RDS MySQL数据库版本_云数据库 RDS(RDS)-阿里云帮助中心
2)官方文档MySQL 8.0中的变化:MySQL :: MySQL 8.0 Reference Manual :: 3 Upgrading MySQL
mysql_upgrade介绍:
MySQL5.7版本对mysql_upgrade的介绍:MySQL :: MySQL 5.7 Reference Manual :: 4.4.7 mysql_upgrade — Check and Upgrade MySQL Tables
大版本和小版本的MySQL升级,MySQL官网给出通过 mysql_upgrade 工具进行升级。MySQL 8.0.16之前需要手动执行mysql_upgrade升级数据库。MySQL 8.0.16开始 mysql_upgrade 升级程序已经废弃,从MySQL 8.0.16之后会在下次启动时自动执行所有必要的升级任务,不需要再调用执行mysql_upgrade。
MySQL 8.0.16之前升级流程(需要手动执行mysql_upgrade命令完成升级):
1)关闭MySQL,替换新的二进制
2)启动MySQL,让服务器升级DD(数据字典)表
3)运行mysql_upgrade,更新系统表和用户表
4)加载新的帮助表
5)重启MySQL
MySQL 8.0.16之后升级流程(数据库重启后自动完成升级,不需要执行mysql_upgrade):
1)关闭MySQL,替换新的二进制安装包
2)启动MySQL,自动升级DD(数据字典)表、更新系统表和用户表、加载新的帮助表
案例:使用mysql_upgrade命令将mysql 5.7.29升级到mysql 8.0.14
升级MySQL5.7的官方文档介绍:MySQL :: MySQL 5.7 Reference Manual :: 2.10 Upgrading MySQL
一、停止备库上的5.7数据库。一定要先将生产库5.7搭一套从库,然后在从库上安装8.0安装包,因为如果从库上的5.7升级失败的话,不影响生产5.7。
1)查看用户以及权限
mysql> select host,user from mysql.user;
2)验证对象数量
mysql> select * from sys.schema_object_overview where db='itpuxdb';
mysql> select engine,count(*) from information_schema.tables group by engine;
3)验证数据量:
通过count统计每个表的总数据量:
mysql> select concat('select count(*) from ',table_schema,'.',table_name,';') from information_schema.tables where table_schema='库名';
通过CHECKSUM TABLE查看表内容的校验和:迁移前和迁移后表的行数,内容,顺序都一样的话checksum结果相同
mysql> select concat ('checksum table ',table_schema,'.',table_name,';') from information_schema.tables where TABLE_SCHEMA='库名';
4)停止从库
[root@mysql ~]# service mysqld stop
二、重命名备库上的5.7软件安装路径,其他数据文件路径和日志路径不要重命名(如果是rpm方式安装的,需要确定好软件安装路径里是否有数据路径和日志路径,避免修改错误)
[root@mysql ~]# mv /mysql/app/mysql /mysql/app/mysql5.7_bk
三、在源生产库5.7上的备库上安装8.0数据库。
[root@mysql ~]# tar -xvf mysql-8.0.14-linux-glibc2.12-x86_64.tar
[root@mysql ~]# tar -Jxvf mysql-8.0.14-linux-glibc2.12-x86_64.tar.xz
[root@mysql ~]# mv mysql-8.0.14-linux-glibc2.12-x86_64 /mysql/app/
[root@mysql ~]# mv /mysql/app/mysql-8.0.14-linux-glibc2.12-x86_64 /mysql/app/mysql
[root@mysql ~]# chown -R mysql:mysql /mysql/app/mysql
四、将参数文件替换为8.0版本的相关参数
[mysqld]
###basic settings###
server_id=1913306 ---服务id主从要不同必须唯一,用于区分主从(如果一主多从,server_id要不同)。一般后IP+端口
port = 3306 ---端口号
socket=/mysql/data/3306/mysql.sock ---实例的通信文件路径(socket套接字就是ip+端口,包括本地ip:port, 远程ip:port)。如果系统上有多个实例,通过连接socket可以连接相应的实例,socket可以用户连接到那个实例
pid-file=/mysql/data/3306/mysql.pid ---将mysql后台进程记录在此文件中
#bind-address=192.168.56.31 ---绑定本机地址。 bind-address:多个网卡的服务器上,使用这个参数来选择使用哪个网卡的ip连接到MySQL服务器(也就是指定连接到mysql服务器的网卡ip,没有指定的网卡ip一律不能连接到mysql,使用其他网卡ip连接报Can't connect to MySQL server on '192.168.56.200')
basedir=/mysql/app/mysql ---软件安装路径
datadir=/mysql/data/3306/data ---数据文件路径
character-set-server=utf8mb4 ---字符集
skip-character-set-client-handshake=1
#autocommit=0 ---事务是否自动提交。默认为1自动提交,0为关闭自动提交,根据情况而定。 关闭自动提交出现mysqlpump,python不能提交数据的情况
#skip_name_resolve = 1
max_connections=2000 ---最大连接数(影响用户连接到数据库)。如果并发连接请求量较大建立在机器能支撑的情况下,建议调高此值,以增加并行连接数量。但如果连接数越多,MySQL会对每个连接提供连接缓冲区,就会开销越多的内存,所以要适当调整该值,不能盲目提高设值。
#max_user_connections=800 ---指定每个用户的最大连接数,默认为0表示不限制用户的最大连接数。指同一个账号能够同时连接到mysql服务的最大连接数。
max_connect_errors=1000 ---最大连接错误
default-storage-engine=INNODB ---默认存储引擎
transaction-isolation=READ-COMMITTED ---建议设置为read-committed事务级别,默认为REPEATABLE-READ
explicit_defaults_for_timestamp=1 ---默认时间戳,1表示打开
tmp_table_size = 72M
max_allowed_packet=64M ---5.7默认4M,8.0默认64M,最大值都是1024M(1G)。即最大允许传输包的大小,也就是出结果后,把结果(select、update、insert、delete)发送到客户端时,每个网络包的最大大小。所以设置为32M、64M(推荐)、128M等。
interactive_timeout = 1800 ---服务器在关闭交互式连接之前等待其活动的秒数,默认28800s,8小时。mysql客户端连接数据库是交互式连接。
wait_timeout = 1800 ---服务器在关闭非交互式连接之前等待其活动的秒数,默认28800s,8小时。应用通过jdbc连接数据库是非交互式连接。
read_buffer_size = 16M
read_rnd_buffer_size = 32M
table_open_cache=2000
thread_cache_size=768
myisam_max_sort_file_size=10G
key_buffer_size=32M
read_rnd_buffer_size=32M
back_log=1024
#flush_time=0
open_files_limit=65536
table_definition_cache=1400
#binlog_row_event_max_size=8K
#sync_master_info=10000
#sync_relay_log=10000
#sync_relay_log_info=10000
check_proxy_users=on
mysql_native_password_proxy_users=on ----两个参数为on时表示打开proxies_priv代理操作功能,类似组/角色
###join_buffer###
join_buffer_size = 128M ---5.7和8.0默认都是256KB,最大值和平台有关,在linux64位最大值太大参考官方文档,参数是用于设置连接缓冲区的大小。连接缓冲区用于处理连接操作,例如使用JOIN语句进行表的连接。参数定义了每个连接所使用的连接缓冲区的大小。连接缓冲区存储在内存中,用于在连接操作期间处理临时数据。系统中经常执行复杂的JOIN连接操作,增大连接缓冲区的大小可能会提高查询的性能。但是过大的连接缓冲区可能会占用过多的内存资源,导致性能下降。
###sort_buffer###
#myisam_sort_buffer_size=135M
#innodb_sort_buffer_size = 64M
sort_buffer_size = 32M ---为每个必须执行排序的会话都会分配一个此大小的缓冲区,用于控制排序操作的临时缓冲区大小。参数对以下操作有效:
###gtid###
gtid_mode=on ----开启gtid模式
enforce_gtid_consistency=1 ---服务器只允许执行可以使用GTID安全记录的语句,从而增强GTID的一致。开启会导致开启后对于特定create table不被支持,如CREATE TABLE ... SELECT、CREATE TEMPORARY TABLE、DROP TEMPORARY TABLE等语句
###binlog###
binlog_gtid_simple_recovery=1 ---(默认值)这个参数控制了当mysql启动或重启时,mysql在搜寻GTIDs时是如何迭代使用binlog文件的。这个选项设置为真,会提升mysql执行恢复的性能。因为这样mysql-server启动和binlog日志清理更快
log_bin=/mysql/log/3306/binlog/itpuxdb-binlog ---二进制输出路径(指定之后将指定的值赋给log_bin_basename这个参数上,log_bin显示为on,bug)
log_bin_index=/mysql/log/3306/binlog/itpuxdb-binlog.index ---记录二进制日志文件的基本名称和路径在这个可读的文件中。默认和log_bin参数的值相同,并在此基础上会自动加上扩展名.index
binlog_format=ROW ---二进制工作模式,’ROW’会记录每一行数据被修改的情况(必须)
binlog_rows_query_log_events=on ---二进制日志中记录更详细的SQL操作。一个事务就是一个事件,binary log events
max_binlog_size = 200M ---二进制日志大小,默认1G(参数值最大值1G)
binlog_expire_logs_seconds=864000 ---二进制日志保留时长(秒),默认2592000秒等于30天(30*24*60*60秒)。 5.7的expire_logs_days废除(官方表示只删除二进制。中继日志由relay_log_purge参数控制在sql线程应用完之后自动清理,默认为on启用)
sync_binlog = 1 ---5.6默认为0,5.7和8.0默认为1。该参数控制着二进制日志写入磁盘的过程。为0时表示不控制binlog的刷新,由系统自己将binlog buffer pool刷新到磁盘二进制日志中。这时候的性能是最好的,但是风险也是最大的。因为一旦系统Crash,在binlog buffer pool中的所有binlog信息都会被丢失。
###log settings###
log-output=FILE ---日志输出
general_log = 0 ---所有常规日志日志都将记录。影响性能,0表示关闭
general_log_file=/mysql/log/3306/itpuxdb-general.err ---常规日志输出路径
slow_query_log = ON ---慢日志查询,on表示打开
long_query_time=10 ---慢日志最大超时时间,超过10秒的sql将记录
slow_query_log_file=/mysql/log/3306/itpuxdb-query.err ---慢日志输出路径
log-error=/mysql/log/3306/itpuxdb-error.err ---错误日志路径(同oracle告警日志)
log_queries_not_using_indexes = 1
log_slow_admin_statements = 1
log_slow_slave_statements = 1
log_throttle_queries_not_using_indexes = 10
min_examined_row_limit = 100
###innodb settings###
innodb_buffer_pool_load_at_startup = 1 ---在MySQL服务启动时,是否加载之前dump的ib_buffer_pool文件恢复到buffer pool缓冲池中(恢复datadir的ib_buffer_pool文件中,dump出buffer pool的数据(space、page、number),然后启动load进buffer pool预热),由innodb_buffer_pool_load_at_startup参数控制
innodb_buffer_pool_dump_at_shutdown = 1 ---InnoDB缓冲池关闭MySQL服务时,将buffer pool池的内容dump到文件中(保存在datadir的ib_buffer_pool文件中,dump出buffer pool的数据(space、page、number),然后启动load进buffer pool预热),目的缩短热身进程在下一次重新启动时处理,由innodb_buffer_pool_dump_at_shutdown参数控制
#innodb_buffer_pool_chunk_size= 134217728 ---默认值128M,最大值是innodb_buffer_pool_size / innodb_buffer_pool_instances。定义InnoDB缓冲池大小调整操作的块大小。调整innodb_buffer_pool时,innodb_buffer_pool_chunk_size参数会按照默认128M去移动和调整到buffer pool设置的大小。
#innodb_buffer_pool_instances = 8 ---InnoDB缓冲池被划分为的区域数或池。在Linux平台上innodb_buffer_pool_size大于或等于1GB 时,innodb_buffer_pool_instances自动调整为8,小于1GB时为1(亲测)。作为减小内部锁争用来提高MySQL吞吐量的手段。方法是在不同线程读取和写入缓存页时减少争用,将热点单散,提高并发的性能,建议按照cpu个数设置。
innodb_buffer_pool_size = 1000M ---innodb内存大小(同oracle的SGA,影响着库的性能),生产环境根据为物理内存的70%到80%。
###lock###
innodb_print_all_deadlocks = 1 ---默认为off,如果启用时,所有死锁信息都会记录到error日志中,只是针对死锁,其他锁的详细信息在innodb_status_output_locks参数打开时默认都会记录到error日志中
#innodb_lock_wait_timeout = 50 ---默认50s。死锁检测机制。如果同样的操作进行,试图访问另一个被锁定的行的事务,那么产生了征用锁等待,就会触发这个参数,50s之后另一个会话退出。oracle没有释放被死锁会话的参数会一直锁,除非解决掉生成锁的会话
###redo###
innodb_log_file_size = 200M ---redo log大小,而oracle时直接创建文件
innodb_log_files_in_group = 2 ---redo log组个数
innodb_log_buffer_size = 16M ---redo log buffer大小,默认16M,而oracle由SGA自动控制
innodb_flush_log_at_trx_commit=1 ---5.7和8.0默认值1,该参数控制着redo log写入磁盘的过程。mysql写文件有2块缓存。一块是自己定义在内存的log buffer, 另一个是磁盘映射到内存的os cache。mysql可以调用flush主动将redo log buffer刷新到磁盘内存映射,也可以调用fsync强制操作系同步磁盘映射文件到磁盘。还可以同时调用flush + fsync将缓存直接落盘。
###undo###
innodb_rollback_segments = 128 ---128个段。5.7的innodb_undo_logs废除。
#innodb_undo_tablespaces = 3 ---在8.0中废除。5.7之前通过参数管理,8.0后可以创建undo表空间。如果使用此参数会报INNODB_UNDO_TABLESPACES设置已经弃用,不再使用。并且InnoDB总是创建2个undo表空间(即使通过参数指定了3个,也只会创建2个undo表空间),如果需要更多undo表空间,请使用CREATE UNDO TABLESPACE。
innodb_undo_log_truncate = 1 ---事务完是否回收undo。1表示允许自动回收段,同oracle
innodb_max_undo_log_size = 2G ---undo最大大小
###IO/thread###
#innodb_thread_concurrency = 128 ---默认值为0。定义InnoDB允许的最大线程数。0(默认值)被解释为无限并发(无限制),该参数用于高并发系统的性能调整。若要设置则与服务器的CPU核心数相同或是CPU的核心数的2倍。5.7和8.0版本最大支持1000。
innodb_thread_concurrency过高的值会导致性能下降,因为会增加对系统内部和资源的争用。在某些情况下,最佳innodb_thread_concurrency设置可以小于虚拟CPU的数量。
innodb_read_io_threads = 8 ---默认值4。InnoDB读操作的I/O线程数。?默认四个I/O线程负责数据块的读取。在用户高并发同时读取时必须调整此参数,用于加快多个用户读取。通过show engine innodb status\G;查看I/O读写线程数
innodb_write_io_threads = 8 ---默认值4。InnoDB写操作的I/O线程数。?默认四个I/O线程负责数据块的写。在用户高并发同时写入时必须调整此参数,用于加快多个用户的写入速度。通过show engine innodb status\G;查看I/O读写线程数
innodb_io_capacity = 5000 ---默认值200。从缓冲区刷新脏页时一次刷新脏页的数量,参数innodb_io_capacity_max自动调整为innodb_io_capacity的两倍值。根据磁盘IOPS的能力一般建议设置如下:
innodb_flush_method = O_DIRECT ---5.7默认值为空,8.0默认值为fsync。参数在linux上有6个可选值:fsync/O_DSYNC/littlesync/nosync/O_DIRECT/O_DIRECT_NO_FSYNC。littlesync/nosync风险较高,常用的下面4种:
innodb_stats_on_metadata=OFF ---5.7和8.0默认值都是off。关掉一些访问information_schema库下表而产生的索引统计。当重启mysql实例后,mysql会随机的io取数据遍历所有的表来取样来统计数据,这个实际使用中用的不多,建议关闭。
innodb_change_buffering=all ---5.7和8.0默认值都是all。当更新/插入的非聚集索引的数据所对应的页不在内存中时(对非聚集索引的更新操作通常会带来随机IO),会将其放到一个insert buffer中,当随后页面被读到内存中时,会将这些变化的记录merge到页中。当服务器比较空闲时,后台线程也会做merge操作。由于主要用到merge的优势来降低io,但对于一些场景并不会对固定的数据进行多次修改,此处则并不需要把更新/插入操作开启change_buffering,如果开启只是多余占用了buffer_pool的空间和处理能力。这个参数要依据实际业务环境来配置。
innodb_old_blocks_time=1000 ---5.7和8.0默认值都是1000。使Block在old sublist中停留时间长为1s,不会被转移到new sublist中,避免了Buffer Pool被污染BP可以被认为是一条长链表。被分成young 和 old两个部分,其中old默认占37%的大小(由innodb_old_blocks_pct 配置)。靠近顶端的Page表示最近被访问。靠近尾端的Page表示长时间未被访问。而这两个部分的交汇处成为midpoint。每当有新的Page需要加载到BP时,该page都会被插入到midpoint的位置,并声明为old-page。当old部分的page,被访问到时,该page会被提升到链表的顶端,标识为young。由于table scan的操作是先load page,然后立即触发一次访问。所以当innodb_old_blocks_time =0 时,会导致table scan所需要的page不读的作为young page被添加到链表顶端。而一些使用较为不频繁的page就会被挤出BP,使得之后的SQL会产生磁盘IO,从而导致响应速度变慢。
innodb_adaptive_flushing=on ---5.7和8.0默认值都是on。使刷新脏页更智能,影响每秒刷新脏页的数目规则由原来的“大于innodb_max_dirty_pages_pct时刷新100个脏页到磁盘”变为 “通过buf_flush_get_desired_flush_reate函数判断重做日志产生速度确定需要刷新脏页的最合适数目”,即使脏页比例小于 innodb_max_dirty_pages_pct时也会刷新一定量的脏页。
innodb_max_dirty_pages_pct=90 ---5.7默认75,8.0默认90。最大脏页百分数,当系统中脏页所占百分比超过这个值,INNODB就会进行写操作以把页中的已更新数据写入到磁盘文件中。默认75,一般现在流行的SSD硬盘很难达到这个比例。可依据实际情况在75-80之间调节。
innodb_flush_neighbors = 1
innodb_purge_threads = 4
innodb_strict_mode = 1
innodb_autoextend_increment=64
innodb_concurrency_tickets=5000
innodb_open_files=65536
innodb_checksum_algorithm=0
innodb_buffer_pool_dump_pct = 40
innodb_page_cleaners = 4
innodb_purge_rseg_truncate_frequency = 128
log_timestamps=system
#transaction_write_set_extraction=MURMUR32
innodb_lru_scan_depth = 2000
default_authentication_plugin=mysql_native_password ---8.0的默认验证方式是caching_sha2_password,需要修改为和5.7一样mysql_native_password
innodb_file_per_table=1 ---5.7和8.0默认就是on/1。为on/1,就是独立表空间,每个表的数据一个表空间,表的结构存在.frm文件,数据和索引又在.ibd文件(.ibd独立表空间,如果innodb_file_per_table参数为on,那么innodb_data_file_path设置的表空间数据文件是没存数据的,只有共享表空间才在里面存数据)中。为off/0,就是共享表空间,所有的表数据一个表空间,表的结构存在.frm文件中,数据和索引在innodb_data_file_path设置的表空间文件中。
innodb_data_file_path=ibdata1:200M;ibdata2:200M;ibdata3:200M:autoextend:max:5G ---共享表空间数据文件大小设置,在datadir参数目录下。
innodb_temp_data_file_path = ibtmp1:200M:autoextend:max:20G ---临时文件大小,在datadir参数目录下。
五、启动数据库和升级数据库
1)启动mysql服务并查看日志
[root@mysql ~]# service mysqld start
mysql> show databases;
###如果不进行mysql_upgrade升级有些命令是执行不了的ERROR 1449 (HY000): The user specified as a definer ('mysql.infoschema'@'localhost') does not exist
[root@mysql ~]# tail -100f /mysql/log/3306/itpuxdb-error.err
###启动成功,并且日志中显示了错误信息编号[MY-010311]和错误所属子系统[Server]
2)使用mysql_upgrade升级数据库
[root@mysql ~]# mysql_upgrade -uroot -p123456 -S /mysql/data/3306/mysql.sock
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Upgrading system table data. #升级系统表数据
Checking system database. #检查系统数据库(升级系统数据库sys、mysql、performance_schema、information_schema)
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.2.
Upgrading the sys schema.
Checking databases. #检查数据库(升级非系统数据库,目前只有itpuxdb数据库)
itpuxdb.bm OK
itpuxdb.dd OK
itpuxdb.dq OK
itpuxdb.gj OK
itpuxdb.gw OK
itpuxdb.itpux11 OK
itpuxdb.itpux12 OK
itpuxdb.itpux_m1 OK
itpuxdb.itpux_m5 OK
itpuxdb.itpux_obj OK
itpuxdb.itpux_sales OK
itpuxdb.itpux_yg OK
itpuxdb.jl OK
itpuxdb.yg OK
sys.sys_config OK
Upgrade process completed successfully. #升级过程成功完成
Checking if update is needed.
3)重启mysql服务并查看日志
[root@mysql ~]# service mysqld restart
[root@mysql ~]# tail -100f /mysql/log/3306/itpuxdb-error.err
六、验证数据
1)查看数据库版本
mysql> status;
mysql> select @@version;
2)在数据目录下查看升级信息
[root@mysql ~]# cd /mysql/data/3306/data
[root@mysql ~]# more mysql_upgrade_info
3)查看用户以及权限
mysql> select host,user from mysql.user;
4)验证对象数量
mysql> select * from sys.schema_object_overview where db='itpuxdb';
mysql> select engine,count(*) from information_schema.tables group by engine;
5)验证数据量:
mysql> select concat('select count(*) from ',table_schema,'.',table_name,';') from information_schema.tables where table_schema='库名';
mysql> select concat ('checksum table ',table_schema,'.',table_name,';') from information_schema.tables where TABLE_SCHEMA='库名';
###经过对比用户、对象、引擎分类、数据量、checksum。除了用户在8.0多个mysql.infoschema用户, 引擎分类在8.0有所不同,并且少了MEMORY、MyISAM存储引擎外,其他数据量、checksum都相同,通过对比工具对比。
七、数据库的默认字符集问题
mysql> show variables like '%character_set%';
现有数据库和表的字符集:
mysql> show create database itpuxdb;
###还是升级前的utf8字符集,没有变化
mysql> show create table itpuxdb.itpux_m5\G;
###由utf8升级到utf8mb3
新建数据库和表的字符集:
mysql> show create database itpuxdb_new;
###新建的数据库会继承默认字符集utf8mb4
mysql> show create table itpuxdb_new.itpux_m5\G;
###新建的表会继承默认字符集utf8mb4