1、MySQL环境

    使用MySQL客户端命令工具"mysql"可以连接并登录到MySql环境,在带有提示符"mysql>"交互式命令环境中进行操作。在该操作环境中,输入的每一条数据库管理命令以分号";"表示结束,可以不区分大小写。<习惯上将SQL语句中的关键字使用大写>


首先,如何安装mysql。我用的是redhat6.4系统(虚拟机),将光盘挂载上,挂载操作:


先打开虚拟机中的操作系统-->虚拟机-->设置,会出现如下操作界面:

linux下mysql基本管理命令_基础操作


按图上的步骤依次操作,确定后再系统中就会打开光盘中的内容。如下:


linux下mysql基本管理命令_mysql_02


然后打开Packages文件夹,在文件夹空白处右击,然后选择Open in Terminal 命令行界面,这样操作时为了直接在有安装包的文件中操作,不用再挨个打开文件路径。


接着输入命令:ls | grep mysql

linux下mysql基本管理命令_mysql_03

这样,Packages文件夹中的文件中与mysql有关的安装包就罗列了出来。


先安装mysql 输入:

rpm -ivh mysql-5.1.66-2.el6_3.x86_64.rpm

linux下mysql基本管理命令_基础操作_04


接着安装mysql-server 输入:

rpm -ivh mysql-server-5.1.66-2.el6_3.x86_64.rpm

linux下mysql基本管理命令_数据库_05

安装时如果发现

perl-DBD-MySQL is needed by mysql-server-5.1.66-2.el6_3.x86_64

提示,说明要先安装perl-DBD-MySQL,先查看需要安装rpm版本,接着安装

ls | grep perl-DBD-MySQL
rpm -ivh perl-DBD-MySQL-4.013-3.el6.x86_64.rpm

linux下mysql基本管理命令_数据库_06

(补充:有些安装mysql时还会提示缺少DBI组件,解决方和DBD组件一样,先查看rpm版本:

    rpm -qa |grep perl-DB

linux下mysql基本管理命令_数据库_07

    接着输入:rpm -ivh perl-DBI-1.609-4.el6.i686

    安装完后,就可以装mysql-server了。)


重新安装mysql-server  输入:

rpm -ivh mysql-server-5.1.66-2.el6_3.x86_64.rpm

linux下mysql基本管理命令_基础操作_08



这样mysql就安装完成了,接着我们还要嘴鸥一些事情:

依次输入:

#mysql_install_db      //初始化服务器中的数据库


#service mysqld restart    //启动数据库服务


#mysqladmin -u root passwd "xxxxxxx"  //设置数据库管理员密码


#mysql -u root -p    //登录数据库


#show databases;    //查看数据库表



2、显示数据库结构:

    ①查看数据库中的列表信息

    SHOW DATABASES 语句;用于查看 MySql 服务器中包含的数据库列表。经初始化后的 MySql 服务器,默认建立了三个数据库: test、 mysql 和 information_schema。

    

查看mysql服务器中的数据库。  

linux下mysql基本管理命令_数据库_09


    ②查看数据库中的数据表信息

    SHOW TABLES 语句:用于显示当前数据库中包含的数据表。在显示数据表之前,需要先使用 “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

mysql> show tables;

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

| Tables_in_mysql           |

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

| columns_priv              |

| db                        |

| event                     |

| func                      |

| general_log               |

| help_category             |

| help_keyword              |

| help_relation             |

| help_topic                |

| host                      |

| ndb_binlog_index          |

| plugin                    |

| proc                      |

| procs_priv                |

| servers                   |

| slow_log                  |

| tables_priv               |

| time_zone                 |

| time_zone_leap_second     |

| time_zone_name            |

| time_zone_transition      |

| time_zone_transition_type |

| user                      |

| users                     |

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

24 rows in set (0.00 sec)


    ③显示数据表的结构

    DESCRIBE 语句:用于显示数据表中列的信息(或者叫表结构),以“ 数据库名表名 ” 作为命令参数。命令格式为:

    DESCRIBE [数据库名 .] 表名

    当省略数据库名时,则以为是查询当前数据库中的表。

mysql> describe user;

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

| Field                 | Type                              | Null | Key | Default | Extra |

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

| Host                  | char(60)                          | NO   | PRI |         |       |

| User                  | char(16)                          | NO   | PRI |         |       |

| Password              | char(41)                          | NO   |     |         |       |

| Select_priv           | enum('N','Y')                     | NO   |     | N       |       |

| Insert_priv           | enum('N','Y')                     | NO   |     | N       |       |

| Update_priv           | enum('N','Y')                     | NO   |     | N       |       |

| Delete_priv           | enum('N','Y')                     | NO   |     | N       |       |

| Create_priv           | enum('N','Y')                     | NO   |     | N       |       |

| Drop_priv             | enum('N','Y')                     | NO   |     | N       |       |

| Reload_priv           | enum('N','Y')                     | NO   |     | N       |       |

| Shutdown_priv         | enum('N','Y')                     | NO   |     | N       |       |

| Process_priv          | enum('N','Y')                     | NO   |     | N       |       |

| File_priv             | enum('N','Y')                     | NO   |     | N       |       |

| Grant_priv            | enum('N','Y')                     | NO   |     | N       |       |

| References_priv       | enum('N','Y')                     | NO   |     | N       |       |

| Index_priv            | enum('N','Y')                     | NO   |     | N       |       |

| Alter_priv            | enum('N','Y')                     | NO   |     | N       |       |

| Show_db_priv          | enum('N','Y')                     | NO   |     | N       |       |

| Super_priv            | enum('N','Y')                     | NO   |     | N       |       |

| Create_tmp_table_priv | enum('N','Y')                     | NO   |     | N       |       |

| Lock_tables_priv      | enum('N','Y')                     | NO   |     | N       |       |

| Execute_priv          | enum('N','Y')                     | NO   |     | N       |       |

| Repl_slave_priv       | enum('N','Y')                     | NO   |     | N       |       |

| Repl_client_priv      | enum('N','Y')                     | NO   |     | N       |       |

| Create_view_priv      | enum('N','Y')                     | NO   |     | N       |       |

| Show_view_priv        | enum('N','Y')                     | NO   |     | N       |       |

| Create_routine_priv   | enum('N','Y')                     | NO   |     | N       |       |

| Alter_routine_priv    | enum('N','Y')                     | NO   |     | N       |       |

| Create_user_priv      | enum('N','Y')                     | NO   |     | N       |       |

| Event_priv            | enum('N','Y')                     | NO   |     | N       |       |

| Trigger_priv          | enum('N','Y')                     | NO   |     | N       |       |

| ssl_type              | enum('','ANY','X509','SPECIFIED') | NO   |     |         |       |

| ssl_cipher            | blob                              | NO   |     | NULL    |       |

| x509_issuer           | blob                              | NO   |     | NULL    |       |

| x509_subject          | blob                              | NO   |     | NULL    |       |

| max_questions         | int(11) unsigned                  | NO   |     | 0       |       |

| max_updates           | int(11) unsigned                  | NO   |     | 0       |       |

| max_connections       | int(11) unsigned                  | NO   |     | 0       |       |

| max_user_connections  | int(11) unsigned                  | NO   |     | 0       |       |

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

39 rows in set (0.00 sec)

3、数据库的创建于删除

    ①创建新的数据库

    CREATE DATABASE 语句:用于创建一个新的数据库,使用数据库名称作为参数,命令格式: CREATE DATABASE 数据库名

例如,创建一个名为"auth"的新数据库

    mysql> create database auth;

    Query OK, 1 row affected (0.00 sec)


创建数据库需要足够的权限,一般是root权限。


    ②创建新的数据表

    CREATE TABLE 语句,用于在数据库中创建新的数据表,需要使用数据表名称作为参数。命令格式: CREATE TABLE 表名(字段定义。。。。。。)

    在 auth 库中创建一个名为“users” 的表。包含两个字段 user_name、 user_passwd,均为非空字符串值,初始密码设为"123456",其中 user_name 字段被设为关键索引字段( PRIMARY KEY)。

mysql> use auth;

Database changed

mysql> create table users(user_name char(30) not null, user_passwd char(20) not null default '123456', primary key (user_name));

Query OK, 0 rows affected (0.04 sec)


    ③删除一个数据表

    DROP TABLE 语句:用于在数据库中删除指定的数据表,需要使用数据表名称作为参数。命令格式为:

    DROP TABLE [数据库名 .] 表名

    例如:删除数据库 auth 中的 users 表


mysql> drop table auth.users;

Query OK, 0 rows affected (0.00 sec)

    ④删除一个数据库

    DROP DATABASE 语句:用于删除指定的数据库,需要使用数据库名称作为参数。命令格式为:

     DROP DATABASE 数据库名

    删除 auth 数据库


mysql> drop database auth;

Query OK, 0 rows affected (0.00 sec)


4、数据录入与维护

    参考上述步骤创建 auth 数据库和 users 表,下面将以此为基础,学习如何使用 INSERT、 SELECT、 UPDATE 和DELETE 语句向数据表总插入、查询、修改及删除数据记录。

    ①插入新的数据记录

    INSERT 语句:用于想数据表中插入新的数据记录。命令格式为:INSERT INTO 表名(字段 1,字段 2,。。。) VALUES(字段 1 的值,字段 2 的值,。。。 )

    在 auth 库下的 user 表中插入两个用户 kenan、 xiaolan 的记录,密码分别是“123123” 和“321321” 。

mysql> use auth;

Database changed

mysql> insert into auth.users(user_name,user_passwd) values('kenan', encrypt('123123'));

Query OK, 1 row affected (0.00 sec)

mysql> insert into auth.users(user_name,user_passwd) values('xiaolan', encrypt('321321'));

Query OK, 1 row affected (0.00 sec)

    

    ②查询数据记录

    SELECT 语句:用于从数据表中查找符合条件的数据记录, MySql 数据库支持标准的 SQL 查询语句。命令格式为:SELECT 字段名 1,字段名 2。。。 FROM 表名 WHERE 条件表达式表示所有字段时可以使用通配符“*” , 不指定特定条件时可以省略“WHERE” 部分。

    在 auth 库的 users 表中,查看所有的数据记录。

mysql> select * from auth.users;

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

| user_name | user_passwd   |

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

| kenan     | iZ0EqqkpY13Ok |

| xiaolan   | qbUv3oE267sZI |

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

2 rows in set (0.00 sec)


    在 auth 库的 user 表中,查询用户名为“zhangsan” 的记录、输出用户名、密码字段。

mysql> select user_name,user_passwd from auth.users where user_name='kenan';

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

| user_name | user_passwd   |

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

| kenan     | iZ0EqqkpY13Ok |

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

1 row in set (0.00 sec)


    ③修改数据记录

    UPDATE 语句:用于修改、更新数据表中的数据记录。命令格式为:UPDATE 表名 SET 字段名 1=字段值 1[,字段名 2=字段值 2] WHERE 条件表达式

    将数据库用户 kenan 的密码更改为“123456” 。
   

mysql> update auth.users set user_passwd=encrypt('123456') where user_name='kenan';

Query OK, 1 row affected (0.00 sec)

Rows matched: 1  Changed: 1  Warnings: 0


    ④删除数据记录

    DELETE 语句:用于在数据表中删除指定的数据记录。命令格式为:DELETE FROM 表名 WHERE 条件表达式

    在 auth 库的 users 表中,删除 name 字段的值为“kenan” 的数据记录。


mysql> delete from auth.users where user_name='kenan';

Query OK, 1 row affected (0.00 sec)


5、维护数据库及用户权限

    对于许多公司的网络管理员来说,可能并不需要掌握非常复杂的数据库语句(这些工作往往由网站开发人员或者专职的数据库管理员来完成)。然而从服务器本身的运行维护角度来说,掌握必要的数据库维护知识仍然是必不可少的。下面简单介绍如何对 MySql 数据库进行备份或恢复操作,以及关于 MySql 用户的权限管理。


    ①数据库的备份与恢复

    →备份数据库

    使用 mysqldump 命令可以将数据库信息导出为 SQL 脚本文件,这样的脚本文件还能在不同版本的 MySql 服务器上使用。例如,当需要升级 MySql 数据库软件的版本时,使用 mysqldump 命令将原有数据库信息导出,直接在更新后的 MySql 服务器中导入即可。

    mysqldump 命令可以完成全部数据库、指定数据库、数据表的备份。命令格式为:        mysqldump -u 用户名 -p [密码] [options] [数据库名 ] [表名 ] > /备份路径/备份文件名

    备份整个 auth 数据库。

    

[root@localhost /]# mysqldump -u root -p auth > mysql-auth.sql

Enter password: 

[root@localhost /]# ls

bin   dev  home  lost+found  mnt             opt   root  selinux  sys  usr

boot  etc  lib   media       mysql-auth.sql  proc  sbin  srv      tmp  var


    备份数据库 mysql 中的 user 表、 host 表

[root@localhost /]# mysqldump -u root -p mysql host user > mysql.user-host.sql

Enter password: 

[root@localhost /]# ls

bin   etc   lost+found  mysql-auth.sql       proc  selinux  tmp

boot  home  media       mysql.user-host.sql  root  srv      usr

dev   lib   mnt         opt                  sbin  sys      var


    备份 MySql 服务器中的所有数据库的内容(添加“ --all-databases” 选项),当需要备份的信息较多时,可以添加“ --opt” 选项进行优化,以加快备份速度。

    

[root@localhost /]# mysqldump -u root -p --all-databases > mysql-all.sql

Enter password: 

[root@localhost /]# ls

bin   etc   lost+found  mysql-all.sql        opt   sbin     sys  var

boot  home  media       mysql-auth.sql       proc  selinux  tmp

dev   lib   mnt         mysql.user-host.sql  root  srv      usr

    →恢复数据库

    对于使用 mysqldump 命令导出的备份文件,在需要恢复时可以直接通过 mysql 命令进行导入。使用 mysql 命令导入.sql 脚本文件时;命令格式为:

     mysql -u root -p [数据库名 ] < /备份路径、备份文件名

     备份文件包括所有的(或多个)数据库信息时,执行 mysql 导入时可以不指定数据库名。


[root@localhost /]# mysql -u root -p < mysql-all.sql

Enter password: 

[root@localhost /]# ls

bin   etc   lost+found  mysql-all.sql        opt   sbin     sys  var

boot  home  media       mysql-auth.sql       proc  selinux  tmp

dev   lib   mnt         mysql.user-host.sql  root  srv      usr


    备份文件只包含单个数据库或单个数据表时,执行 mysql 导入时需要指定目标数据库的名称。


如 mysql-auth.sql   恢复前需要在数据库中建立好auth数据库,这里就不再演示了。


    ②用户及权限设置

    前面过程中,对 MySql 数据库的大部分操作都是使用 root 账号进行的。由于 root 账号拥有对 MySql 数据库的全部权限,频繁使用 root 账号将给数据库服务带来一定的风险。在实际工作中,通常会建立一些专门的用户,只负责特定的数据库、表的管理和维护,从而将权限限制在一定的范围内。    

    MySql 数据库用户的权限管理主要包括三个方面:授予权限、查看权限、撤销权限。下面分别介绍:

    →授予权限

    GRANT 语句是用来创建用户并进行授权的最常用语句。当指定用户名不存在时, GRANT 语句将会创建新的用户 ,否则用于修改用户信息。命令格式为: GRANT 权限列表 ON 数据库名 . 表名 TO 用户名 @来源地址[IDENTIFIED BY ' 密码']

    使用 GRANT 语句时,需要注意的事项如下:

    >:权限列表:使用“ALL” 关键字代表全部权限,同时授予多个权限时,以逗号", "分隔,例如“select,insert,update,delete” 。

    >:表名:可使用通配符“*” 表示指定数据库中的所有数据表。

    >:用户名 @来源地址:用来设置谁能连接,能从哪里连接。用户名不能使用通配符,但使用连续的两个单引号“ ‘’ ” 时表示空字符串,可用于匹配任何用户。来源地址表示连接数据库的客户机地址,可使用 “%”作为通配符,匹配某个域内的所有地址(如: %.benet.com),或使用带掩码标记的网络地址(如:192.168.1.0/24)。

    >: IDENTIFIED BY :用于设置用户连接数据库时使用的密码字符串,密码经过加密后存储与 mysql 库的 user表中,省略“IDENTIFIED BY” 部分时,新用户的密码将为空。

    授权数据库用户 huiyuan,允许其从本机连接到 MySql 服务器,只能查看 auth 库中的 users 表的内 容,使用密码“123456” 进行验证。

    

mysql> grant select on auth.users to huiyuan@'localhost' identified by '123456';

Query OK, 0 rows affected (0.00 sec)


    登陆huiyuan并查看数据


[huiyuan@localhost Desktop]$ mysql -u huiyuan -p

Enter password: 

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 24

Server version: 5.1.66 Source distribution


Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.


Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql> select * from auth.users;

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

| user_name | user_passwd   |

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

| xiaolan   | qbUv3oE267sZI |

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

1 row in set (0.00 sec)


    下面的一些命令可以自己试试:


    授权数据库用户 admin1,允许其从本机连接到 MySql 服务器,对 auth 库中的所有表具有完全权限,使用密码"123456"验证。

    mysql>grant all on auth.* admin1@'localhost' identified by '123456';

    

    授权数据库用户 admin2,允许其从网段 192.168.0.0/24 中访问 MySql 服务器,可以查询 auth 库中的所有表,使用密码“123456” 进行验证。

    mysql>grant select on auth.* to admin2@' 192.168.0.0/24' identified by "123456";

    

    授权数据库用户 admin3,允许其从 benet.com 域内的任何主机访问 MySql 服务器,对 auth 库下的所有表具有 select、 insert 权限,使用密码"123456"验证。

    mysql>grant select,insert on auth.* admin3@'%benet.com' identified by "123456";


    →查看权限

    需要查看用户权限时,可直接使用 SELECT 语句对 user、 db、 host、数据表进行查询,也可以使用 SHOW 语句进行查看,后者相对更加简单,命令格式为: SHOW GRANTS FOR 用户名 @域名或 IP

    查看数据库用户 root 从服务器本机进行连接时的权限。

    

mysql> show grants for root@localhost;

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

| Grants for root@localhost                                                                                                              |

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

| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*E56A114692FE0DE073F9A1DD68A00EEB9703F3F1' WITH GRANT OPTION |

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

1 row in set (0.00 sec)


    查看数据库用户 huiyuan 从本地服务器连接时的权限。


mysql> show grants for huiyuan@'localhost';

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

| Grants for huiyuan@localhost                                                                                   |

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

| GRANT USAGE ON *.* TO 'huiyuan'@'localhost' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |

| GRANT SELECT ON `auth`.`users` TO 'huiyuan'@'localhost'                                                        |

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

2 rows in set (0.00 sec)


    →撤销权限

    REVOKE 语句:用于撤销指定数据库用户和权限。

    命令格式为: REVOKE 权限列表 ON 数据库名 . 表名 FROM 用户名 @域名或 IP

    撤销数据用户 xiaoqi 从服务器本地对 auth 数据库 users 表的所有权限。


mysql> revoke all on auth.users from huiyuan@localhost;

Query OK, 0 rows affected (0.00 sec)



以上都是一些mysql的基础操作,想要熟练应用还是应该多多练习。