精华内容
下载资源
问答
  • MySQL数据库升级

    2020-03-28 13:43:28
    当前不少系统的数据库依旧是MySQL5.6,由于MySQL5.7及MySQL8.0在性能及安全方面有着很大的提升,因此需要升级数据库。本文通过逻辑方式、物理方式原地升级来介绍MySQL5...

    当前不少系统的数据库依旧是MySQL5.6,由于MySQL5.7及MySQL8.0在性能及安全方面有着很大的提升,因此需要升级数据库。本文通过逻辑方式、物理方式原地升级来介绍MySQL5.6 升级至MySQL5.7的方法,并介绍其使用场景。

    01

       逻辑方式升级 

    逻辑方式升级其实就是通过逻辑备份工具(例如mysqldump工具)将数据库、表、其他相关对象及数据逻辑备份成SQL脚本,再将其还原至MySQL5.7的实例中。

    详细步骤如下:

    1.1  备份数据库

    当前数据库的版本为MySQL5.6.27,现在准备备份

     因为库比较小,因此使用mysqldump进行备份即可。mysqldump备份的方法可以参考历史文章进行了解 

    MySQL数据备份及还原(一)https://mp.weixin.qq.com/s/JbLThtgUq5RjkCuztSgBJg 

    或 https://www.cnblogs.com/gjc592/p/12505347.html

    备份脚本:

    /*  备份所有库及相关对象 */
    /usr/local/mysql/bin/mysqldump -uroot -p  
    --socket=/app/data/mysql3307/tmp/mysql.sock  --master-data=2 --default-character-set=utf8  --routines   --triggers --events --flush-logs --flush-privileges --single-transaction  --all-databases   > all_db.sql
    

    1.2  部署一套MySQL5.7实例

    MySQL5.7 的部署历史文章里也有,如果不太熟悉的同学可以参考如下链接文章

    MySQL5.7安装https://mp.weixin.qq.com/s/fbp-3hpMxrCc7R3_HQTchA 

    或 https://www.cnblogs.com/gjc592/p/9203711.html

    安装过程比较简单,本文不再赘述。

    1.3  数据导入MySQL5.7

    将备份的MySQL5.6的数据导入到MySQL5.7 中即可。

    1.4 应用场景

    • 数据量小的情况下使用,此方式通常不会失败

    • 在跨大版本升级的时候使用较多,例如,从MySQL5.6(或更低版本)直接升级到8.0版本

    • 不同MySQL分支之间升级

     

    02

       原地升级方式 

    使用mysql_update方式原地升级时,时间相对较快,尤其是数据库体量较大时,此方式可以原地直接升级。

    步骤如下:

    2.1  下载MySQL5.7

    下载需要升级到的版本的数据库,例如本次升级到MySQL5.7.25-28版本(percona分支),则下载对应安装包,解压后配置软连接

    2.2  修改配置文件

    因MySQL5.6 的部分参数再MySQL5.7 中已经废弃或者默认值发生变化,另外也为了使用MySQL5.7的新特性,需要添加对应的参数配置,例如:

    • sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION   # 保持和MySQL5.6一致

    • innodb_large_prefix =OFF                                         # 保持和MySQL5.6 一致

    • log_timestamps=SYSTEM            # 新增参数,如果不添加,默认日志里采用UTC时间格式记录,我们看上去可能不太方便

    • secure_file_priv=/tmp                  # MySQL5.7对安全性做了很多提升,此参数不配置的话默认无法使用load file 及ELECT …OUTFILE等

    • character_set_server= utf8         # 虽然建议使用utf8mb4字符集,但是如果需要保持和原库一致,需要指定

    当日,还有很多新特性的参数需要调整,在此不再一一列举,需要的同学直接联系我 或者参考历史文章配置即可

    2.3 关闭MySQL5.6 实例

    MySQL5.6的关闭可以使用停止服务的方式,也可以通过命令行方式,命令如下:

    /*  mysql5.6 关闭实例的方式需要使用mysqladmin */
    /usr/local/mysql/bin/mysqladmin  --socket=/app/data/mysql3307/tmp/mysql.sock    -uroot -p shutdown
    

    建议:生产环境中,如果可以使用此方式升级,强烈建议先直接冷备一下整个数据库的数据目录,已防止升级失败等情况出现。

    2.4  使用MySQL5.7 启动原库

    此时需要用MySQL5.7来启动数据库,启动后日志里会有一些报错信息。

    启动数据库

    /usr/local/mysql5.7/bin/mysqld_safe  --defaults-file=/app/data/mysql3307/etc/my.cnf &
    

    日志里内容如下,出现很多错误,其中也提示到需要使用mysql_upgrade进行修复:

    2.5  升级数据库

    MySQL升级工具是mysql_upgrade,错误日志里也提到了使用mysql_upgrade进行修复相应的错误。升级的方法如下:

    /*  升级系统库及业务库 */
    /usr/local/mysql5.7/bin/mysql_upgrade  --socket=/app/data/mysql3307/tmp/mysql.sock    -uroot -p
    

     如果只需要升级系统库,则加-s参数;如果升级过程中有错误或者中断后想再次升级 可以添加--force参数强制升级

    /*  只升级系统库 */
     /usr/local/mysql5.7/bin/mysql_upgrade  --socket=/app/data/mysql3307/tmp/mysql.sock    -uroot -p   -s
    /*  强制升级 */
     /usr/local/mysql5.7/bin/mysql_upgrade  --socket=/app/data/mysql3307/tmp/mysql.sock    -uroot -p   --force
    

    2.6 后续工作

    升级完成后建议再进行以下工作

    • 重启数据库,以便所有功能生效;且重启后再次查看数据库日志

    • 修改环境变量及软连接,以便默认使用MySQL5.7的相关命令

    附: 升级后数据库启动日志

    2.7  使用场景

    相同大版本之间的小版本升级

    数据量较大,提前测试过两个版本之间可以原地升级时再用。

     

    03

       小结 

    MySQL的逻辑升级及mysql_upgrade的原地升级都有各自的应用场景。但是无论用哪种方式,都要注意以下几点:

    a)   在生产环境上进行升级操作之前一定需要先在测试环境中多次进行相同版本的升级测试工作;

    b) 实际工作中,测试环境升级成功后需要经过相关业务的回归测试,确保相关功能升级后能正常使用后再在生产环境进行升级,建议测试环境进行1个月以上的测试

    c)   生产环境升级前一定要进行备份

    d)   生产环境的升级顺序建议是先升级从节点,再升级主节点或进行主从切换

     

    以上就是MySQL5.6升级至MySQL5.7的2种主要方式,升级到MySQL8.0方法相同,但有些参数细节需要修改,大家可以自行测试。如有问题、建议或想投稿及合作的,欢迎与我沟通(公众号:数据库干货铺)。

    为了与更多的朋友沟通,现已开通新的技术交流群,欢迎同学们扫码或公众号后台回复 “加群” 联系管理员加入,谢谢。

    往期精彩回顾

    1.  升级python,就是这么简单

    2.  mysql8.0新增用户及加密规则修改的那些事

    3.  比hive快10倍的大数据查询利器-- presto

    4.  监控利器出鞘:Prometheus+Grafana监控MySQL、Redis数据库

    5.  PostgreSQL主从复制--物理复制

    6.  MySQL传统点位复制在线转为GTID模式复制

    7.  MySQL敏感数据加密及解密

    8.  MySQL数据备份及还原(一)

    9.  MySQL数据备份及还原(二)









    展开全文
  • 支持mysql数据库升级,把需要升级的所有sql语句写在一个文本中,选择文本,就能全部数据库全部升级成功,不需要一句一句的去执行,自动过滤错误的sql语句跳过不执行。此资源含C#源代码。vs2019能无错误执行成功。
  • 主要介绍了MySQL数据库升级需要注意的地方,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
  • MySQL数据库升级后程序报错(5.7.22升级为5.7.23): ### Cause: ...

    一、问题

    MySQL数据库升级后程序报错(5.7.22升级为5.7.23):

    ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.u.ID' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
    ; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.u.ID' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by] with root cause
    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.u.ID' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

    二、原因

    1、SQL语句不严谨,select字段没全在group by中包含。

    2、数据库版本导致:sql_mode=only_full_group_by

    用sql查询 select @@global.sql_mode,结果如下:

    新库:ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

    旧库:
    NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

    二、解决

    1、修改SQL,使规范。

    2、修改数据库配置中的sql_mode值

    (1)打开终端执行:sudo vim /usr/local/mysql/my.cnf

    (2)在[mysqld] 组下找到sql-mode键

    (3)备份改行,再改为新值:sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

    (4)重启MySQL服务:sudo service mysql restart

    ------------------------------------------------------------------------------------------------------------------------------------
    暂时修改

    select @@sql_mode;

    set sql_mode=(select replace(@@sql_mode,'ONLY_FULL_GROUP_BY','')); 


    set sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; 

    =====

    全局
    select @@global.sql_mode;

    set global sql_mode=(select replace(@@global.sql_mode,'ONLY_FULL_GROUP_BY','')); 

    ------------------------------------------------------------------------------------------------------------------------------------

    疑问:tomcat7+jdk7环境下出现的这个问题,tomcat8+jdk8下不会出现这个问题。

     

    展开全文
  • 对于商业数据库而言,数据库升级是一个优先级很高的事情,有版本升级路线图,有相应的补丁,而且对于方案还有一系列的演练,显然是一场硬仗。而在MySQL方向上,升级这件事情就被淡化了许多,好像只能证明它的存在...
  • Mysql 数据库升级shell脚本编写与测试心得
    1.数据库使用到的账户信息及动态可变的信息最好定义为变量,放置服务器变更或表名变更需要修改多个地方,如果有遗漏,引发执行shell中断等问题:例如服务器IP地址 ,登录用户名,登录密码 ,端口号 ,AB表机制中的每天轮训切换的表名等。
    2.在shell脚本中使用 mysql -h$mysqlhost -u$mysqluser -p$mysqlpasswd -e 方式执行 Mysql SQL脚本时,最后不要超过1000行,否则会提示 参数过长错误 。
    3.最后给shell脚本中引入zc_log日志部分代码,每次执行完后将执行结果保存至日志中,使用 “  $? ” 获取前一次执行命令的返回结果,返回0表示执行成功没有错误信息,便于对shell脚本执行情况监控与执行过程中的问题定位与处理
    4.数据库升级shell脚本编写时应注意,最后将一个大升级shell分割为多个小shell,避免shell过大,如果执行过程中有问题,不方便定位问题与对应shell执行情况掌握不清楚,回退等比较困难。一般建议分割为:新增表(upgradeCreateTables.sh)  、修改表 (upgradeAlterTables.sh) 、新增存储过程与触发器(upgradeCreateProc_triggers.sh)、修改存储过程与触发器(upgradeUpdateProc_triggers.sh)、新增表数据插入(upgradeCreateTablesData.sh)、修改表历史数据(upgradeUpdateOldData.sh) 、 清空对时效性要求不高的历史表数据(upgradeClearOldData.sh),例如 db_log与user_log ,保留近一个月左右的即可,升级前讨论确定

    5.编写升级完成后检查项:新增表(个数,表结构) ,修改表(个数与表结构),存储过程(个数与内容),触发器(个数与内容)
    6.使用zc_log时应注意,zc_log代码中的 "`"符号,一个都不能少,否则会在执行Shell时出现不必要的错误,数据库脚本中最后将" `"替换为空格,不要在升级shell脚本中直接替换,应该在其他文件中替换,防止将zc_log中的"`"替换掉。
    7.在编写触发器与存储过程部分升级Shell脚本时,如果没有drop相关语句,后期手动添加时应该注意多次检查防止将目标删除对象名下错了,导致删除其他存储过程或触发器,引发不必要的错误。
    8.在执行升级Shell前,备份数据库时,建议将表结构和标数据 与触发器和存储过程分别备份(防止由于部分表有触发器,导致在将备份数据导出数据库时,触发器执行导致数据备份前后不一致问题),再做一次完整备份(防止之前备份有问题,还有一个备份,双保险)
    mysqldump备份参数简单介绍: --sikp-triggers  不导出触发器   -R 导出存储过程与自定义函数     --triggers 导出触发器   --no-data 不导出数据  --no-create-info  不导出表结构
    展开全文
  • 1、备份和恢复 a、 使用逻辑备份的方式进行备份,使用mysqldump工具: ...2、升级数据库 a、先卸载旧版本相应的安装。(卸载之前要先确认做好数据备份)。 查看卸载部分:rpm -qa |grep -i mysql / yu...

    1、备份和恢复

          a、 使用逻辑备份的方式进行备份,使用mysqldump工具:

            mysqldump -u 用户 -p 密码 --databases 数据库名 >> 备份文件名.sql;

          b、恢复:mysql -u 用户名 -p 密码  < 备份文件名.sql;

    2、升级数据库

          a、先卸载旧版本相应的安装。(卸载之前要先确认做好数据备份)。

            查看卸载部分:rpm -qa |grep -i mysql  /  yum list installed | grep mysql;

            卸载:yum remove mysql-community-release

           查找文件残骸并删除:find / -name mysql

          b、下载安装源。

            wget http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
            yum localinstall mysql57-community-release-el7-7.noarch.rpm

           c、安装:yum install -y mysql-server

           d、确认版本:mysql --version

           e、假如登录失败提示密码错误:

           

    e、登录提示密码错误:
            1.修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证
            2.重启 mysqld 服务:systemctl restart mysqld
            3.使用 root 用户登录到 mysql:mysql -u root
            4.`切换到mysql数据库,更新user表:

            update user set authentication_string = password('新密码'), password_expired = 'N', password_last_changed = now() where user = 'root';

            5.退出 mysql,编辑/etc/my.cnf文件,删除skip-grant-tables=1的内容并重启mysqld服务

     

         

     

    展开全文
  • 参考文档:https://blog.csdn.net/watermelonbig/article/details/52973487
  • 这是学习笔记的第2257篇文章读完需要9分钟速读仅需7分钟对于商业数据库而言,数据库升级是一个优先级很高的事情,有版本升级路线图,有相应的补丁,而且对于方案还有一系列的演练,陷入是一...
  • mysql.driver.version&gt;8.0.11&lt;/mysql.driver.version&gt;2、修改参数jdbc.url=jdbc:mysql://localhost/xx?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;server...
  • 2017最全的全国省市区mysql数据库,与国家统计局数据同步,包含简称,地理位置经纬度,无限分类结构,包含港澳台。地区含有经纬度
  • 我还在上课,突然告诉我说要测试新网页,需要将数据库升级到5.7以上版本。确实,我们服务器上的mysql感觉像是解放前的版本一样,太老了。一直说升级,但是总是忘。好了,趁着这次机会,把这个民国的老古董升级一下吧...
  • Mac OSX 下的数据库升级最麻烦的不过权限的问题. 本文的MySQL的安装方式为OSX下DMG磁盘镜像的安装方式, Mac Ports/Homebrew 的方式大同小异. 从 5.6.17 升级到 5.7.18 安装目录信息 ls -al /usr/local |grep mysql...
  • 关于mysql数据库升级到5.6的问题

    千次阅读 2016-05-13 14:52:05
    由于之前一下不规范的动作,导致升级数据库mysql5.6之后,数据无法插入,提示默认值不存在。只能把全部数据表检查一遍,凡是没有默认值的都设置上。这样当你插入的SQL没有对应列值的时候,才不会报错。
  • 实际项目中经常需要编写数据库升级脚本来做一些基本的表操作:如添加表、添加字段,修改字段等。由于环境部署会经常执行升级脚本,编写可重复执行的升级脚本就很重要。 基本思路是对表做操作前先判断表是否存在,对...
  • 升级后台的应用,不可避免要进行数据库升级与备份,花了一个上午琢磨了一个脚本分享给大家。 ToB的业务,在做环境维护的时候,有初始化环境和增量升级的环境,在测试阶段,几乎每轮都会动数据库脚本,那么测试...
  • MySql数据库升级乱码问题

    千次阅读 2007-10-16 01:14:00
    原贴:http://blog.freshao.com/archives/2007/09/12/15.shtmlMySql数据库升级乱码问题这几天在升级论坛,数据库乱码的问题最常见,尤其是从MYSQL 4.0升到MYSQL 5。 我在升级的时候也碰到这个问题,经过无数次的...
  • 由于mysql的特殊性,可以放在存储过程中进行条件逻辑判断 这样写的脚本可以重复执行,安全系数增高, 先判断表中是否有字段和索引,没有则增加,有则跳过。 DROP PROCEDURE IF EXISTS schema_change ; ...
  • MySQL数据库升级脚本

    千次阅读 2007-11-27 09:40:00
    #更改表结构 ALTER   TABLE  e_feerule CHANGE code prefix  varchar ( 255 )  not   null ; ALTER   TABLE ...注:以上为MySQL数据库升级脚本upgrade.sql。命令行下输入mysql 即可执行。
  • 2014最全的全国省市区mysql数据库,与国家统计局数据同步,46462条,包含简称,地理位置经纬度,无限分类结构,包含港澳台。地区含有经纬度

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,775
精华内容 1,910
关键字:

mysql数据库升级

mysql 订阅