技术开发 频道

Mysql问题集锦

  【IT168 技术文档】丢了密码是非常痛心的事情,尤其是root密码丢了:( 。自己装装玩的丢了也就丢了,但是万一是生产服务器挂了麻烦可就大了!

  现在假设是由于被入侵造成的root密码丢失。这里我谈一下我自己对这样一个问题的看法。

  首先遇到这种问题我们没有必要慌张,整个恢复过程也是很简单的。

  1 下载MySQL源码分发包,不用区分操作系统,我们需要的东西是一样的。

  2 重命名自己的mysql的data目录下的mysql文件夹为oldmysql。

  3 将源码包中data目录下的mysql目录复制到你的mysql的data目录下。

  4 重新启动mysql,现在mysql的授权关系同全新安装的一样,空密码登陆,然后自行调整授权。

  5 打开oldmysql这个库检查到底出现了什么问题。

  6 如果有备份对系统中原有的数据库进行完整性检测,以免被人修改。

  通过上述6个步骤已经可以完全恢复你对mysql的控制,重点就是最后两步检查对方对改了那些权限,以及数据的完整性检测。

 

        数据库存储中的数据类型与大小各异。有些地方只存储数字类型,有些只存储文本类型,有些二者而兼之。而很多数据库支持各种专用类型:日期和时间类型,二进制字符类型以及布尔类型。
选择数据类型与数据相匹配是数据库设计中最为重要的部分,因为这种类型将会影响到RDBMS的效率与性能。所以,对RDBMS的数据类型选择应给予足够的重视。
这就是编写本文的主要目的。表A将列举了MySQL支持的绝大部分重要的数据类型,而MySQL是当前最为流行的免费RDBMS。文中还描述了何时与如何使用这些数据类型。这将有助于建立一个数据库的合理设计。
表 A

数据类型
描述
字节
推荐使用
SMALLINT
整数,从-32000到 +32000范围
2
存储相对比较小的整数。
比如: 年纪,数量
INT
整数,从-2000000000 到 +2000000000 范围
4
存储中等整数
例如: 距离
BIGINT
不能用SMALLINT 或 INT描述的超大整数。
8
存储超大的整数
例如: 科学/数学数据
FLOAT
单精度浮点型数据
4
存储小数数据
例如:测量,温度
DOUBLE
双精度浮点型数据
8
需要双精度存储的小数数据
例如:科学数据
DECIMAL
用户自定义精度的浮点型数据
变量;取决于精度与长度
以特别高的精度存储小数数据。
例如:货币数额,科学数据
CHAR
固定长度的字符串
特定字符串长度(高达255字符)
存储通常包含预定义字符串的变量
例如: 定期航线,国家或邮编
VARCHAR
具有最大限制的可变长度的字符串
变量; 1 + 实际字符串长度 (高达 255 字符)
存储不同长度的字符串值(高达一个特定的最大限度).
例如:名字,密码,短文标签
TEXT
没有最大长度限制的可变长度的字符串
Variable; 2 +聽 actual string length
存储大型文本数据
例如: 新闻故事,产品描述
BLOB
二进制字符串
变量;2 + 实际字符串长度
存储二进制数据
例如:图片,附件,二进制文档
DATE
以 yyyy-mm-dd格式的日期
3
存储日期
例如:生日,产品满期
TIME
以 hh:mm:ss格式的时间
3
存储时间或时间间隔
例如:报警声,两时间之间的间隔,任务开始/结束时间
DATETIME
以yyyy-mm-ddhh:mm:ss格式结合日期和时间
8
存储包含日期和时间的数据
例如:提醒的人,事件
TIMESTAMP
以yyyy-mm-ddhh:mm:ss格式结合日期和时间
4
记录即时时间
例如:事件提醒器,“最后进入”的时间标记
YEAR
以 yyyy格式的年份
1
存储年份
例如:毕业年,出生年
ENUM
一组数据,用户可从中选择其中一个
1或 2个字节
存储字符属性,只能从中选择之一
例如:布尔量选择,如性别
SET
一组数据,用户可从中选择其中0,1或更多。
从1到8字节;取决于设置的大小
存储字符属性,可从中选择多个字符的联合。
例如:多选项选择,比如业余爱好和兴趣。

        对于一个完整的列表和详细描述,可以查看MySQL manual。你也可以阅读文章Choosing the Right Type for a Column

  MySQL中图片和文章内容的字段类型

        在MySQL中如果保存图片的话,就用binary,或者直接用varchar类型,来保存图片的路径。

  如果保存文章内容这类字数比较多的字段时,就用text。

  在我的概念中,mysql中的text字段应该是没有长度限制的,但是今天事实告诉我,text类型的长度是有限制的。其中mysql的text类型有64K长度限制的,mediumtext中型是2G,longtext大型是4G 。 

  mysql数据库中text字段长度不够的问题类型是可变长度的字符串,最多65535个字符;可以把字段类型改成MEDIUMTEXT(最多存放16777215个字符)或者LONGTEXT(最多存放4294967295个字符)。

        MySQL最大连接数设置

        MySQL的最大连接数默认是100

  客户端登录:mysql -uusername -ppassword

  设置新的最大连接数为200:mysql> set GLOBAL max_connections=200

  显示当前运行的Query:mysql> show processlist

  显示当前状态:mysql> show status

  退出客户端:mysql> exit

  查看当前最大连接数:mysqladmin -uusername -ppassword variables |find "max_con"

  如:

  C:\mysql\bin>mysqladmin -uroot -p variables | find "max_con"

  Enter password:

  | max_connections | 100

  成功安装了MySQL后用的语句

        net start mysql //启动服务器(在D:\MySQL\MySQL Server 5.0\bin 下)

  mysql -h localhost -u root -ppass;//连接数据库 root 是管理员 pass 是密码

  show databases ;//查看数据库名

  create database student;//建立数据库

  USE student;//应用这个数据库

  show tables;//查看表明

  CREATE TABLE Students(

  ID INT,

  name CHAR(20)); //建表

  INSERT INTO Students (ID,name)VALUES(1,"wang"); //插入纪录

  SELECT * FROM Students; //查看纪录

  mysql> show databases;

  +--------------------+

  | Database |

  +--------------------+

  | information_schema |

  | mysql |

  | student |

  | test |

  +--------------------+

  4 rows in set (0.13 sec)

  mysql> use student;

  Database changed

  mysql> show tables;

  +-------------------+

  | Tables_in_student |

  +-------------------+

  | students |

  +-------------------+

  1 row in set (0.11 sec)

  mysql> SELECT * FROM Students;

  +------+------+

  | ID | name |

  +------+------+

  | 1 | wang |

  +------+------+

  1 row in set (0.00 sec)

  mysql> exit //退出MySQL

  Bye

  D:\MySQL\MySQL Server 5.0\bin>

  用JAVA语言查找MySQL数据库里的内容

        前题:

  1>create database student;

  2>create table Students(

  ID int,

  name char(20));

  3>insert into Students(ID,name)values(1,"wang");

  java代码:        

import java.sql.*;
public class MySqlSelect {
public static void main(String[] args){
Connection conn
=null;
Statement ment
=null;
ResultSet rset
=null;
String cname="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost/student?user=root&password=123456";

try{
  Class.forName(cname);
   conn
=DriverManager.getConnection(url);
   ment
=conn.createStatement();
   rset
=ment.executeQuery("select * from Students");
  
while(rset.next()){
   System.out.println(
" ID: "+rset.getInt(1)+";    name:   "+rset.getString("name"));
   }
                
//rset.getInt(1)是调用数据表中的第一列。rset.getString是调用数据表的name列
}catch(ClassNotFoundException e){
   e.printStackTrace();
}catch(SQLException se){
   se.printStackTrace();
}finally{
   try{
        
if(rset!=null){
    rset.close();
    rset
=null;
          }
      
if(ment!=null){
    ment.close();
    ment
=null;
       }
      
if(conn!=null){
    conn.close();
    conn
=null;
       }
  
     }catch(SQLException e2){
    e2.printStackTrace();
     }
}
}
}

 

   输出:
       ID: 1;   
name:   wang

#1064 - You have an error in your SQL syntax near 的错误    

1CREATE TABLE `books` (
2       `yc_id` int(16) NOT NULL auto_increment,
3       `yc_name` varchar(16) character set gbk default NULL,
4       `yc_sex` varchar(4) character set gbk default NULL,
5       `yc_mail` varchar(30) character set gbk default NULL,
6       `yc_qq` varchar(15) character set gbk default NULL,
7       `yc_home` varchar(50) character set gbk default NULL,
8       `yc_content` mediumtext character set gbk,
9       `yc_ip` varchar(16) character set gbk default NULL,
10       `yc_sf` varchar(1) character set gbk default NULL,
11       `yc_time` varchar(100) character set gbk default NULL,
12     PRIMARY KEY     (`yc_id`)
13) ENGINE=InnoDB DEFAULT CHARSET=gb2312 AUTO_INCREMENT=50 ;
14

        本地数据库MySQL - 5.0.22;网上数据库MySQL 3.23.58。

  错误提示

  #1064 - You have an error in your SQL syntax near 'CHARACTER SET gbk default NULL ,

  `yc_sex` varchar( 4 ) CHARACTER SET gbk de' at line 2

  很明显数据库不兼容造成的!我们要修改SQL语句,解决方案:        

1CREATE TABLE `books` (
2       `yc_id` int(16) NOT NULL auto_increment,
3       `yc_name` varchar(16) default NULL,
4       `yc_sex` varchar(4) default NULL,
5       `yc_mail` varchar(30) default NULL,
6       `yc_qq` varchar(15) default NULL,
7       `yc_home` varchar(50) default NULL,
8       `yc_content` mediumtext,
9       `yc_ip` varchar(16) default NULL,
10       `yc_sf` varchar(1) default NULL,
11       `yc_time` varchar(100) default NULL,
12     PRIMARY KEY     (`yc_id`)
13) TYPE=MyISAM;
14
0
相关文章