六、使用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 dbuser@192.168.4.19 |
+------------------------------------------------------------------------------------------------------------------+
| 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