解决mysql版本升级导致的一些错误

在项目过程遇到一些因为数据库版本原因发生的一些错误

mysql服务器升级数据还原后表结构不能显示

mysql服务器升级后,数据库数据还原后,在使用navicat进行desc表结构是出现了

“1558 – Column count of mysql.proc is wrong. Expected 20, found 16. Created with MySQL 50018, now running 50146. Please use mysql_upgrade to fix this error.”这样的错误内容

我的mysql服务器是从5.1升级到了5.5版本,而原数据库表的备份与恢复是直接copy mysql data目录;数据都是完好的。搜索查明

解决方案就是:

mysql.proc
这个是5.1里面的系统表来的,用来记录存储过程或函数的信息.你的数据库肯定作过升级或用不同的版本进行备份迁移恢复.

使用命令:mysql_upgrade 就可以解决

mysql_upgrade -u root –datadir=/opt/mysql –basedir=/opt/mysql/data –password=123456

MySQL utility for upgrading databases to new MySQL versions.

5.6.10 mysqldump: Couldn’t execute ‘SELECT @@GTID_MODE’ 执行错误

mysqldump: Couldn’t execute ‘SELECT @@GTID_MODE': Unknown system variable ‘GTID_MODE’ (1193)

不知道系统变量GTID_MODE,google搜索在mysql官方找到一片bug报告

mysqldump –set-gtid-purged=AUTO does not detect if mysqld has GTIDs

5.6.5 introduced GTIDs. mysqldump 5.6 was made
compatible  to use GTIDs
2. In versions < 5.6, where GTIDs are not
even defined, mysqldump 5.6 fails as it cannot
execute ‘SELECT @@GTID_MODE’
3.  using –set-gtid-purged=AUTO, should detect whether
the server has GTIDs enabled or not.  However, this
option works only for 5.6 versions.

WORKAROUND: if you are using mysqldump 5.6 to backup mysql-5.5  and old database
versions, use –set-gtid-purged=OFF option.

Fix:  THe fix is to check for the server version before executing ‘select @@gtid_mode’

5.6.5版本引入GTIDs;如果mysql version 小于5.6,GTIDs是没有定义的,mysqldump5.6不能执行’SELECT @@GTID_MODE’ ;应该使用–set-gtid-purged=AUTO用来检测GTIDs是否启用,但是这个选项只能在5.6版本mysql上工作

我要备份的远程服务器是

原先按正常的mysqldump语法如下则会报错

所以应该用mysqldump 5.6 对mysql server版本小于5.6版本或者是更老的版本进行数据备份时,会首先执行“SELECT @@GTID_MODE”这样的语句(尽管select @@gtid_mode 得到的属性值它是off)

则要有加上 –set-gtid-purged=OFF 属性了,导出成功

 

但是对于这个gtid_mode属性是什么意思,我不是很明白,查阅了一下与事物数据同步有关想了解的请看16.1.4.5. Global Transaction ID Options and Variables

“这是因为在启用GTID模式下,如果对非事务表更新时,无法保证事务一致性,因此设置 disable-gtid-unsafe-statements = 1 确保主从数据一致性。”

[MySQL FAQ]系列 — 启用GTID & binlog新安装完的MySQL提示无法登录

[root@imysql mysql]# mysql mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
答:数据库已经执行过 mysql_install_db 初始化了,按理说应该没问题。经过排查,发现 $datadir 的 mysql 数据库目录的权限模式为:

drwx------ 2 mysql root        4096 Jan  9 20:22 mysql
看起来没有问题。检查错误日志,发现一行:

130109 21:04:23 [Warning] Bootstrap mode disables GTIDs. Bootstrap mode should only be used by mysql_install_db which initializes the MySQL data directory and creates system tables.
ERROR: 1785  Updates to non-transactional tables are forbidden when DISABLE_GTID_UNSAFE_STATEMENTS = 1.
130109 21:04:23 [ERROR] Aborting
同时,mysql库下的user表空间文件显示:

-rw-rw---- 1 mysql mysql 10684 Jan  9 20:22 user.frm
-rw-rw---- 1 mysql mysql     0 Jan  9 20:22 user.MYD
-rw-rw---- 1 mysql mysql  1024 Jan  9 20:22 user.MYI
可以看到,user表空间数据文件大小为0。
看起来应该是和启用GTID模式有一定关系了。仔细检查下,发现和GTID相关的选项有:

gtid_mode = ON
binlog_format = mixed
disable-gtid-unsafe-statements = 1
log-bin=binlog
这是因为在启用GTID模式下,如果对非事务表更新时,无法保证事务一致性,因此设置 disable-gtid-unsafe-statements = 1 确保主从数据一致性。

解决方案:
这时候可以将选项 disable-gtid-unsafe-statements 的值修改为 0。也可以同时关闭 GTID 、 binlog 选项,初始化完毕后再打开。

#gtid_mode = ON
#log-bin=binlog

disable-gtid-unsafe-statements = 0

时间: 2024-11-02 20:56:00

解决mysql版本升级导致的一些错误的相关文章

mysql版本升级导致的一些错误总结

在项目过程遇到一些因为数据库版本原因发生的一些错误 mysql服务器升级数据还原后表结构不能显示 mysql服务器升级后,数据库数据还原后,在使用navicat进行desc表结构是出现了 "1558 – Column count of mysql.proc is wrong. Expected 20, found 16. Created with MySQL 50018, now running 50146. Please use mysql_upgrade to fix this error.

解决MySql 清空表时报1701错误的办法

清空具有外键约束的表时报ERROR 1701(42000) Cannot truncate a table referenced in a foreign key constraint (`laravel-test`.`bl_role_user`, CONSTRAINT `role_user_role_id_foreign` FOREIGN KEY (`role_id`) REFERENCES `laravel-test`.`bl_roles` (`id`)) 解决的办法: 关闭外键约束->清空

解决mysql使用GTID主从复制错误问题

解决mysql使用GTID主从复制错误问题 做MySQL主从的话肯定会遇到很多同步上的问题, 大多数都是由于机器宕机,重启,或者是主键冲突等引起的从服务器停止工作, 这里专门收集类似问题并提供整理解决方案,仅供参考! 1.主从网络中断,或主服务器重启,或从服务器重启,从会根据配置文件中的时间(默认1分钟)去自动重连主服务器,直到网络和服务均可正常连接,连接正常后可自动继续同步之前文件,不需要任何人工干预! 2.当主从因为人为原因出现不同步的时候,可以用下面命令进行同步:  代码如下 复制代码 L

怎样解决mysql连接过多的错误

问:怎样解决mysql连接过多的错误? 答:系统不能连接数据库,关键要看两个数据: 1.数据库系统允许的最大可连接数max_connections.这个参数是可以设置的.如果不设置,默认是100.最大是16384. 2.数据库当前的连接线程数threads_connected.这是动态变化的. 查看max_connections.max_connections的办法见后. 如果 threads_connected == max_connections 时,数据库系统就不能提供更多的连接数了,这时

如何实战解决mysql#1366错误

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 mysql#1366错误是在mysql5.0.2以上版本才出现的,不管是编码还是字段不符合规则,就通不过mysql严格的数据检查,#1366错误就是这样出现的.当然如果你有修改my.ini的权限,通常#1366是很好解决掉的.只要把my.ini里的sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREAT

mysql 服务意外停止1067错误解决办法小结_Mysql

事件类型: 错误 事件来源: Service Control Manager 事件种类: 无 事件 ID: 7034 日期: 2012-11-1 事件: 9:25:52 用户: N/A 计算机: SVCTAG-HZWGF3X 描述: 服务 MySQL 意外停止.这发生了 1 次. 有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心. 再看应用程序错误,看出 发现有这么个提示 D:xxxxmysqld: Shutdown c

Python提示[Errno 32]Broken pipe导致线程crash错误解决方法_python

本文实例讲述了Python提示[Errno 32]Broken pipe导致线程crash错误解决方法.分享给大家供大家参考.具体方法如下: 1. 错误现象ThreadingHTTPServer 实现的 http 服务,如果客户端在服务器返回前,主动断开连接,则服务器端会报 [Errno 32] Broken pipe 错,并导致处理线程 crash. 下面先看个例子,python 版本: 2.7 示例代码 复制代码 代码如下: #!/usr/bin/env python #!coding=ut

解决Mysql错误:Can't create/write to file 'C:\WINDOWS\TEMP\#sql_1344_0.MYD' (Errcode: 17)

解决Mysql错误:Can't create/write to file 'C:\WINDOWS\TEMP\#sql_1344_0.MYD' (Errcode: 17)的问题,我所使用的系统是Windows Server http://www.aliyun.com/zixun/aggregation/19058.html">2003 SP2+php 5.2.2+mysql5.0.22+McAfee杀毒软件,当访问用户主页的时候发现mysql出错误,下面来说一下具体的解决方法,风信网 htt

MySql 修改密码后的错误快速解决方法_Mysql

设置好密码后,使用数据库时出现如下错误: ERROR 1820 (HY000): You must reset your password using ALTER USER statement befo re executing this statement. You must SET PASSWORD before executing this statement的解决方法 今天在MySql5.6操作时报错:You must SET PASSWORD before executing this