曲径通幽论坛

标题: Mysql [打印本页]

作者: beyes    时间: 2009-5-5 14:47
标题: Mysql
一、基础应用

mysql 的配置文件,一般为 /etc/my.cnf ,若是 ubuntu 里就为 /etc/mysql/my.cnf

没有密码时连接数据库命令
mysql -u root mysql  # -u 表示后接“用户名”参数

登录后,使用 \s 命令(status)可以从服务器里得到状态信息
mysql> \s
--------------
mysql  Ver 14.12 Distrib 5.0.67, for suse-linux-gnu (i686) using readline 5.2

Connection id:        23
Current database:   
Current user:        root@localhost
SSL:            Not in use
Current pager:        less
Using outfile:        ''
Using delimiter:    ;
Server version:        5.0.67 SUSE MySQL RPM
Protocol version:    10
Connection:        Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    latin1
Conn.  characterset:    latin1
UNIX socket:        /var/lib/mysql/mysql.sock
Uptime:            12 hours 35 min 48 sec

Threads: 1  Questions: 106  Slow queries: 0  Opens: 23  Flush tables: 1  Open tables: 17  Queries per second avg: 0.002
--------------

退出,使用 \q 参数
mysql> \q
Bye

查看 mysql 版本信息
mysqladmin -u root version     #没有密码
或者
mysqladmin -u root -p version   # root 用户需要输入密码后才可以查看

列出信息:
... ...
Server version        5.0.67
Protocol version    10
Connection        Localhost via UNIX socket
UNIX socket        /var/lib/mysql/mysql.sock
Uptime:            14 hours 27 min 12 sec
... ...

检查所有的配置选项
beyes@linux-beyes:~> mysqladmin -u root -p variable
Enter password:
+---------------------------------+----------------------------+
| Variable_name                   | Value                      |
+---------------------------------+----------------------------+
| auto_increment_increment        | 1                          |
| auto_increment_offset           | 1                          |
| automatic_sp_privileges         | ON                         |
| back_log                        | 50                         |
| ... ...
+---------------------------------+----------------------------+

默认情况下,root 密码为空,可如下修改
mysqladmin -u root password newpassword

修改完后,如果直接 mysql -u root 登录会被拒绝
beyes@linux-beyes:~/Desktop> mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

需要加入参数 -p ,并在提示密码时输入正确密码登录
beyes@linux-beyes:~/Desktop> mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 33
Server version: 5.0.67 SUSE MySQL RPM

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

其实上面直接在终端里设置密码有一定的危险性,因为终端里会留下相应的命令历史记录,安全的做法如下,首先先登录 mysql ,然后清除密码
mysql> SET password=PASSWORD('');
Query OK, 0 rows affected (0.01 sec)
上面,括号里的单引号中不包括任何内容,其意是使密码清空。

同样的方式设置新密码
mysql> SET password=PASSWORD('secretpassword');
Query OK, 0 rows affected (0.01 sec)
这样设置后,密码变成:secretpassword
上面,严格得讲,命令后所用的分号并不是实际 SQL 命令的一部分,使用它是为了告诉 MySQL 我们已经准备好要执行 SQL 语句了--回车后执行语句。如果一个命令串输入完后没跟着分号而是直接回车,那么就会出现提示符->,提示可以继续输入命令,这时如果填写分号,然后回车,上面的命令串就得以执行。另外,SET 是大写形式,其实小写也可以,但使用大写会更方便阅读。
作者: beyes    时间: 2009-5-5 19:49
标题: 简单查询
二、简单查询

1、查询内置权限表 -- 检测用户及密码等信息:
一开始使用 use 命令转换到相应的数据库中并打开:
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
检查 user 表中的用户,对应的主机,密码等信息:
mysql> SELECT user, host, password FROM user;
+------+-------------+-------------------------------------------+
| user | host        | password                                  |
+------+-------------+-------------------------------------------+
| root | localhost   | *90427DDE5E6F5547DA40AAF767C2DBA1ACCAB588 |
| root | linux-beyes |                                           |
| root | 127.0.0.1   |                                           |
|         | localhost   |                                           |
|         | linux-beyes |                                           |
+------+-------------+-------------------------------------------+
5 rows in set (0.03 sec)
由上查询结果可以看到,当连接到 localhost 且用 root 帐号时是需要输入密码的。MySQL 可以不仅可以为用户而且还可以为基于主机名的连接类(上表中的最后两行)存储不同的权限。下面的命令从权限表(permissions table)删除掉这些没有必要的非 root 用户:
mysql> SELECT user, host, password FROM user;
+------+-------------+-------------------------------------------+
| user | host        | password                                  |
+------+-------------+-------------------------------------------+
| root | localhost   | *90427DDE5E6F5547DA40AAF767C2DBA1ACCAB588 |
| root | linux-beyes |                                           |
| root | 127.0.0.1   |                                           |
+------+-------------+-------------------------------------------+
3 rows in set (0.00 sec)
从上面可以看到,后面两行已经被删除掉了。

2、创建一个用户
下面要创建一个用户--- beyes,这个用户具有较大的权限,他可以在两个地方进行数据库的连接:
1、从本机连接( localhost )
2、从 192.168.0.0 ~ 255.255.255.0
用以下命令实现
mysql> GRANT ALL ON *.* TO beyes@localhost IDENTIFIED BY '112679888';
Query OK, 0 rows affected (0.02 sec)
mysql> GRANT ALL ON *.* TO beyes@'192.168.0.0/255.255.255.0' IDENTIFIED BY '112679888';
Query OK, 0 rows affected (0.00 sec)
说明
在这两条命令执行完毕后,做一个实验。首先在虚拟机的XP系统里安装了一个功能强大的mysql客户端工具EMS,然后进行数据库的连接,很顺利,连接成功,连接后如下图所示:


由上图第二栏可见,所创建的 beyes 用户可以从我们设定的两个主机地址登录到数据库上来。
GRANT 命令 GRANT ALL ON *.* 部分,因为 GRANT 命令是 root 用户所使用,故所创建的用户不会有 GRANT 功能,从上图的对应栏目中没有打勾可以看出;除此之外,beyes 具有其他所有的权限里( *.* )。后面的 IDENTIFIED BY 后接一个单引号括起的密码,说明 beyes 这个用户需要指定的密码授权才能登录数据库。
作者: beyes    时间: 2009-5-6 02:16
标题: MySQL 管理工具
几个命令选项
命令选项
参数
描述
-u
username
默认情况下,mysql 这些管理工具会尝试使用和系统一样的用户名登录数据库,你使用 -u 指定一个用户名
-p
[password]
可选password项,不填则稍后提示输入;如果没有此选项,则 mysql 命令就假定用户无需密码登录
-h
host
指定主机登录,本机登录总是可以忽略此选项

myisamchk
此命令检查并修复使用默认 MYISAM 表格格式的数据表。一般地,myisamchk 应当从表所在的目录里并以在数据库安装时所创建的 mysql 用户并运行之。也就是说,为了对数据库的检查,需要先转换用户,使用 su mysql 命令转换为 mysql 用户,然后转入以数据库名字匹配的目录下,然后运行 myisamchk 命令,可以带一个或几个以下参数,例如:
myisamchk -e -r *.MYI
myisamchk 命令选项如下表所示:
命令选项描述
-c检查表错误
-e执行扩展检查
-r纠正找到的错误

不带任何参数直接运行 myisamchk 命令可以得到更多信息,此命令对 InnoDB 类型表格没有影响。

mysql
此命令通常用来登录数据库。一般格式是
mysql -u beyes -p foo
上面的命令中,-u 表示指定一个 用户(beyes)登录;-p 参数表示此用户需要密码登录,但这里不指定密码,一会儿进入交互式提示输入密码;foo 表示要登录数据库名。
如果不希望进入交互式登录,可以直接在命令行上指定 password 参数并在后面跟着完整的密码
mysql -u beyes --password=112679888
在 mysql 客户端登录到服务器后,一些常用的命令如下表所示:
命令
简洁表示
描述
help 或者 ?
\\h 或者 \\?
显示命令列表
edit
\\e
编辑命令;使用编辑器为环境变量$EDITOR所定义
exit quit
\\q
退出客户端
go
\\g
执行命令
source <filename>
\\.
从给定文件中执行 SQL
status
\\s
显示服务器的状态信息
system <command>
\\!
执行一个系统命令
tee <filename>
\\T
在指定文件中追加一份所有输出的拷贝
use <database>
\\u
使用指定的数据库

mysqladmin
主要的管理工具,除了支持通常的参数外,还支持以下重要的命令:
命令
描述
create <database_name>
创建一个新的数据库
drop <database_name>
删除一个数据库
password <new_password>
改变密码
ping
检查服务器是否在运行中
reload
重装载 grant 表
status
提供服务器的状态信息
shutdown
关闭服务器
variables
显式控制mysql操作的变量以及它们的当前值
version
提供服务器的版本号以及服务器已经运行了多长时间
不带任何参数使用 mysqladmin 可以看到所有的选项列表,为了容易查看就使用 mysqladmin | less

mysqlbug
通过 mail 给 mysql 开发者提交 bug 报告。

mysqldump
此命令允许对部分或整个数据库转储到一个单独文件,这个文件里有一组 SQL 可以使此文件重新导入到 Mysql 里面的命令。对标准用户,密码信息以及数据库和表名这些都作为命令的一个参数。几个有用的选项如下表所示:
命令
描述
-add-drop-table
这个选项将会在每一个表的前面加上DROP TABLE IF EXISTS语句,这样可以保证导回MySQL数据库的时候不会出错,因为每次导回的时候,都会首先检查表是否存在,存在就删除
-e
使用扩展的插入语法.这不是SQL的标准,但在 dump 大量数据时,对快速导入MySQL 时会有较大帮助
-t
仅转储表格里的数据,非创建表格的信息
-d
仅转储表格结构,非实际的数据
更多关于 mysqldump 参考 man mysqldump,或者:http://www.groad.net/bbs/read.php?tid=754
如备份一个名为 pwbbs 的数据库到文件
mysqldump -u beyes -p pwbbs > pwbbs.dump

mysqlimport
此命令用来把数据导入表中。命令仅需要一个文件名和一个数据库作为参数,mysqlimport 将把数据导入到和文件名一样名字(文件扩展名不要)的数据表中。执行此命令和 mysqldump 类似,只是把重定向符号改变一下。更多用法参考 man mysqlimport 或者 http://www.groad.net/bbs/read.php?tid=755

mysqlshow
此命令显示出 Mysql 安装和其内的数据库信息:
1、如果不带任何参数,则列出所有可用的数据库
beyes@linux-beyes:~> sudo mysqlshow -u beyes --password='112679888'
+--------------------+
|     Databases      |
+--------------------+
| information_schema |
| beyes_db           |
| mysql              |
| test               |
+--------------------+
2、带一个数据库名参数则列出这个数据库中的表所包含的表
beyes@linux-beyes:~> sudo mysqlshow -u beyes --password='112679888' beyes_db
Database: beyes_db
+--------+
| Tables |
+--------+
+--------+
beyes@linux-beyes:~> sudo mysqlshow -u beyes --password='112679888' test
Database: test
+--------+
| Tables |
+--------+
+--------+
beyes@linux-beyes:~> sudo mysqlshow -u beyes --password='112679888' mysql
Database: mysql
+---------------------------+
|          Tables           |
+---------------------------+
| columns_priv              |
| db                        |
| func                      |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| proc                      |
| procs_priv                |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
3、参数中既有数据库名和表格名,那么列出这个表格中的各个栏
beyes@linux-beyes:~> sudo mysqlshow -u beyes --password='112679888' mysql func
Database: mysql  Table: func
+-------+------------------------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
| Field | Type                         | Collation       | Null | Key | Default | Extra | Privileges                      | Comment |
+-------+------------------------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
| name  | char(64)                     | utf8_bin        | NO   | PRI |         |       | select,insert,update,references |         |
| ret   | tinyint(1)                   |                 | NO   |     | 0       |       | select,insert,update,references |         |
| dl    | char(128)                    | utf8_bin        | NO   |     |         |       | select,insert,update,references |         |
| type  | enum('function','aggregate') | utf8_general_ci | NO   |     |         |       | select,insert,update,references |         |
+-------+------------------------------+-----------------+------+-----+---------+-------+---------------------------------+---------+

4、参数中有数据库,表格,表格中的某栏参数,那么列出此栏中的详细信息
beyes@linux-beyes:~> sudo mysqlshow -u beyes --password='112679888' mysql func name
Database: mysql  Table: func  Wildcard: name
+-------+----------+-----------+------+-----+---------+-------+---------------------------------+---------+
| Field | Type     | Collation | Null | Key | Default | Extra | Privileges                      | Comment |
+-------+----------+-----------+------+-----+---------+-------+---------------------------------+---------+
| name  | char(64) | utf8_bin  | NO   | PRI |         |       | select,insert,update,references |         |
+-------+----------+-----------+------+-----+---------+-------+---------------------------------+---------+





欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2