mysql 升级和降级

1 官方推荐的两种升级方式:

in-place upgrade

logical upgrade

2 升级之前:

备份所有数据库,包括系统库mysql

[[email protected] ~]# mysqldump -uroot -p147258 -A -B  -F --master-data=2 --events --single-transaction>/tmp/mysqlall.bak

下载5.7.16二进制包,上传解压到/opt/mysql/目录下

3升级演示:5.7.14升级到5.7.16


方法一: in-place upgrade:

设置数据库关闭方式为slow方式,缓存中的数据在关闭之前全部落地:

[[email protected] data]# mysql -uroot -p147258 -e ‘set global innodb_fast_shutdown=0;‘

停止数据库服务:

[[email protected] data]# mysqladmin -uroot -p147258 shutdown

把之前5.7.14的软链接/usr/local/mysql删除,重新建立5.7.16软链接:

[[email protected] local]# rm -rf /usr/local/mysql

[[email protected] local]# ln -s /opt/mysql/mysql-5.7.16-linux-glibc2.5-x86_64 /usr/local/mysql

启动数据库服务:

[[email protected] ~]# mysqld_safe --user=mysql --datadir=/data/mysql/mysql3306/data &

检查所有库中所有表的兼容性:

[[email protected] data]# mysql_upgrade -uroot -p147258

检查结束后会在datadir目录下生成mysql_upgrade_info文件,记录了数据库版本。

停止数据库服务:

[[email protected] data]# mysqladmin -uroot -p147258 shutdown

启动数据库服务:

[[email protected] ~]# mysqld_safe --user=mysql --datadir=/data/mysql/mysql3306/data &

把启动5.7.16的启动脚本mysql.server复制到/etc/init.d/下,替代旧的mysqld.

[[email protected] ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

方法二:logical-upgrade


把mysql所有库导出来:

[[email protected] local]# mysqldump -uroot -p --add-drop-table --routines --events --all-databases --force >/tmp/data-for-upgrade.sql

停数据库服务:

[[email protected] local]# mysqladmin -uroot -p shutdown

创建新的目录存放5.7.16:

[[email protected] ]# mkdir -p /data/mysql/mysql3307/{data,logs,tmp}

[[email protected] data]# chown -R mysql:mysql /data/mysql/mysql3307

删除旧的软链接,重新创建软连接:

[[email protected] mysql]# ln -s /opt/mysql/mysql-5.7.16-linux-glibc2.5-x86_64 /usr/local/mysql

复制新的配置文件,并修改端口号为3307:

[[email protected] mysql3307]# cp /etc/my.cnf /data/mysql/mysql3307/my3307.cnf

[[email protected] mysql3307]# sed -i ‘s#3306#3307#g‘ my3307.cnf

指定配置文件初始化:

[[email protected] bin]# ./mysqld --initialize --defaults-file=/data/mysql/mysql3307/my3307.cnf

查看错误日志,找到密码:

[[email protected] bin]# cat /data/mysql/mysql3307/data/error.log |grep password

2016-11-24T14:35:59.219125Z 1 [Note] A temporary password is generated for [email protected]: kU+Ve&lo6a/j

指定3307配置文件,启动数据库服务:

[[email protected] bin]# ./mysqld_safe --defaults-file=/data/mysql/mysql3307/my3307.cnf &

指定sock文件登陆,输入前面查看的密码:

[[email protected] bin]# mysql -uroot -p -S /tmp/mysql3307.sock

Enter password:

重新修改密码:

mysql>alter user user() identified by ‘147258‘;

导入之前备份数据:

[[email protected] bin]# mysql -uroot -p -S /tmp/mysql3307.sock --force </tmp/data-for-upgrade.sql

检查兼容性:

[[email protected] bin]# mysql_upgrade -uroot -p -S /tmp/mysql3307.sock

关闭服务器:

[[email protected] bin]# mysqladmin -uroot -p shutdown -S /tmp/mysql3307.sock

用5.7.16二进制包重新建立3307实例,把旧的5.7.14版本的3306实例数据导出,然后导入3307实例中,测试3307实例确保没有问题,然后删除3306实例,把3307实例端口改为3306.


4 降级演示:5.7.16降级5.7.14


方法一:in-place downgrade


设置数据库关闭方式:

[[email protected] local]# mysql -uroot -p -e ‘set global innodb_fast_shutdown=0;‘

停止数据库服务:

[[email protected] local]# mysqladmin -uroot -p shutdown

删除redolog文件:

[[email protected] data]# rm -rf /data/mysql/mysql3306/data/ib_logfile*

删除5.7.16软链接,并重新创建5.7.14软连接:

[[email protected] local]# rm -rf /usr/local/mysql

[[email protected] local]# ln -s /opt/mysql/mysql-5.7.14-linux-glibc2.5-x86_64 /usr/local/mysql

启动数据库服务:

[[email protected] local]# mysqld_safe --user=mysql --datadir=/data/mysql/mysql3306/data &

降级检查:

[[email protected] local]# mysql_upgrade -uroot -p

停止数据库服务,重新启动数据库服务:

[[email protected] local]# mysqladmin -uroot -p shutdown

[[email protected] local]# mysqld_safe --user=mysql --datadir=/data/mysql/mysql3306/data &



方法二:logical downgrade

备份降级前的所有库和表:

[[email protected] ~]# mysqldump -uroot -p147258 --add-drop-table --routines --events --all-databases --force> /tmp/data-for-downgrade.sql

初始化:

[[email protected] bin]# ./mysqld --defaults-file=/data/mysql/mysql3307/my3307.cnf --initialize

[[email protected] bin]# ./mysqld_safe --defaults-file=/data/mysql/mysql3307/my3307.cnf &

[[email protected] bin]# mysql -uroot -p -S /tmp/mysql3307.sock

mysql>alter user user() identified by ‘147258‘;

[[email protected] bin]# ./mysql -uroot -p147258 -S /tmp/mysql3307.sock</tmp/data-for-downgrade.sql

[[email protected] bin]# ./mysql_upgrade -uroot -p147258 --skip-version-check -S /tmp/mysql3307.sock

以上步骤,部分省略,可参考5.7官方文档。

时间: 2024-12-14 08:42:05

mysql 升级和降级的相关文章

用 Flask 来写个轻博客 (8) — (M)VC_Alembic 管理数据库结构的升级和降级

目录 目录 前文列表 扩展阅读 Alembic 查看指令 manager db 的可用选项 初始化 DB Migrate 开始第一次跟踪 将记录文件应用到数据库中实时升级数据库结构 回滚到某一个记录环境中 前文列表 用 Flask 来写个轻博客 (1) - 创建项目 用 Flask 来写个轻博客 (2) - Hello World! 用 Flask 来写个轻博客 (3) - (M)VC_连接 MySQL 和 SQLAlchemy 用 Flask 来写个轻博客 (4) - (M)VC_创建数据模型

MySQL 升级方法指南大全

MySQL 升级方法指南大全 http://blog.sina.com.cn/s/blog_5a8b8eb80100ld7a.html 通常,从一个发布版本升级到另一个版本时,我们建议按照顺序来升级版本.例如,想要升级 MySQL 3.23 时,先升级到 MySQL 4.0,而不是直接升级到 MySQL 4.1 或 MySQL 5.0. 如果都是比较新的版本的升级可以参考下面的文章, MySQL数据库的版本更新很快,新的特性也随之不断的更新,更主要的是解决了很多影响我们应用的BUG,为了让我们的

MySQL&nbsp;升级方法指南大全

原文:MySQL 升级方法指南大全 通常,从一个发布版本升级到另一个版本时,我们建议按照顺序来升级版本.例如,想要升级 MySQL 3.23 时,先升级到 MySQL 4.0,而不是直接升级到 MySQL 4.1 或 MySQL 5.0. 如果都是比较新的版本的升级可以参考下面的文章, MySQL数据库的版本更新很快,新的特性也随之不断的更新,更主要的是解决了很多影响我们应用的BUG,为了让我们的MySQL变得更美好,我们有必要去给它升级,尽管你会说它现在已经跑得很好很稳定完全够用了.下面我们来

Mysql 升级到 5.6 后插入语句时间字段报错:Incorrect datetime value: &#39;&#39; for column &#39;createtime&#39;

今天部署服务器项目运行,当遇见有时间数据对象的插入和更新操作的时候,就报错,如下: Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '' for column 'createtime' at row 1 at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2868) at com.mysql.jdbc.My

记Mysql升级的一波三折

环境:mysql-5.1.61 操作系统:Cent-os6.3 目的:升级为mysql 5.6.19 首先,yum是不可行的.因为yum源没更新,我已经使用了163网易的源,但是还是不行.最新版仍然不是5.6.没办法,mysql分区是5.5之后的功能,要使用分区功能,就必须升级.. 去官网下载地址:http://dev.mysql.com/downloads/mysql/ 我是cent os,选择了Red Hat Enterprise Linux版本. 由于系统是i686的,所以选择i686版本

Android数据库升级、降级、创建(onCreate() onUpgrade() onDowngrade())的注意点

以下内容可以作为面试官在面试的时候的问题,感觉比较好,是比较常用的知识点,可以用来考察基础是否扎实. 也可以程序猿学习.开发中的注意点.因为稍微不注意,就有可能导致数据库不能用. DBAdapter.java是一个简单的类,主要用来进行数据库操作. 1 package com.example.test_20131218; 2 3 import android.content.Context; 4 import android.database.sqlite.SQLiteDatabase; 5 6

JDK读写锁ReadWriteLock的升级和降级问题

JDK提供了写锁接口ReadWriteLock和它的实现ReentrantReadWriteLock.要实现一个读写锁,需要考虑很多细节,其中之一就是锁升级和锁降级的问题.什么是升级和降级呢?ReadWriteLock的javadoc有一段话: Can the write lock be downgraded to a read lock without allowing an intervening writer? Can a read lock be upgraded to a write

mysql升级5.1到5.6

因为Ubuntu的apt库里MySQL最新版本依然是5.1,所以升级MySQL5.5 只有自行下载,并且由于两个版本间改动较大,所以务必先阅读官网的升级事项 upgrading from from MySQL 5.1 to 5.5 ,确保自己的数据库以及配置适用新版. 本文参考了一篇英文指南 A step by step guide to upgrading to MySQL 5.5 但是做了一些顺序和内容上的调整,特别是官网和这篇英文指南都是在升级前mysqldump来备份文件,升级后再将sq

MySQL 升级详细步骤 (包括 Percona)

MySQL 升级步骤 MySQL 5.1.72 升级到 MySQL 5.5.36 鉴于我在升级的时候遇到的麻烦问题,我觉得有必要把一些细节说清楚,免得引起误解了.感觉官方文档上的升级步骤写的比较简单,很容易引起混淆,感觉同我当时参照官方文档学习定制安装 MySQL 一样蛋疼.可能真的是外国淫的思维跟我差距太大了. 数据库情况:本人测试的都是 Linux Generic x86_64 版本的,也是定制安装到制定的数据库目录的. 详细升级步骤 1.MySQL 5.1.72 启动的实例 ins1 假设