`

使用MySQL遇到问题记录

    博客分类:
  • DB
阅读更多

 

Q. Ubuntu下从源安装MySQL后,用 mysql -u root 登录时,出现:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

——2010-5-26已解决

原因:似乎这种安装方式不同于以前的惯例,默认用户root是有密码的,且具体密码不详。

解决 : 打开 /etc/mysql/debian.cnf ,可以看到包含如下内容(请忽略password的值):

user     = debian-sys-maint
password = ******

   

     用该用户名和密码登录mysql:

mysql -u debian-sys-maint -p     

 

Q.  Ubuntu下写表时遇到 ERROR 1036: Table 't_d_product' is read only

原因:数据库目录或文件的权限问题(由于移动数据 库的文件 等造成)

解决

1)切换到数据库目录及检查其权限:

cd /var/lib/mysql/数据库名称
ls -l

 

2)將*.frm、*.MYD、*.MYI 设定权限及使用者mysql:

chmod  777  *.*
chown  mysql.mysql  *.*
ls -l

 

3)重启数据库:

/etc/init.d/mysql stop
/etc/init.d/mysql start

——2010-5-28已解决

 

Q.  客户端连接时遇到 ERROR 1130: Host '...' is not allowed to connect to this MySQL server

原因:登录帐号不允许从远程登录。

解决

方法 1)改数据库mysql下的表user中的数据,依次执行:

mysql -u root -p
mysql>use mysql;
mysql>update user set host = ‘%’ where user =’test’;
mysql>flush privileges;
mysql>select ‘host’,'user’ from user where user=’test’;

 

方法 2)授权法:

如希望用户 test 使用密码 test 从任何主机连接到mysql服务器:
GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' IDENTIFIED BY 'test' WITH GRANT OPTION;

 

如想允许用户 test 使用密码 test  从ip为 192.168.1.22 的主机连接到mysql服务器:
GRANT ALL PRIVILEGES ON *.* TO 'test'@'192.168.1.22' IDENTIFIED BY ‘test’ WITH GRANT OPTION;

——2010-10-21已解决

 

Q.  基于SSH的应用,似乎在每天首次涉及到连接数据库的操作时都会出现如下异常,而之后的操作就没问题了:

 

ERROR [org.hibernate.util.JDBCExceptionReporter]
Communications link failure due to underlying exception:

** BEGIN NESTED EXCEPTION **

java.net.SocketException
MESSAGE: Broken pipe

STACKTRACE:

java.net.SocketException: Broken pipe

——2011-05已解决

原因:MySQL 的默认设置下,当一个连接的空闲时间超过8小时后,MySQL 就会断开该连接,而连接池则以为该被断开的连接依然有效。在这种情况下,如果客户端代码向连接池请求连接的话,连接池就会把已经失效的连接返回给客户端,客户端在使用该失效连接的时候即抛出异常。

解决

调整数据库连接配置,增加超时、测试连接等配置

1)如果用的是 c3p0,加上以下配置:

   <!-- 数据库连接对象最大持有时间,这个timeout一定要大于MYSQL默认的28800(秒) -->   
   <property name="c3p0.timeout">30000</property>   
   <!-- 最大可缓存数据库语句对象 -->   
   <property name="c3p0.max_statements">50</property>   
   <!-- 每隔28000s测试连接是否可用 -->   
   <property name="c3p0.idle_test_period">28000</property>   
   <property name="c3p0.acquire_increment">1</property> 

 参考:解决java.net.SocketException: Broken pipe异常

2)网上大多是用 c3p0 连接池,我用的是 DHCP,看了下 org.apache.commons.dbcp.BasicDataSource 类,发现也有类似的属性,于是加上2项配置:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		...
		<property name="testWhileIdle">
			<value>true</value>
		</property>
		<property name="validationQuery">
			<value>SELECT 1</value>
		</property>
</bean>

 加上配置后,跟踪了几天,发现异常果然不再出现,问题解决。

 

Q.  JDBC方式写入datetime类型的字段值(即 java.util.Date 转成 java.sql.Timestamp ):

Timestamp currentTime = new Timestamp(new Date().getTime());

 

Q. 2013-6-5 Java程序,原先连接MySQL5.5一切OK,连接MySQL5.6后,有很多操作出现异常:

 

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTION SQL_SELECT_LIMIT=DEFAULT' at line 1

解决

JDBC驱动需要升级,之前用的是5.1.18,改用当前(2013-6-5)最新的 mysql-connector-java-5.1.25 后问题解决。(经试验,只要使用5.1.20及其之后的版本均可以解决这个问题)

 

Q. 2014-4 (mysql-connector-java-5.1.25)

java.sql.SQLException: Operation not allowed after ResultSet closed 

com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)
com.mysql.jdbc.ResultSetImpl.checkClosed(ResultSetImpl.java:804)
com.mysql.jdbc.ResultSetImpl.realClose(ResultSetImpl.java:7331)
com.mysql.jdbc.ResultSetImpl.close(ResultSetImpl.java:923)
com.mysql.jdbc.StatementImpl.realClose(StatementImpl.java:2585)
com.mysql.jdbc.PreparedStatement.realClose(PreparedStatement.java:3158)
com.mysql.jdbc.StatementImpl.close(StatementImpl.java:577)

原因:1个Statement对象关联了多个ResultSet对象,当Statement对象关联给新的ResultSet对象时,上一个ResultSet对象会被关闭,在之后若再使用该ResultSet对象则会出现这个异常。

解决:注意多个ResultSet对象的使用顺序。

see: http://stackoverflow.com/questions/5840866/getting-java-sql-sqlexception-operation-not-allowed-after-resultset-closed

http://blog.csdn.net/sku0923/article/details/1722370

http://bugs.mysql.com/bug.php?id=620

 

 

Q. 2014-9-1 (mysql-connector-java-5.1.25)

通过JDBC插入数据时(insert into tableXXX (timestampCol, otherCol) values (null, xxx)),数据库中timestamp 类型的默认值无法起效(MySQL5.5下OK,5.6下抛出如下异常): com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'xxx' cannot be null

原因:不知道算不算是BUG,在 MySQL Connector/Net 6.6.5 Maintenance Release 这篇文章中找到 Fix for Support for current_timestamp as default for datetime with ef for server 5.6 (Oracle bug #15935094). 这段描述。

解决如果某列值是需要采用数据库中设定的默认值,则不要在 insert 语句中写上该列。

注:更换为最新的驱动mysql-connector-java-5.1.32 版本并不能解决该问题。

另,经测试,得出以下几个情况:

1) MySQL5.5 数据库端 timestamp 类型的默认值 CURRENT_TIMESTAMP 起效,无论是否在 insert 语句中设置其值为 NULL;

2) MySQL5.5 非 timestamp 、设置为 NOT NULL、设有默认值 的列,若 insert 语句中设置其值为 NULL,则会抛出异常 Column 'xxx' cannot be null,若在insert 语句中不设值,则数据库中的默认值起效;

3) MySQL5.6开始支持为 datetime 类型设置默认值 CURRENT_TIMESTAMP,若 insert 语句中设置其值为 NULL则会抛出异常 Column 'xxx' cannot be null,若在insert 语句中不设值,则数据库中的默认值起效。

 

分享到:
评论

相关推荐

    远程连接MySQL所遇到的问题以及解决问题方法

    远程连接MySQL所遇到的问题以及解决问题方法 在 Linux 系统中,使用 YUM 命令安装 MySQL 后,需要进行一系列的配置以便能够远程连接 MySQL 数据库。以下是解决不能进行远程连接 MySQL 数据库的问题的方法,这些方法...

    Linux中安装MySQL遇到的各种坑

    Linux中安装MySQL遇到的各种坑 在 Linux 系统上安装 MySQL 时可能会遇到各种问题,本文将记录这些问题并提供解决方法。 安装 NTP 在安装 MySQL 之前,需要安装 NTP(Network Time Protocol),以确保系统时间同步...

    MySQL删除重复记录

    通过使用唯一键约束、`LOAD DATA INFILE`语句的不同选项,可以有效地处理重复记录问题。然而,在实际操作中,还需要根据具体情况选择最合适的策略,以确保数据的准确性和系统的稳定性。在处理大量数据时,建议先在...

    解决python写入mysql中datetime类型遇到的问题

    刚开始使用python,还不太熟练,遇到一个datetime数据类型的问题: 在mysql数据库中,有一个datetime类型的字段用于存储记录的日期时间值。python程序中有对应的一个datetime变量dt。 现在需要往mysql数据库中添加...

    mysql插入记录防止乱码

    在使用MySQL数据库的过程中,特别是在处理中文等非ASCII字符时,可能会遇到数据插入后显示为乱码的情况。这种情况不仅影响数据的正确读取,还可能导致用户界面呈现异常。本文将详细介绍如何在MySQL中插入记录时避免...

    MySQL学习笔记,记录MySQL学习中遇到的问题.zip

    这份"MySQL学习笔记"包含了作者在学习过程中遇到的问题及解决方法,对于初学者或有经验的开发者来说都是宝贵的资源。下面,我们将深入探讨MySQL的一些核心概念和常见问题。 1. 数据库与表: MySQL中的数据库是一个...

    MySQL使用中遇到的问题记录

    MySQL是世界上最流行的关系型数据库管理系统之一,其在实际使用中可能会遇到各种问题。本文将针对在MySQL使用过程中遇到的问题进行详细解析,提供解决方案。 首先,一个常见的问题是由于`sql_mode=only_full_group_...

    mysql入门教程(含学习中遇到的问题,经典)

    根据提供的文件信息,以下是从标题、描述以及部分内容中提取并扩展出的相关MySQL知识点: ### MySQL 入门教程 #### 1. 查看 MySQL 版本与当前日期 - **SQL 语句**: `SELECT VERSION(), CURRENT_DATE;` - **解释**:...

    mysql8.0审计日志插件mariaDb安装失败记录

    在MySQL 8.0中,审计日志是用于记录数据库操作的重要工具,它可以帮助管理员跟踪和审查用户对数据库的访问行为。然而,在尝试安装MariaDB的审计日志插件时,可能会遇到一些挑战。MariaDB的审计日志插件与MySQL 8.0...

    mycat生产使用遇到的8大问题汇总

    然而,在实际生产环境中,Mycat的使用往往会遇到一些常见问题。以下是对这些问题的详细解析,旨在帮助读者避免在技术选型和应用过程中陷入困境。 1. **数据不一致问题** Mycat在实现分库分表的过程中,可能由于...

    MySQL数据库常见问题汇总

    ### MySQL数据库常见问题与解决方案 #### 一、自增字段重置与自增长字段功能实现 **1. 自增字段重置** 在MySQL中,如果你需要重置自增字段(通常用于清理数据后重新开始编号),可以使用以下SQL语句: ```sql ...

    记录学习mysql中遇到的一些问题,自己写的练习代码.zip

    在MySQL的学习过程中,我们会遇到各种各样的问题,这些问题往往源于对数据库原理的理解、SQL语句的使用不熟练或者是在实际操作中的错误。本压缩包文件“记录学习mysql中遇到的一些问题,自己写的练习代码.zip”可能...

    mysql的学习记录

    9. **数据类型**:在创建表时,你可能会遇到各种数据类型,如`int`(整型)、`varchar`(可变长度字符串)、`bit`(位字段)和`tinyint`(极小整型)。这些数据类型决定了存储数据的格式和大小。 10. **操作语句...

    MYSQL安装问题&使用大收集

    这篇“MYSQL安装问题&使用大收集”博文中,博主可能详细记录了安装MySQL时遇到的问题及解决方案,以及MySQL的日常使用技巧。由于描述为空,我们只能依据标题和标签来推测可能涵盖的内容。 首先,关于MySQL的安装,...

    Mysql root用户对应的host字段缺少localhost导致本地无法访问数据库问题修复

    但是,在使用 Mysql 时,很容易遇到一些问题,例如 Mysql root 用户对应的 host 字段缺少 localhost 导致本地无法访问数据库问题。这种问题的产生是由于 root 用户对应的 host 值没有设置为 localhost,导致本地无法...

    mysql操作常用问题解决

    在实际使用过程中,用户常常会遇到各种问题,需要掌握一些常见的解决方法。以下是对标题和描述中涉及的知识点的详细说明: 1. **安装与配置**: - MySQL的下载和安装:在不同的操作系统(如Windows、Linux、MacOS...

    mysql\eclipse常见问题及解决方案

    在IT开发过程中,集成开发环境Eclipse和数据库管理系统MySQL是两个关键工具,它们在实际使用中可能会遇到一些常见问题。本文将针对Eclipse和MySQL的典型问题提供解决方案。 首先,让我们关注Eclipse的问题: 1. **...

    记使用Oracle SQL Developer 迁移MySql 数据至 Oracle.docx

    本文将详细讲解如何使用Oracle SQL Developer工具进行这样的迁移过程,以及如何解决在迁移过程中遇到的问题。 首先,确保你拥有正确的工具。在这个案例中,你需要MySQL 5.6.37、Oracle 11g以及Oracle SQL Developer...

    MySQL++使用手册

    - 文档鼓励用户在遇到问题时寻求帮助,确保开发者能够顺利地使用 MySQL++。 #### 二、概述 **2.1 Connection 对象** - **功能**:用于建立与 MySQL 服务器的连接。 - **属性**:包含连接参数,如主机名、用户名、...

Global site tag (gtag.js) - Google Analytics