【IT168 技术文档】丢了密码是非常痛心的事情,尤其是root密码丢了:( 。自己装装玩的丢了也就丢了,但是万一是生产服务器挂了麻烦可就大了!
现在假设是由于被入侵造成的root密码丢失。这里我谈一下我自己对这样一个问题的看法。
首先遇到这种问题我们没有必要慌张,整个恢复过程也是很简单的。
1 下载MySQL源码分发包,不用区分操作系统,我们需要的东西是一样的。
2 重命名自己的mysql的data目录下的mysql文件夹为oldmysql。
3 将源码包中data目录下的mysql目录复制到你的mysql的data目录下。
4 重新启动mysql,现在mysql的授权关系同全新安装的一样,空密码登陆,然后自行调整授权。
5 打开oldmysql这个库检查到底出现了什么问题。
6 如果有备份对系统中原有的数据库进行完整性检测,以免被人修改。
通过上述6个步骤已经可以完全恢复你对mysql的控制,重点就是最后两步检查对方对改了那些权限,以及数据的完整性检测。
数据类型 | 描述 | 字节 | 推荐使用 |
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中图片和文章内容的字段类型
在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代码:
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 的错误
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语句,解决方案:
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