MYSQL 升级方式有两种,一种叫做In-place Upgrade,另一种叫logical upgrade(逻辑升级方式)。

Logical upgrade:利用mysqldump直接导出sql文件,然后倒入到新库中,适用于跨度大的版本的升级方案,做法相对安全,并能整理表中碎片。但如果有数据量较大的库需要mysqldump导出,时间就会很长。

In-place upgrade:他的工作方法简单快速,就是直接替换掉原来版本的MySQL的安装目录和my.cnf配置文件,利用mysql_upgrade 脚本来完成系统表的升级。

注意:跨小版本升级可以使用in-place这种方法。

1、in-place upgrade

1.1.     环境介绍

IP: 172.16.10.22

数据目录:/mydata/mysql/mysql3306/data

安装目录:/usr/local/mysql5.6

配置文件:/etc/my3306.cnf

当前版本:5.6.38

1.2.     升级(5.6.38升级到5.7.20)

a)    设置INNODB_FAST_SHUTDOWN参数设置为0

set global innodb_fast_shutdown=0;

innodb_fast_shutdown有0,1,2三个值。参数0代表mysql关闭,innodb需要完成所有full purge和merge insert buffer操作,这个过程需要一定的时间,有事可能会花上几个小时。参数值为1是该参数的默认值,表示关闭mysql时不完成full purge和merge insert buffer操作,但是缓冲池中的脏页还是会写到磁盘中。参数值为2时,表示既不完成full purge和merge insert buffer 操作,也不将缓冲池中的脏页刷新到磁盘,而是将日志写入到日志文件中。

b)   关闭mysql服务

mysqladmin -S /tmp/mysql3306.sock -uroot -pmysql shutdown

c)    替换mysql的安装文件和参数以及路径

cp /soft/mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz /usr/local/

tar -zxvf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz

unlink mysql5.6

ln -s mysql-5.7.20-linux-glibc2.12-x86_64 mysql5.7

mv /etc/my3306.cnf /etc/my3306.cnf.bak

vi /root/.bash_profile

export PATH=$PATH:/usr/local/mysql5.7/bin

source /root/.bash_profile

cd /mydata/mysql/

mv mysql3306 mysql3307

由于我的数据文件路径是:/mydata/mysql/mysql3306/data

现在需要修改成:

/mydata/mysql/mysql3307/data

设置新的my3307.cnf文件(具体情况具体修改):

[client]

port = 3307

socket = /tmp/mysql5.7.sock

[mysql]

prompt="\u@db \R:\m:\s [\d]> "

no-auto-rehash

[mysqld]

user = mysql

port = 3307

basedir = /usr/local/mysql5.7

datadir = /mydata/mysql/mysql3307/data

log_bin_trust_function_creators=1

socket = /tmp/mysql3307.sock

lower_case_table_names=1

character-set-server=utf8mb4

collation-server=utf8mb4_general_ci

character-set-server = utf8mb4

skip_name_resolve = 1

innodb_undo_log_truncate=1

open_files_limit = 65535

back_log = 1024

max_connections = 500

max_connect_errors = 1000000

table_open_cache = 1024

table_definition_cache = 1024

table_open_cache_instances = 64

thread_stack = 512K

external-locking = FALSE

max_allowed_packet = 32M

sort_buffer_size = 4M

join_buffer_size = 4M

thread_cache_size = 768

query_cache_size = 0

query_cache_type = 0

interactive_timeout = 600

wait_timeout = 600

tmp_table_size = 32M

max_heap_table_size = 32M

slow_query_log = 1

slow_query_log_file = /mydata/mysql/mysql3307/logs/slow.log

log-error = /mydata/mysql/mysql3307/logs/error.log

long_query_time = 0.1

server-id = 3307101

log-bin = /mydata/mysql/mysql3307/logs/mysql-binlog

sync_binlog = 1

binlog_cache_size = 4M

max_binlog_cache_size = 1G

max_binlog_size = 1G

expire_logs_days = 7

master_info_repository = TABLE

relay_log_info_repository = TABLE

gtid_mode = on

enforce_gtid_consistency = 1

log_slave_updates

binlog_format = row

relay_log_recovery = 1

relay-log-purge = 1

key_buffer_size = 32M

read_buffer_size = 8M

read_rnd_buffer_size = 4M

bulk_insert_buffer_size = 64M

lock_wait_timeout = 3600

explicit_defaults_for_timestamp = 1

innodb_thread_concurrency = 0

innodb_sync_spin_loops = 100

innodb_spin_wait_delay = 30

transaction_isolation = REPEATABLE-READ

innodb_buffer_pool_size = 1024M

innodb_buffer_pool_instances = 8

innodb_buffer_pool_load_at_startup = 1

innodb_buffer_pool_dump_at_shutdown = 1

innodb_data_file_path = ibdata1:1G:autoextend

innodb_flush_log_at_trx_commit = 1

innodb_log_buffer_size = 32M

innodb_log_file_size = 2G

innodb_log_files_in_group = 2

innodb_max_undo_log_size = 4G

innodb_io_capacity = 2000

innodb_io_capacity_max = 4000

innodb_flush_neighbors = 0

innodb_write_io_threads = 8

innodb_read_io_threads = 8

innodb_purge_threads = 4

innodb_page_cleaners = 4

innodb_open_files = 65535

innodb_max_dirty_pages_pct = 50

innodb_flush_method = O_DIRECT

innodb_lru_scan_depth = 4000

innodb_checksum_algorithm = crc32

innodb_lock_wait_timeout = 10

innodb_rollback_on_timeout = 1

innodb_print_all_deadlocks = 1

innodb_file_per_table = 1

innodb_online_alter_log_max_size = 4G

internal_tmp_disk_storage_engine = InnoDB

innodb_stats_on_metadata = 0

innodb_status_file = 1

innodb_status_output = 0

innodb_status_output_locks = 0

performance_schema = 1

performance_schema_instrument = '%=on'

#innodb monitor

innodb_monitor_enable="module_innodb"

innodb_monitor_enable="module_server"

innodb_monitor_enable="module_dml"

innodb_monitor_enable="module_ddl"

innodb_monitor_enable="module_trx"

innodb_monitor_enable="module_os"

innodb_monitor_enable="module_purge"

innodb_monitor_enable="module_log"

innodb_monitor_enable="module_lock"

innodb_monitor_enable="module_buffer"

innodb_monitor_enable="module_index"

innodb_monitor_enable="module_ibuf_system"

innodb_monitor_enable="module_buffer_page"

innodb_monitor_enable="module_adaptive_hash"

[mysqldump]

quick

max_allowed_packet = 32M

d)   启动mysql服务

启动过程需要加上 --skip-grant-tables和--skip-networking 参数,来保证没有任何的应用连接,让升级过程更加安全。

/usr/local/mysql5.7/bin/mysqld_safe --defaults-file=/etc/my3307.cnf --skip-grant-tables --skip-networking &

错误日志很多报错:

证明系统没有升级系统表信息。

e)   升级系统数据字典信息

/usr/local/mysql5.7/bin/mysql_upgrade -S /tmp/mysql3307.sock

没有报错表示系统表升级成功。

f)   正常启动MYSQL不使用--skip-grant-tables和--skip-networking 参数

/usr/local/mysql5.7/bin/mysqladmin -S /tmp/mysql3307.sock -uroot -pmysql shutdown

/usr/local/mysql5.7/bin/mysqld_safe --defaults-file=/etc/my3307.cnf &

/usr/local/mysql5.7/bin/mysql -S /tmp/mysql3307.sock -uroot -pmysql

查看sys库也存在:

2、logical upgrade

第二种办法多用于跨度大的版本升级,我一般是用于一台服务器迁移到另一台服务器:

例如,我从5.1.72升级到5.7.20

首先利用MySQLDUMP 出数据库文件,由于版本差距太大,我把导出的SQL文件引擎全部换成INNODB。

在5.1.72库上执行:

mysql -S /tmp/mysql.sock  -uroot -p smsdbtest > /soft/smsdbtest.sql

把导出的文件传到安装的5.7.20库上进行导入:

导入:

mysql -S /tmp/mysql3307.sock -uroot -p smsdbtest < /soft/smsdbtest.sql

导入成功,并进行检查。

怎样选择mysql的版本升级_mysql版本升级相关推荐

  1. 定期存款单的mysql编写程序_MySQL 调优和使用必读

    MYSQL 应该是最流行了 WEB 后端数据库.WEB 开发语言最近发展很快,PHP, Ruby, Python, Java 各有特点,虽然 NOSQL 最近越來越多的被提到,但是相信大部分架构师还是 ...

  2. mysql.msi卸载_MySql安装与卸载的详细教程

    本文为大家分享了MySql安装与卸载的教程,供大家参考,具体内容如下 一.MYSQL的安装 1.打开下载的mysql安装文件,双击运行mysql-5.5.40-win32.msi. 2.选择安装类型, ...

  3. PHP 中华如何用命令连接数据库,选择MySQL数据库的命令以及PHP脚本下的操作方法...

    在你连接到 MySQL 数据库后,可能有多个可以操作的数据库,所以你需要选择你要操作的数据库. 从命令提示窗口中选择MySQL数据库 在 mysql> 提示窗口中可以很简单的选择特定的数据库.你 ...

  4. mysql下载吧_Mysql安装图文教程

    Mysql是一款功能强大的数据库软件,Mysql安装图文教程将介绍如何安装Mysql,接下来一起了解一下Mysql是如何安装的吧. MySQL - MySQL服务器.你需要该选项,除非你只想连接运行在 ...

  5. mysql主节点数据恢复_Mysql 主从复制+数据恢复

    1.主服务器Master配置: #设置数据库标识 server_id=1 #任何一个事务提交之后就立即写入到磁盘中的二进制文件 sync_binlog=1 #保持数据一致性,建议配置 innodb_f ...

  6. mysql 迭代更新_MySQL、MongoDB、Redis 数据库之间的区别与使用(本章迭代更新)

    MySQL.MongoDB.Redis 数据库之间的区别与使用 MySQL.MongoDB.Redis 数据库之间的区别与使用(本章迭代更新) update:2019年2月20日 15:21:19(本 ...

  7. mysql进入表格_mysql如何进入数据库查看所有表

    用户提问 1.现在我想进去my_db .如何操作? 2.进入my_db 后.我如何查看my_db里面所有表? 3.我如何想my_db里面建立一个新表.lala字段包括 la_ID(主键).la_nam ...

  8. EF选择Mysql数据源

    EF添加ADO.NET实体模型处直接选择Mysql数据源 最近想到EF是连接多数据库的orm框架,于是就想测试下.查了一堆网上资料后,测试连接mysql成功.步骤如下: 1.在你项目Model层中nu ...

  9. 导出mysql excel数据字典_mysql导出 Excel数据字典(全)

    解决问题(有mysql数据库数据表想要将表导入到PowerDesigner 或导出Excel数据字典) 一.下载工具 1.工具PowerDesigner 百度自行下载安装 2.mysql-connec ...

最新文章

  1. 内存分析工具 MAT 的使用
  2. I/O的一些简单操作
  3. 首席架构师眼中的架构应该是怎样的?
  4. C#如何生成随机不重复的数字
  5. 数据结构与算法JavaScript描述——队列
  6. Python的三种基本数据类型
  7. 交互式甘特图控件,教你如何使用日历!
  8. 腾讯校园招聘--一面(技术1对1)面经
  9. C++多线程同步效率对比之临界区和原子锁
  10. redis中字符串(String)类型常见命令操作 (附有示例)
  11. 关于数据库工作方面的一些感悟
  12. 【Vue项目】仿哔哩哔哩网页
  13. 什么是Debian?
  14. Lisp基础函数:car, cdr, cons...
  15. 天庭云计算机键盘无法输入,Win7系统下无线键盘失灵无法输入的解决方法
  16. 想借微商发家?打造千万级分销体系的方法论在这里!
  17. Java 近闻:JDK 20、新的 JEP 草案、JobRunr 6.0、GraalVM 22.3.1
  18. 2018年舆情产品小总结
  19. P3625 [APIO2009]采油区域 题解
  20. 基于C#弹幕类射击游戏的实现——(四)玩家的战机

热门文章

  1. POJ3979 分数加减法【水题】
  2. CCF NOI1058 统计单词
  3. 图像、视频等文件类型(拓展名)
  4. 经典书单 —— 机器学习/深度学习/AI/CV/PGM
  5. 导体、良导体、超导体与半导体
  6. 强悍的命令行 —— basename 去掉路径和扩展名 dirname 获取路径
  7. 最小二乘法进行曲线拟合(Python)
  8. 工具的使用——谷歌浏览器(chrome)
  9. pickle 在python 2和python 3中兼容性问题
  10. C++基础——有关引用的问题