您的位置:首页 > 数据库 > MySQL

MySQL 复习笔记III

2013-10-03 17:42 162 查看
不知道之前对 mysql 数据库做过什么操作,我发现服务器在访问 mysql 数据库的时候,

在 hibernate 连接数据库的配置里面,只有填写内网 ip (192.168.1.*)才能正常地连接到数据库。

今天有空准备把这个问题给解决一下,首先回顾一下已经掌握的东西:

在 OS X 的 Terminal 中键入 mysql -uroot -p123456 连接到数据库。连接成功,没问题。

然后,show databases 查看所有数据库,选择使用名为 mysql 的系统数据库(use mysql)

键入 show tables 查看当前数据库中的所有表,其中有一张叫 user 的表吸引了我的注意,

事实上这就是 mysql 管理用户权限,账号密码等数据的表了。

desc user 列出该表的所有字段信息,其中的 Host, User, Password 这三个字段应该引起我们的重视。

当 web 服务器连接数据库的时候,是与上述的三个字段息息相关的。

之前应该有说过更改 root 密码的方法,其中的一个方法就通过如下两条 sql 语句来完成的:

update user set Password=PASSWORD('123456') where User='root';

flush privileges;

上面只是涉及到了用户名和密码两项,其实 Host 也是很重要的!今天我就被上了一课。

前面不是说我只有用内网 ip 才能连接到服务器的事情么,那个纯属意外,

因为用户的密码在查询表的结果集中都是以加密的形式呈现的,

所以让我误以为 root@127.0.0.1 的密码就是我设置过的密码 123456,

但实际上并不是这样的,密码并不是 123456,所以我在用 127.0.0.1 连接数据库的时候会失败,

其实很简单,只需要执行如下的 sql 语句把 root@127.0.0.1 对应的密码修改回来就能正常连接了:

update user set Password=PASSWORD('123456') where User='root';

flush privileges;

但问题并没有这么简单,我执行 select Host,User,Password from user 命令以后,得到了如下的结果集:

% root
*SDFWEFWF...

kodeloves-Mac-mini.local root
*AFEWFG...

127.0.0.1 root*AFEWFG...

...

我的第一直觉就是,第一行和第三行有点儿矛盾,

两条记录的用户名都是 root,但密码却是不一样的,这肯定有问题!

于是我果断地执行 delete from user where User='root' and Host='%' 将第一条记录给咔嚓掉了。

然后我用 web 服务器再次尝试连接 mysql 数据库(以 127.0.0.1 连接),还是失败

(其实不是因为存在 % 这条记录的原因所致,而是如前文所述我输错了密码所致)

失败就失败,没什么大不了,继续试呗。可这时我惊奇地发现用 mysql -uroot -p123456 竟然被拒绝连接了。

坑爹了,以我来看我根本就没有动过账号密码啊,怎么就被拒绝连接了呢...

思来想去觉得可能是因为删除了 % 那条记录所致(% 可能是匹配除 localhost, 127.0.0.1 以后的其他所有 ip 的)

这样的话还不算难办,在网上查了一下,用 mysql -h127.0.0.1 -uroot -p123456 顺利地连进了数据库。

有了前面的教训,看来 % 这条记录还是不能省略,还是把它给补上来吧:

手动插入?尼玛 user 表有几十个字段,手写太累了。

怎么办呢?想了半天想到一个好办法,把 mysql.user 这张表导出为 sql 文件,

再从里面找出相关的插入语句,稍作修改执行一下就行了。下面是网上找到的相关资料:

mysql导出(备份)单张表,mysql备份指定表

/usr/local/mysql/bin/mysqldump -uroot -p123456 mydb mytb < /opt/mytb.sql

解释:

mysqldump   备份命令

-uroot   root用户

-p123456   密码为123456

mydb   表所在的数据库mydb

mytb     将要导出的表mytb 如果不指定具体表,就导出整个数据库

> /opt/mytb.sql   备份到mytb.sql中

还原:

 /usr/local/mysql/bin/mysql -uroot -p123456 mydb > /opt/mytb.sql

至此,就算是愉快的结束了,我获得了如下的福利:

web 服务器以 192.168.1.*、127.0.0.1、localhost 都能够连接到数据库了。

另外,又可以像之前一样仅用 mysql -uroot -p123456 在控制台连入数据库了。

最后,还是挺好奇 mysql 命令默认是以怎样的 Host 连接服务器的(可以肯定不是 127.0.0.1)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: