MySQL篇—数据库大版本升级

☘️博主介绍☘️

✨又是一天没白过,我是奈斯,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

  • 23
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
要升级 MySQL 主主数据库数据库版本,您可以按照以下步骤进行操作: 1. 备份数据库:在进行任何数据库升级之前,务必备份数据库以防止数据丢失或损坏。您可以使用 MySQL 的备份工具或第三方工具进行备份。 2. 检查兼容性:确保您要升级的目标版本与您当前的版本兼容。查看 MySQL 官方文档或升级指南,了解升级到目标版本的要求和注意事项。 3. 升级测试:在生产环境之前,建议您在一个测试环境中进行升级测试。这将帮助您发现任何潜在的问题,并确保顺利完成升级过程。 4. 停止数据库服务:在升级之前,停止所有主主数据库实例的服务。这可以通过运行适当的命令或使用数据库管理工具来完成。 5. 下载和安装新版本:从 MySQL 官方网站下载您要升级到的新版本,并按照官方文档提供的指南进行安装。确保按照正确的操作系统和版本进行下载和安装。 6. 运行升级脚本:一些 MySQL 版本可能需要运行升级脚本来更新数据库结构或执行其他必要的更改。请仔细阅读官方文档,并按照指示运行所需的脚本。 7. 启动数据库服务:在完成升级后,启动所有主主数据库实例的服务。确保一切正常,并根据需要进行必要的配置更改。 8. 测试和监控:在生产环境中,对升级后的数据库进行测试和监控,以确保系统正常运行。确保检查日志文件和性能指标,并解决任何出现的问题。 请注意,在升级过程中请小心操作,并确保您已经了解了升级过程的所有细节和风险。如果您不确定如何操作或担心数据丢失,建议您寻求专业数据库管理员的帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奈斯DBA

打赏到账,我飘啦~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值