首页 > 数据库 >MySQL语句练习操作和维护

MySQL语句练习操作和维护

时间:2023-05-26 13:22:18浏览次数:51  
标签:语句 数据库 练习 auth user mysql MySQL root priv

六、使用MySQL数据库:

(1)SHOW  DATABASES语句:用于查看当前MySQL服务器中包含的库。经初始化后的MySQL服务器,默认建立了四个库:test、MySQL、information_schema和performance_schema,(其中MySQL库中包含了用户认证相关表),执行以下操作可以进行查看。

 

mysql> SHOW DATABASES;

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

| Database           |

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

| information_schema |

| mysql              |

| performance_schema |

| test               |

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

4 rows in set (0.01 sec)

 

mysql>

 

(2)SHOW TABLES语句:用于查看当前所在的库中包含的表。在操作之前,需要先使用USE语句切换到所使用的库。例如,执行以下操作可以显示mysql库中包含的所有表。

 

mysql> use mysql;                                (切换到数据库)

Database changed                                 (数据库更改)

mysql> show tables;                               (查看mysql数据库中的表)

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

| 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                |

| proxies_priv              |

| servers                   |

| slow_log                  |

| tables_priv               |

| time_zone                 |

| time_zone_leap_second     |

| time_zone_name            |

| time_zone_transition      |

| time_zone_transition_type |

| user                      |

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

24 rows in set (0.00 sec)

 

mysql>

 

MySQL数据库的数据文件存放在/usr/local/mysql/data目录下,每个数据库对应一个子目录,用于存储数据表文件。每一个数据表对应为三个文件,后缀名分别为“.frm”“.myd”“.myi”。

 

(3)查看表的结构:

DESCRIBE语句:用于显示表的结构,即组合表的各字段(列)的信息。需要指定“库名.表名”作为参数;若只指定表名参数,则需先通过USE语句切换到目标库。例如:执行以下操作可以查看mysql库中的user表的结构,与直接执行“DESCRIBE  mysql.user;”语句效果相同。

 

mysql> use mysql                     (切换到数据库)

Database changed                      (数据库更改)

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       |       |

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

42 rows in set (0.00 sec)

 

七、创建及删除库和表:

(1)创建新的库:

CREATE DATABASE 语句:用于常见一个新库,需要指定数据库名称作为参数。例如,执行以下操作可以创建一个名为auth的库。

 

mysql> create database auth;                  (创建auth数据库)

Query OK, 1 row affected (0.01 sec)

 

(2)创建新的表:

CREATE TABLE 语句:用于在当前库中创建新的表,需指定数据库表名称作为参数,并定义该表格使用的各字段,基本格式如下所示。

 

CREATE  TABLE  表名  (字段1  名称  类型,  字段2  名称  类型,  …,  PRIMARY  KEY(主键名))

 

创建表之前,应先明确数据库表格的结构,各字段的名称和类型等信息。例如,若要创建一个包含用户名,密码字串的用户验证表,应先分析表格结构。

 

用户名                               密码字串

Xiaoqi                  *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD0

Lisi                    *2(后面省略)

Wangwu               *FF8(后面省略)

 

 

上述表格中,“用户名”为不超过16个字节的字符串,不能为空;“密码字串”为不超过48个字符串(插入记录时使用MySQL的函数加密),默认值为空字串。考虑到字符集兼容性,最好不要使用中文字段名,改用user_name、user_passwd分别表示用户名、密码字串。表格中不能拥有同名的用户,因此可将user_name作为主键。

 

针对上述分析结果,可以在auth库中按如下操作创建users表。其中,字段定义部分的DEFAULT语句用于设置默认的密码字串,PRIMARY语句用于设置主键字段名,

 

mysql> use auth;                             (进入auth数据库)

Database changed

mysql> create table users (user_name char(16) not null, user_passwd char(48) default '', primary key(user_name));                                                              (创建新的表语句 default’’:默认的密码字串, primary key (字段名称):设置主键字段名)

Query OK, 0 rows affected (0.01 sec)

 

(3)删除一个表:

DROP TABLE语句:用于删除库中的表,需要指定“库名.表名”作为参数,若只指定表名参数,则需要通过执行“USE”语句切换到目标库,例如,执行以下操作可以删除auth数据库中的users表。

 

mysql> DROP TABLE auth.users;               (删除auth数据库中的users表,DROP  TABLE语句必须大写)

Query OK, 0 rows affected (0.01 sec)

 

删除一个数据库:

DROP  DATABASE语句:用于删除指定的数据库,需要指定库名作为参数,例如,执行以下操作可以删除名为auth的数据库。

 

mysql> drop database auth;                             (删除名为auth数据库)

Query OK, 0 rows affected (0.00 sec)

 

八、管理表中的数据记录:

(1)插入数据记录:

INSERT INTO语句:用于向表中插入新的数据记录,语法格式如下:

 

INSERT  INTO  表名(字段1, 字段2, …..) VALUES(字段1的值, 字段2的值,  ….)

 

执行以下操作将会向auth库中的user表插入一条记录:用户名为“zhangsan”,对应的密码为“123456”。注意VALUES部分的值应与前面指定的各字段逐一对应。

 

mysql> insert into user(user_name,user_passwd) values('zhangsan', password('123456'));

Query OK, 1 row affected (0.00 sec)

 

在插入新的数据记录时,如果这条记录完整包括表中所有字段的值,则插入语句中的指定字段的部分可以省略,例如,执行以下操作也可以向user表插入一条新纪录:用户名为“wangwu”,密码“654321”.

 

mysql> insert into user values('wangwu', password('654321'));

Query OK, 1 row affected (0.01 sec)

 

(2)查询数据记录:

SELECT语句:用于从指定的表中查找符合条件的数据记录。MySQL数据库支持标准的sql查询语句,语法格式如下:

 

SELECT  字段名1,字段名2,…  FROM  表名  WHERE  条件表达式

 

表示所有字段时,可以使用通配符“*”,若要显示所有的数据记录则可以省略WHERE条件子句。例如,执行以下操作可以查看auth数据库中user表内的所有记录,其中密码字串因已加密,因此不会直接显示出实际的密码内容。

 

mysql> use auth;

Database changed

mysql> select * from auth.user;

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

| user_name | user_passwd                               |

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

| lisi      | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

| wangwu    | *2A032F7C5BA932872F0F045E0CF6B53CF702F2C5 |

| zhangsan  | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

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

3 rows in set (0.00 sec)

 

当需要根据特定的条件查找记录时,WHERE条件子句则时必不可少的,例如,若要查找user表中用户名为“zhangsan”的记录时,显示其中用户名、密码字段的信息,可以执行以下操作:

 

mysql> use auth;

Database changed

mysql> select user_name, user_passwd from auth.user where user_name='zhangsan';

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

| user_name | user_passwd                               |

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

| zhangsan  | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

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

1 row in set (0.01 sec)

 

(3)修改数据记录:

UPDATE语句:用于修改、更新表中数据记录,语句格式如下:

 

UPDATE  表名  SET  字段名1=字段值1[,字段名2=字段名2]  WHERE  条件表达式

 

执行以下操作可以修改user表中用户名为“lisi”的记录,将密码字串设为空值,验证记录内容可以发现lisi用户的密码串值以变为空白。

mysql> update auth.user set user_passwd=password('') where user_name='lisi';

Query OK, 1 row affected (0.01 sec)

Rows matched: 1  Changed: 1  Warnings: 0

 

 

 

mysql> select * from auth.user;    (查看auth数据库中user表中所有数据记录)

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

| user_name | user_passwd                               |

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

| lisi      |                                           |

| wangwu    | *2A032F7C5BA932872F0F045E0CF6B53CF702F2C5 |

| zhangsan  | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

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

3 rows in set (0.00 sec)

 

在MySQL数据路服务器中,用于访问数据路的各种用户(如root)信息都保存在MySQL库的user表中,熟练的管理员可以直接修改其中的数据记录。例如,以下操作可以将数据路用户root的密码设置为“123456”,当再次使用“mysql  -u  root  -p”访问数据库服务器时,必须使用此密码进行验证。

 

mysql> update mysql.user set password=password('123456') where user='root';

Query OK, 4 rows affected (0.00 sec)

Rows matched: 4  Changed: 4  Warnings: 0

 

mysql> flush privileges;                             (刷新用户授权信息)

Query OK, 0 rows affected (0.01 sec)

 

[root@www 桌面]# mysql -u root –p         (登陆数据库,进行验证)

Enter password:                           (输入账户登陆密码)

 

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

Your MySQL connection id is 17

Server version: 5.5.22-log Source distribution

 

Copyright (c) 2000, 2011, 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>

 

若时在linux命令行环境中执行,还可以使用mysqladmin工具来设置密码:

 

[root@www 桌面]# mysqladmin -u root -p password '1234567'

Enter password:                              (这里输入旧密码)

 

[root@www 桌面]# mysql -u root -p

Enter password:                     (输入新密码‘1234567’)

 

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

Your MySQL connection id is 22

Server version: 5.5.22-log Source distribution

 

Copyright (c) 2000, 2011, 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>

 

---------------------------------------------------------------------------------------------------------------------------------

 

(4)删除数据记录:

DELETE语句:用于删除表中指定的数据记录:

 

DELETE  FROM  表名  WHERE      条件表达式

 

执行以下操作可以删除user表中用户名为“lisi”的数据记录:

 

mysql> delete from auth.user where user_name='lisi';

Query OK, 1 row affected (0.00 sec)

 

mysql> select * from auth.user;    (表中的lisi用户已经被删除)

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

| user_name | user_passwd                               |

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

| wangwu    | *2A032F7C5BA932872F0F045E0CF6B53CF702F2C5 |

| zhangsan  | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

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

2 rows in set (0.00 sec)

 

在MySQL数据库服务器中,默认添加了从本机访问数据库的空用户(user、password均为空),基于数据库安全性考虑,应该删除这些空用户,执行以下操作显示user字段为空的用户记录,并于DELETE语句进行空用户记录删除。

 

 

 

 

 

mysql> select user,host,password from mysql.user where user='';

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

| user | host                  | password |

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

|      | localhost             |          |

|      | localhost.localdomain |          |

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

2 rows in set (0.00 sec)

 

mysql> delete from mysql.user where user='';   (删除所有空用户)

Query OK, 2 rows affected (0.00 sec)

 

九、维护MySQL数据库:

(1)授予权限:

GRANT语句:专门用来设置数据库用户的访问权限,当指定的用户名不存在时,GRANT语句将会创建新的用户,否则,GRANT语句用于修改用户信息,语句格式如下:

 

GRANT  权限列表  ON  库名.表名  TO  用户名@来源地址  [  IDENTIFIED  BY  ‘密码’  ]

 

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

权限列表:用于列出授权使用的各种数据库操作,以逗号进行分隔,如“select,insert,update”,使用“all”表示所有权限,可授权执行任何操作

库名.表名:用于指定授权操作的库和表的名称,其中可以使用通配符“*”。例如,使用“auth.*”表示授权操作的对象为auth库中所有的表。

用户名@来源地址:用于指定用户名称和允许访问的客户机地址,即谁能连接,能从哪里连接,来源地址可以是域名、IP地址,还可以使用“%”通配符,表示某个区域或网段内的所有地址,如“%.benent.com  、  192.168.1.%”等。

IDENTIFIED  BY:用于设置用户连接数据库时所使用的密码字符串。在新建用户时,若省略“IDENTIFIED  BY”部分,则用户密码为空。

 

执行以下操作可以添加一个名为“xiaoqi”的数据库用户,并允许其从本机访问,对auth数据库中的所有表具有查询权限,验证密码为“123456”.使用GRANT语句授权的用户记录,会保存到MySQL库的user、db、host、table_priv等相关表中,无需刷新即可生效。

 

mysql> grant select on auth.* to 'xiaoqi'@'localhost' identified by '123456';

Query OK, 0 rows affected (0.01 sec)

 

切换到其他shell终端,以用户“xiaoqi”的身份连接数据库,当执行授权的数据库操作时将被允许,而执行非授权的数据库操作时将被拒绝。例如,允许用户xiaoqi查询auth库中user表的数据记录,但禁止查询其他数据库中表的记录。

 

[root@www 桌面]# mysql -u xiaoqi -p

Enter password:

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

Your MySQL connection id is 26

Server version: 5.5.22-log Source distribution

 

Copyright (c) 2000, 2011, 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>

 

 

mysql> select * from auth.user;             (验证授权的访问操作)

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

| user_name | user_passwd                               |

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

| wangwu    | *2A032F7C5BA932872F0F045E0CF6B53CF702F2C5 |

| zhangsan  | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

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

2 rows in set (0.00 sec)

 

mysql> select * from mysql.user;            (验证非授权的访问操作)

ERROR 1142 (42000): SELECT command denied to user 'xiaoqi'@'localhost' for table 'user'

 

在企业服务器中的应用中,数据库与网站服务器有时候是相互独立的,因此在MySQL服务器中,应根据实际情况创建新的用户授权,允许授权用户从网站服务器访问数据库,通常做法是,创建一个或几个网站专用的数据库,并授权所有权限,限制访问的来源IP地址,例如,执行以下操作可以新建bdqn数据库,并授权IP地址为192.168.6.20的主机连接,用户名为“dbuser”,密码为“123456”,允许在bdqn数据库执行所有操作。

 

mysql> create database bdqn;              (新建bdqn数据库)

Query OK, 1 row affected (0.01 sec)

 

mysql> grant all on bdqn.* to 'dbuser'@'192.168.6.20' identified by '123456';

 (给dbuser用户所有对dbqn的操作权限)

Query OK, 0 rows affected (0.00 sec)

 

[root@www data]# service iptables stop

iptables:将链设置为政策 ACCEPT:filter                    [确定]

iptables:清除防火墙规则:                                 [确定]

iptables:正在卸载模块:                                   [确定]

 

重新开启一台客户机,配置IP地址为192.168.6.20,然后查看受否安装过MySQL服务,如果没有,则根据上面第一点一次安装MySQL服务,然后用下面的命令访问192.168.6.10的MySQL服务器。

[root@localhost ~]# mysql -u dbuser -p123456 -h 192.168.6.10

 

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

Your MySQL connection id is 15

Server version: 5.5.22-log Source distribution

 

Copyright (c) 2000, 2011, 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.

 

(2)查看权限:

SHOW GRANTS语句:专门用来查看数据库用户的授权信息,通过FOR子句可指定查看的用户对象(必须与授权时使用的对象名称一致)。语句格式如下。

SHOW  GRANTS  FOR  用户名@来源地址

 

执行以下操作可以查看用户dbuser从主机192.168.1.20访问数据库时的授权信息,其中USAGE权限对应的授权记录中包含了用户的连接密码字串。

 

mysql> show grants for 'dbuser'@'192.168.4.19';

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

| Grants for [email protected]                                                                                   |

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

| GRANT USAGE ON *.* TO 'dbuser'@'192.168.4.19' IDENTIFIED BY PASSWORD '*760F60073FD235571A5260444301DB22136ED604' |

| GRANT ALL PRIVILEGES ON `bdqn`.* TO 'dbuser'@'192.168.4.19'                                                      |

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

2 rows in set (0.00 sec)

 

(3)撤销权限:

REVOKE语句:用于车i奥指定用户的数据库权限,撤销权限后的用户仍然可以连接到MySQL服务器,但将被禁止执行对应的数据库操作。语句格式如下:

 

REVOKE  权限列表  ON  数据库名.表名  FROM  用户名@来源地址

 

执行以下操作可以撤销用户haha从本机访问数据库auth的所有权限。(首先给haha用户查看所有auth库下面表的权限)

 

mysql> grant select on auth.* to 'haha'@'localhost' identified by '123'; (给haha权限)

Query OK, 0 rows affected (0.00 sec)

 

mysql> show grants for 'haha'@'localhost';           (查看权限)

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

| Grants for haha@localhost                                                                                   |

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

| GRANT USAGE ON *.* TO 'haha'@'localhost' IDENTIFIED BY PASSWORD '*23AE809DDACAF96AF0FD78ED04B6A265E05AA257' |

| GRANT SELECT ON `auth`.* TO 'haha'@'localhost'                                                              |

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

2 rows in set (0.00 sec)

 

mysql> revoke all on auth.* from 'haha'@'localhost';    (撤销haha对auth库中查看表的所有权限)

Query OK, 0 rows affected (0.01 sec)

 

mysql> show grants for 'haha'@'localhost';   (确认以撤销对auth库的权限)

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

| Grants for haha@localhost                                                                                   |

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

| GRANT USAGE ON *.* TO 'haha'@'localhost' IDENTIFIED BY PASSWORD '*23AE809DDACAF96AF0FD78ED04B6A265E05AA257' |    (haha用户对任何表都没有权限)

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

1 row in set (0.00 sec)

 

十、数据库的备份与恢复:

1、备份数据库:

通过mysqldump命令可以将指定的库、表或全部的库导出为SQL脚本,便于该命令在不同版本的mysql服务器上使用。例如,当需要升级MySQL服务器时,可以先用mysqldump命令将原有库信息导出,然后直接在升级后的MySQL服务器中导入即可。

 

执行导出操作:

使用mysqldump命令导出数据时,默认会直接在终端显示,若要保存到文件,还需要结合shell的“>”重定向输出操作。命令格式如下。

 

格式1:导出指定库中的部分表。

Mysqldump  [选项]  库名  [表名1]  [表名2]  …  >  /备份路径/备份文件名

 

格式2:导出一个或多个完成的库(包括其中所有的表)

Mysqldump  [选项]  --databases  库名1  [库名2]  …  >  /备份路径/备份文件名

 

格式3:备份MySQL服务器中的所有库。

Mysqldump  [选项]  --all-databases  >  /备份路径/备份文件名

 

其中,常用的选项包括“-u”“-p”,分别用于指定数据库用户名,密码。例如,以下操作分别使用格式1、格式2、将MySQL库中的user表导出为mysql-user.sql文件,将整个auth库导出为auth.sql文件,所有操作均已root用户的身份进行验证。

 

将MySQL库中的user表导出为mysql-user.sql文件:

[root@www 桌面]# mysqldump -u root -p mysql user > mysql-user.sql

Enter password:                       (输入用户root的mysql的验证密码)

 

将整个auth库导出为auth.sql文件,所有操作均已root用户的身份进行验证:

[root@www 桌面]# mysqldump -u root -p --databases auth > /auth.sql

Enter password:                       (输入用户root的mysql的验证密码)

 

若需要备份整个MySQL服务器中的所有库,应使用格式3。当导出的数据量较大时,可以添加“--opt”选项以优化执行速度。例如,执行以下操作将创建备份文件all-data.sql,其中包括MySQL服务器中的所有库。

 

将创建备份文件all-data.sql,其中包括mysql服务器中的所有库:

 

[root@www 桌面]# mysqldump -u root -p --opt --all-databases > all-data.sql 

Enter password:                             (输入用户root的mysql的验证密码)

 

注意:如果在备份mysql数据库时,出现(mysqldump: Got error: 1045: Access denied for user 'root'@'localhost' (using password: YES) when trying to connect)这种报错,根据以下提示,进行更改:

 

[root@www 桌面]# mysql -u root -p

Enter password:                       (使用管理员进入MySQL)

 

mysql> use mysql;                       (切换到mysql数据库中)

Database changed

mysql> select * from mysql.user where user='root';  (查看mysql数据库中root的密码状态)

 

mysql> select * from mysql.user where host!='127.0.0.1' and host!='localhost'; | Host                  | User | Password                                  | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Create_user_priv | Event_priv | Trigger_priv | Create_tablespace_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections | max_user_connections | plugin | authentication_string |

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

| localhost             | root | *6A7A490FB9DC8C33C2B025A91737077A7E9CC5E5 | Y           | Y           | Y           | Y           | Y           | Y         | Y           | Y             | Y            | Y         | Y          | Y               | Y          | Y          | Y            | Y          | Y                     | Y                | Y            | Y               | Y                | Y                | Y              | Y                   | Y                  | Y                | Y          | Y            | Y                      |          |            |             |              |             0 |           0 |               0 |                    0 |        |                       |

| localhost.localdomain | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | Y           | Y           | Y           | Y           | Y           | Y         | Y           | Y             | Y            | Y         | Y          | Y               | Y          | Y          | Y            | Y          | Y                     | Y                | Y            | Y               | Y                | Y                | Y              | Y                   | Y                  | Y                | Y          | Y            | Y                      |          |            |             |              |             0 |           0 |               0 |                    0 |        |                       |

| 127.0.0.1             | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | Y           | Y           | Y           | Y           | Y           | Y         | Y           | Y             | Y            | Y         | Y          | Y               | Y          | Y          | Y            | Y          | Y                     | Y                | Y            | Y               | Y                | Y                | Y              | Y                   | Y                  | Y                | Y          | Y            | Y                      |          |            |             |              |             0 |           0 |               0 |                    0 |        |                       |

| ::1                   | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | Y           | Y           | Y           | Y           | Y           | Y         | Y           | Y             | Y            | Y         | Y          | Y               | Y          | Y          | Y            | Y          | Y                     | Y                | Y            | Y               | Y                | Y                | Y              | Y                   | Y                  | Y                | Y          | Y            | Y                      |          |            |             |              |             0 |           0 |               0 |                    0 |        |                       |

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

4 rows in set (0.00 sec)

 

mysql> select * from mysql.user where host!='127.0.0.1' and host!='localhost'; 

    (查询结果有没有问题,接下来把查询到的这个记录都删除)

 

| Host                  | User     | Password                                  | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Create_user_priv | Event_priv | Trigger_priv | Create_tablespace_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections | max_user_connections | plugin | authentication_string |

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

| localhost.localdomain | root     | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | Y           | Y           | Y           | Y           | Y           | Y         | Y           | Y             | Y            | Y         | Y          | Y               | Y          | Y          | Y            | Y          | Y                     | Y                | Y            | Y               | Y                | Y                | Y              | Y                   | Y                  | Y                | Y          | Y            | Y                      |          |            |             |              |             0 |           0 |               0 |                    0 |        |                       |

| ::1                   | root     | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | Y           | Y           | Y           | Y           | Y           | Y         | Y           | Y             | Y            | Y         | Y          | Y               | Y          | Y          | Y            | Y          | Y                     | Y                | Y            | Y               | Y                | Y                | Y              | Y                   | Y                  | Y                | Y          | Y            | Y                      |          |            |             |              |             0 |           0 |               0 |                    0 |        |                       |

| 192.168.4.19          | dbuser   | *760F60073FD235571A5260444301DB22136ED604 | N           | N           | N           | N           | N           | N         | N           | N             | N            | N         | N          | N               | N          | N          | N            | N          | N                     | N                | N            | N               | N                | N                | N              | N                   | N                  | N                | N          | N            | N                      |          |            |             |              |             0 |           0 |               0 |                    0 |        | NULL                  |

| loaclhost             | zhangsan | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | N           | N           | N           | N           | N           | N         | N           | N             | N            | N         | N          | N               | N          | N          | N            | N          | N                     | N                | N            | N               | N                | N                | N              | N                   | N                  | N                | N          | N            | N                      |          |            |             |              |             0 |           0 |               0 |                    0 |        | NULL                  |

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

4 rows in set (0.01 sec)

 

mysql> delete from mysql.user where host!='127.0.0.1' and host!='localhost';

                   ( 删除用户host!=127.0.0.1和host!=localhost)

mysql> select * from mysql.user where host!='127.0.0.1' and host!='localhost';

Empty set (0.00 sec)                      (查询后就没有任何记录了)

 

mysql> update mysql.user set password=password('123456') where user='root';

(重新修改一次mysql的root密码为123456)

[root@www 桌面]# service mysqld restart       (重新启动MySQL服务器)

 

以上操作,可以解决1045错误报错。

 

查看备份文件内容:

通过mysqldump工具导出的SQL脚本时文本文件,其中“/*…*/”部分或以“——”开头的行表示注释信息。使用grep、less、cat等文本工具可以查看脚本内容。例如,执行以下操作可以通过过滤出auth.sql脚本中的数据库操作语句。

 

[root@www 桌面]# grep -v "^--" auth.sql | grep -v "^/" | grep -v "^$"

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `auth` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `auth`;

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (                    

  `user_name` char(16) NOT NULL,                  (用户名的数据类型)

  `user_passwd` char(48) DEFAULT '',                (密码的数据类型)

  PRIMARY KEY (`user_name`)                          (主键)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;       (ENGINE:为数据库的引擎之一,为MySQL AB发布binary的标准之一, DEFAULT CHARSET:为数据库默认的字符集编码为utf8)

LOCK TABLES `user` WRITE;                                  (对user表加写锁定。)

INSERT INTO `user` VALUES ('wangwu','*2A032F7C5BA932872F0F045E0CF6B53CF702F2C5'),('zhangsan','*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9');

UNLOCK TABLES;

 

LOCK TABLES :读锁定

mysql> lock tables user read;

Query OK, 0 rows affected (0.00 sec)

mysql>

对user表加读锁定。

 

unlock tables; 释放读锁定。

mysql> unlock tables;

Query OK, 0 rows affected (0.00 sec)

mysql>

释放读锁定

 

lock tables user write; :对user表加写锁定。

mysql> lock tables user write;

Query OK, 0 rows affected (0.00 sec)

对user表加写锁定。

 

如何查看数据库中表的类型,执行下面操作:

mysql> use auth;

Database changed

mysql> show create table user;

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

| Table | Create Table                                                                                                                                                 |

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

| user  | CREATE TABLE `user` (

  `user_name` char(16) NOT NULL,

  `user_passwd` char(48) DEFAULT '',

  PRIMARY KEY (`user_name`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 |  (表的类型是lnnoDB)

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

1 row in set (0.00 sec)

 

 

注意:MyISAM是默认存储引擎。它基于更老的ISAM代码,但有很多有用的扩展。(注意MySQL 5.1不支持ISAM)。 每个MyISAM在磁盘上存储成三个文件,每一个文件的名字均以表的名字开始,扩展名指出文件类型。

.frm文件存储表定义;

·MYD (MYData)文件存储表的数据;

.MYI (MYIndex)文件存储表的索引。

 

要明确表示你想要用一个MyISAM表格,请用ENGINE表选项指出来:

CREATE TABLE t (i INT) ENGINE = MYISAM;

注释:老版本的MySQL使用TYPE而不是ENGINE(例如,TYPE = MYISAM)。MySQL 5.1为向下兼容而支持这个语法,但TYPE现在被轻视,而ENGINE是首先的用法。

一般地,ENGINE选项是不必要的;除非默认已经被改变了,InnoDB是默认存储引擎。

 

 

恢复数据库:

使用mysqldump命令导出的sql备份脚本,在需要恢复时可以通过mysql命令对其进行导入操作,命令格式如下:

 

Myslq  [选项]  [库名]  [表名]  <  备份路径/备份文件名

 

当备份文件中只包含表的备份,而不包括常见库的语句时,则执行导入操作时必须指定库名,且目标库必须存在,例如,执行以下操作可以从备份文件mysql-user.sql中将表导入test库。

 

[root@www 桌面]# mysql -u root -p test < mysql-user.sql                              (把备份文件mysql-user.sql导入test的数据库中)

Enter password:

[root@www 桌面]# mysql -u root –p               (进入数据库验证)

Enter password:

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

Your MySQL connection id is 10

Server version: 5.5.22-log Source distribution

 

Copyright (c) 2000, 2011, 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> use test                                            (切换到test库中)

Database changed

mysql> show tables;                                      (验证是否导入成功)

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

| Tables_in_test |

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

| user           |

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

1 row in set (0.00 sec)

 

mysql>

 

 

若备份文中已经包括完整的库信息,则执行导入操作时无需指定库名。例如,执行以下操作可以从备份文件auth.sql恢复auth库。

 

[root@www ~]# cd /usr/local/mysql/data/    

[root@www data]# mv auth /tmp                        (转移auth库,模拟故障)

 

[root@www data]# ls -ld auth

ls: 无法访问auth: 没有那个文件或目录                     (找不到了auth库了)

 

[root@www data]# mysql -u root -p <  ~  /auth.sql           (恢复auth库,重定向后面跟文件路径)

 

[root@www data]# ls -ld auth                              (确认恢复结果)

 

标签:语句,数据库,练习,auth,user,mysql,MySQL,root,priv
From: https://www.cnblogs.com/smile020420/p/17434461.html

相关文章

  • Mysql表外连接和约束和自增
    1. mysql 表外连接  7821.1 提出一个问题1.前面我们学习的查询,是利用where子句对两张表或者多张表,形成的笛卡尔积进行筛根据关联条件,显示所有匹配的记录,匹配不上的,不显示2.比如:列出部门名称和这些部门的员工名称和工作,同时要求显示出那些没有员工的部门。3. 使用我们学习过......
  • Mysql索引
    1. 索引快速入门  791说起提高数据库性能,索引是最物美价廉的东西了。不用加内存,不用改程序,不用调sql,查询速度就可能提高百倍干倍。这里我们举例说明索引的好处[构建海量表8000000] 是不是建立一个索引就能解决所有的问题?ename.上没有建立索引会怎样?select * from emp wh......
  • mysql事务
    1. mysql 事务1.1 什么是事务事务用于保证数据的一致性,它由一组相关的dml语句组成该组的dml语句要么全部成功,要么全部失败。如:转账就要用事务来处理,用以保证数据的一致性。2. 事务和锁  796-797当执行事务操作时(dml语句) ,mysql会在表 上加锁,防止其它用户改表的数据.这对......
  • mysql表类型和存储引擎和视图
    1. mysql表类型和存储引擎  8031.1 基本介绍1. MySQL的表类型由存储引擎(Storage Engines)决定,主要包括MyISAM、innoDB、Memory等。2. MySQL数据表主要支持六种类型,分别是: CSV、 Memory、ARCHIVE、MRG_MYISAM、MYISAM、 InnoBDB.3.这六种又分为两类,一类是”事务安全型”......
  • mysql用户管理
    1. Mysql 用户  808其中user表的重要字段说明:1. host: 允许登录的"位置”, localhost表示该用户只允许本机登录,也可以指定ip地址,比如:192.168.1.1002. user: 用户名;3. authentication string:密码,是通过mysql的password()函数加密之后的密码。1.1 创建用户  808cre......
  • 数据库系列-MYSQL篇之-主从同步
    1主从同步概述mysql主从同步,即MySQLReplication,可以实现将数据从一台数据库服务器同步到多台数据库服务器。MySQL数据库自带主从同步功能,经过配置,可以实现基于库、表结构的多种方案的主从同步。可以对MySQL做主从架构并且进行读写分离,让主服务器(Master)处理写请求,从服务器(Sla......
  • MySQL中--skip-password参数作用
     MySQL中--skip-password参数探究 本篇使用客户端:mysql版本:MySQL8认证插件:mysql_native_password对于初始化数据库时,若是使用了--initialize-inscure选项,则对于用户root@localhost会使用空密码。2023-05-26T09:20:21.205673+08:006[Warning][MY-010453][Server]roo......
  • mysql创建用户及分配操作权限
    MySQL在安装时,会默认创建一个名为root的用户,该用户拥有超级权限,可以控制整个MySQL服务器,所以如果滥用root账户,对于系统来说是很不安全的。MySQL提供了以下3种方法创建用户。使用GRANT语句创建用户使用CREATEUSER语句创建用户在mysql.user表中添加用户1.使......
  • 关于MySQL的JDBC Driver加载过程详解
    在使用JDBC时,都需要提前加载对应数据库的Driver类,MySQL为例:Class.forName("com.mysql.jdbc.Driver")但是不写这句代码也可以让 com.mysql.jdbc.Driver类成功加载,这就涉及到java.sql.DriverManager类了,先看一下代码:publicclassDriverManager{//注册驱动的集合priva......
  • 5分钟搞定Linux安装Mysql5.7(简单快捷,建议收藏)
    本文记录下我近期在Linux环境下安装Mysql5.7的实践经历。服务器版本Mysql版本Centos7.65.7.321.下载Mysql下载地址:https://downloads.mysql.com/archives/community/进入页面后选择你需要的版本进行下载,这里提供了2种格式:tar.gz和tar。如果下载不方便,可以直接从我的网盘里面下......