Ubuntu下MySQL的安装和配置
$ netstat -tap | grep mysql
$ sudo apt-get install mysql-server mysql-client
$ mysqladmin -u root -p password
错误分析与解决:
另外,在安装过程中也可能没有弹出密码设置界面,这时,当你使用mysql -u root -p 去登录MySQL服务器时,而且你已经输入了密码(尽管你并没有设置),经常会弹出以下窗口:
或
这个时候,我们所需要做的事就是给root用户设置密码,具体过程如下:
这个时候,再连接MySQL服务器时,就会成功了:
# 启动MySQL
$ sudo service mysql start
# 关闭MySQL
$ sudo service mysql stop
# 重启MySQL
$ sudo service mysql restart
# 其他命令:
$ sudo /etc/init.d/mysql start
$ sudo /etc/init.d/mysql stop
$ sudo /etc/init.d/mysql restart
$ mysql -u root -p
如果是登录远端的MySQL服务器,命令格式为:
$ mysql -h hostname -u username -p
Enter password:
其中,hostname指的是MySQL服务器的IP地址或名字,但是需要远端服务器的授权。
举个例子:
首先,我在192.168.1.108的主机上运行MySQL服务器,现在,我使用root权限登录MySQL,然后增加远端主机用户:
在上图中,我们还测试了root用户所能管理的数据库。
现在,我们在192.168.1.111主机上打开MySQL客户端,并与远端服务器进行连接:
1、创建新数据库:
mysql> create database mydb;
2、创建新用户:
mysql> create user ‘kiterunner‘@‘localhost‘ identified by ‘110316‘;
注意,在上述命令行中‘kiterunner‘代表用户名,‘localhost’代表客户机所在主机,如果你打算今后使用另一台计算机通过网络来连接MySQL服务器,就需要把上例中的localhost改为那台计算机的名字,例如“192.168.1.199”或者“www.chaosir24.com” 等。同时,在上述命令行中,‘110316‘指的是用户‘kiterunner‘的的登录口令。
更改用户名密码见前文。
3、删除用户:
mysql> drop user ‘kiterunner‘@‘localhost‘
4、访问权限设置:
4.1、MySQL赋予用户权限命令的简单格式可概括为:
mysql> grant 权限 on 数据库对象 to 用户 with grant option
(1)、grant普通数据用户,查询、插入、更新、删除数据库中所有表数据的权限
mysql> grant select,insert,update,delete on testdb.* to kiterunner@localhost
(2)、grant数据库开发人员,创建表、索引、视图、存储过程、函数等权限
grant创建、修改、删除 MySQL数据表结构权限:
mysql> grant create on testdb.* to kiterunner@localhost;
mysql> grant alter on testdb.* to kiterunner@localhost;
mysql> grant drop on testdb.* to kiterunner@localhost;
mysql> grant references on testdb.* to kiterunner@localhost;
mysql> grant create temporary tables on testdb.* to kiterunner@localhost;
mysql> grant index on testdb.* to kiterunner@localhost;
mysql> grant create view on testdb.* to kiterunner@localhost;
mysql> grant show view on testdb.* to kiterunner@localhost;
grant操作MySQL存储过程、函数权限:
mysql> grant create routine on testdb.* to kiterunner@localhost;
mysql> grant alter routine on testdb.* to kiterunner@localhost;
mysql> grant execute on testdb.* to kiterunner@localhost;
(3)、grant普通DBA管理某个MySQL数据库的权限
mysql> grant all on testdb.* to kiterunner@localhost;
(4)、grant高级DBA管理MySQL中所有数据库的权限
mysql> grant all on *.* to kiterunner@localhost;
(5)、MySQL grant 权限,分别可以作用在多个层次上:
grant作用在整个MySQL服务器上:
mysql> grant select on *.* to kiterunner@localhost; -- kiterunner可以查询MySQL中所有数据库中的表。
mysql> grant all on *.* to kiterunner@localhost; -- kiterunner可以管理MySQL中的所有数据库
grant作用在单个数据库上:
mysql> grant select on testdb.* to kiterunner@localhost; -- kiterunner可以查询testdb中的表
grant作用在表中的列上:
mysql> grant select(id, se, rank) on testdb.apache_log to kiterunner@localhost;
grant作用在存储过程、函数上:
mysql> grant execute on procedure testdb.pr_add to kiterunner@localhost;
mysql> grant execute on function testdb.fn_add to kiterunner@localhost;
4.2、MySQL撤销用户权限命令的简单格式可概括为:
mysql> revoke 权限 on 数据库对象 from 用户
关于具体的权限配置可参考grant配置。
4.3、其他内容:
查看MySQL 用户权限:
//查看当前用户(自己)权限:
mysql> show grants;
//查看其他 MySQL 用户权限:
mysql> show grants for kiterunner@localhost;
mysql> grant select on testdb.* to kiterunner@localhost with grant option;
4.4、实例验证:
例一、常规配置:
我们可以通过grant命令来授权用户权限:
mysql> grant all on mydb.* to kiterunner@localhost;
上述命令中,grant代表授权命令,‘all on mydb.*‘指的是允许用户对mydb数据库进行任何操作,而to后面所接的‘kiterunner@localhost‘代指的授权用户。
现在,我们可以尝试使用该改用登录MySQL服务器(服务器中存储有两个数据库,一个为mydb,另一个为testdb),我们会发现:
可以发现,当我们仅仅授权kiterunner用户只能使用mydb时,当我们使用其他的数据库时,就会发现出现报错:
即kiterunner是没有权限访问testdb数据库的。
当然,如果需要授权kiterunner用户同时可以访问mydb和testdb数据库,可以配置赋予kiterunner用户访问testdb数据库的权限:
现在,当用户kiterunner转换至testdb时,就不会发生错误提示了:
另外,MySQL不仅能限制用户访问单个数据库,还能实现用户的操作权限,例如,当我们限制kiterunner用户仅能进行Select和Insert操作时,我们可以如此进行配置:
现在,当我们使用kiterunner用户时,我们是无法对数据库进行update等操作,只能进行select和insert操作。
另外,我们还需要考虑这样一个问题:当我们已经授予某用户访问某数据库的权限时,如何重新禁止用户访问该数据库?
我们的解决方法是使用revoke命令:
mysql> revoke all on testdb.* from kiterunner@localhost
例二、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作。
解析:
方法一:
mysql> create user ‘test2‘@‘localhost‘ identified by ‘abc‘;
mysql> grant select,insert,update,delete on mydb.* to test2@localhost
方法二:
mysql> grant select,insert,update,delete on mydb.* to test2@localhost identified by "abc";
同时:
adoryn@apple:~$ mysql -u root -p
mysql> grant select,insert,update,delete,create,drop
on bankaccount.* to custom@localhost identified by ‘stupid‘;
mysql> grant select,insert,update,delete,create,drop
on expense.* to custom@whitehouse.gov identified by ‘stupid‘;
mysql> grant selecr,insert,update,delete,create,drop
on customer.* to custom@‘%‘ indentified by ‘stupid‘;
5、导入.sql文件:
mysql> source ./create_student.sql
# create student table for grade-keeping project
DROP TABLE IF EXISTS student;
#@ _CREATE_TABLE_
CREATE TABLE student
(
name VARCHAR(20) NOT NULL,
sex ENUM(‘F‘,‘M‘) NOT NULL,
student_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY (student_id)
) ENGINE=InnoDB;
#@ _CREATE_TABLE_
执行命令:
现在,利用命令show tables;打印出已经存在的表:
发现student表已经存在于mydb数据库中,说明sql文件导入成功。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。