1、MySQL环境
使用MySQL客户端命令工具"mysql"可以连接并登录到MySql环境,在带有提示符"mysql>"交互式命令环境中进行操作。在该操作环境中,输入的每一条数据库管理命令以分号";"表示结束,可以不区分大小写。<习惯上将SQL语句中的关键字使用大写>
首先,如何安装mysql。我用的是redhat6.4系统(虚拟机),将光盘挂载上,挂载操作:
先打开虚拟机中的操作系统-->虚拟机-->设置,会出现如下操作界面:
按图上的步骤依次操作,确定后再系统中就会打开光盘中的内容。如下:
然后打开Packages文件夹,在文件夹空白处右击,然后选择Open in Terminal 命令行界面,这样操作时为了直接在有安装包的文件中操作,不用再挨个打开文件路径。
接着输入命令:ls | grep mysql
这样,Packages文件夹中的文件中与mysql有关的安装包就罗列了出来。
先安装mysql 输入:
rpm -ivh mysql-5.1.66-2.el6_3.x86_64.rpm
接着安装mysql-server 输入:
rpm -ivh mysql-server-5.1.66-2.el6_3.x86_64.rpm
安装时如果发现
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
(补充:有些安装mysql时还会提示缺少DBI组件,解决方和DBD组件一样,先查看rpm版本:
rpm -qa |grep perl-DB
接着输入: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
这样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服务器中的数据库。
②查看数据库中的数据表信息
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 数据库。
[[email protected] /]# mysqldump -u root -p auth > mysql-auth.sql
Enter password:
[[email protected] /]# 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 表
[[email protected] /]# mysqldump -u root -p mysql host user > mysql.user-host.sql
Enter password:
[[email protected] /]# 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” 选项进行优化,以加快备份速度。
[[email protected] /]# mysqldump -u root -p --all-databases > mysql-all.sql
Enter password:
[[email protected] /]# 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 导入时可以不指定数据库名。
[[email protected] /]# mysql -u root -p < mysql-all.sql
Enter password:
[[email protected] /]# 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 [email protected]‘localhost‘ identified by ‘123456‘;
Query OK, 0 rows affected (0.00 sec)
登陆huiyuan并查看数据
[[email protected] 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.* [email protected]‘localhost‘ identified by ‘123456‘;
授权数据库用户 admin2,允许其从网段 192.168.0.0/24 中访问 MySql 服务器,可以查询 auth 库中的所有表,使用密码“123456” 进行验证。
mysql>grant select on auth.* to [email protected]‘ 192.168.0.0/24‘ identified by "123456";
授权数据库用户 admin3,允许其从 benet.com 域内的任何主机访问 MySql 服务器,对 auth 库下的所有表具有 select、 insert 权限,使用密码"123456"验证。
mysql>grant select,insert on auth.* [email protected]‘%benet.com‘ identified by "123456";
→查看权限
需要查看用户权限时,可直接使用 SELECT 语句对 user、 db、 host、数据表进行查询,也可以使用 SHOW 语句进行查看,后者相对更加简单,命令格式为: SHOW GRANTS FOR 用户名 @域名或 IP
查看数据库用户 root 从服务器本机进行连接时的权限。
mysql> show grants for [email protected];
+----------------------------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected] |
+----------------------------------------------------------------------------------------------------------------------------------------+
| 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 [email protected]‘localhost‘;
+----------------------------------------------------------------------------------------------------------------+
| Grants for [email protected] |
+----------------------------------------------------------------------------------------------------------------+
| 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 [email protected];
Query OK, 0 rows affected (0.00 sec)
以上都是一些mysql的基础操作,想要熟练应用还是应该多多练习。