NingG +

MySQL安装:MySQL 5.6

背景

“在服务器上装个MySQL,我要用。”“OK,稍等。”这么一稍等,就等了40mins,而且,自己之前整理的MySQL安装步骤,并不完整,借这次安装的机会,整理一下吧。

安装MySQL

通常安装MySQL分为几个基本步骤:本地安装MySQL、设置MySQL的root密码、开启MySQL允许远程访问。

本地安装MySQL

Linux环境下安装MySQL,有两种方式:rpm包方式、yum源方式(暂不考虑编译源代码方式)。

rpm包方式

到MySQL官网,下载MySQL社区开源版本,详细版本号为:MySQL-5.6.21-1.linux_glibc2.5.x86_64.rpm-bundle.tar。这是一个集合,包含了如下组件:

1.解压MySQL安装包

执行如下命令:

[root@ningg mysql]#tar -xf MySQL-5.6.21-1.linux_glibc2.5.x86_64.rpm-bundle.tar
[root@ningg mysql]#ls
	MySQL-server-5.6.20-1.el6.x86_64.rpm
	MySQL-client-5.6.20-1.el6.x86_64.rpm      
	MySQL-shared-5.6.20-1.el6.x86_64.rpm
	MySQL-devel-5.6.20-1.el6.x86_64.rpm       
	MySQL-shared-compat-5.6.20-1.el6.x86_64.rpm
	MySQL-embedded-5.6.20-1.el6.x86_64.rpm    
	MySQL-test-5.6.20-1.el6.x86_64.rpm
2.创建MySQL系统管理员

执行如下命令:

[root@ningg mysql]#groupadd mysql
[root@ningg mysql]#useradd -g mysql mysql
[root@ningg mysql]#id mysql
	uid=27(mysql) gid=27(mysql) groups=27(mysql)
3.安装MySQL rpm包

执行命令如下:

[root@ningg mysql]#rpm -ivh "*.rpm"
Preparing...              ########### [100%]
   1:MySQL-devel          ########### [ 14%]
   2:MySQL-client         ########### [ 29%]
   3:MySQL-test           ########### [ 43%]
   4:MySQL-embedded       ########### [ 57%]
   5:MySQL-shared-compat  ########### [ 71%]
   6:MySQL-shared         ########### [ 86%]
   7:MySQL-server         ########### [100%]

补充一下,如果安装出现意外,希望卸载MySQL组件,则,卸载顺序如下:

[root@ningg ~]# rpm -e MySQL-server-5.5.24-1.rhel5
[root@ningg ~]# rpm -e MySQL-embedded-5.5.24-1.rhel5
[root@ningg ~]# rpm -e MySQL-shared-5.5.24-1.rhel5
[root@ningg ~]# rpm -e MySQL-devel-5.5.24-1.rhel5
[root@ningg ~]# rpm -e MySQL-test-5.5.24-1.rhel5
[root@ningg ~]# rpm -e MySQL-client-5.5.24-1.rhel5

思考:如何保证是mysql用户启动的MySQL?如果使用root运行MySQL,一旦MySQL进程被Hacker控制,Hacker就拥有了root权限?

yum源方式

(doing…)

设置MySQL的root密码

更详细内容参考MySQL 5.6 Manual: User account management

1.修改MySQL启动配置

查找my.cnf文件位置,两个命令:locate "my.cnf"find / -name "my.cnf"(备注:两个命令有差异,具体参考文章)。 通常文件位置/etc/my.cnf或者/usr/my.cnf,依具体情况行事,在其中设置不启用授权表:

[root@ningg mysql]# vim /usr/my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html

[mysqld]
# 新增加下面一行,含义:设置不启用授权表
skip-grant-tables

2.重置root密码

重新启动MySQL:service mysql restart,然后进行如下操作:

[root@ningg mysql]# mysql

mysql> use mysql
mysql> update user set Password=PASSWORD('1234') where User='root';
mysql> flush privileges;

之后,修改my.cnf文件,注释掉skip-grant-tables;然后,重启MySQL:service mysql restart

3.补充说明

针对msyql数据库下的user表,说明几点:

mysql> use mysql
#使用下面命令查看表格当前记录
mysql> select * from user \G;
#查看user表格的字段类型
mysql> describe user;
#查看Host\User\Password字段;
mysql> select host,user,password from user;
+-----------+------+---------------+
| host      | user | password      |
+-----------+------+---------------+
| %         | root | *81B936FD50F6 |
| cib02167  | root | *81B936FD50F6 |
| 127.0.0.1 | root | *81B936FD50F6 |
| ::1       | root | *81B936FD50F6 |
+-----------+------+---------------+

具体:

命令SET PASSWORD

#设置用户在不同主机环境下的登录密码
SET PASSWORD FOR 'root'@'%' = PASSWORD('newpass');

命令UPDATE

# 可修改user表格内容(MySQL不区分大小写)
update user set password=password('new-pw') where user='root' and host='%';

更新授权表

# 修改用户信息等,务必flush
flush privileges

开启MySQL允许远程访问

在user表中,添加一条user=roothost=%的记录,并且通过SET PASSWORD命令重置密码即可。host字段取值%,即表示任何客户端机器,涵盖远程访问的机器。

# 可修改user表格内容(MySQL不区分大小写)
update user set password=password('new-pw') where user='root' and host='%';

疑问:如果没有user=roothost=%的记录怎么办?

RE:新建一条记录,或者将user=root的记录,利用update命令修改为host=%,比较官方的做法,添加一个用户root@%即可;参考官网:adding users

常见问题

问题1:You must SET PASSWORD before executing this statement

解决办法:根据提示直接使用set password命令重置密码即可,如下:

mysql> set password=password('new-pw');

问题2:这个本质上是不是MySQL的管理问题?有哪些用户,哪些用户可以远程登录?

回应:是的,你很用心在思考,官方文档有很多细节,很有意思的,可以看一下,具体:MySQL ManualSecurity in MySQLUser Account Management,有详尽的说明。

问题3:MySQL上如何新增/删除用户?参考adding usersremoving users

-- 先刷新一下权限(避免问题发生)
flush privileges;

-- 创建用户 test:passwd
create user 'test'@'%' identified by 'passwd';

-- 为用户分配权限
grant all privileges on *.* to 'test'@'%' with grant option;

-- 查看用户权限
show grants for 'test'@'%';

-- 删除用户
drop user 'test'@'%';

参考来源

闲谈

这篇文章,写的都是小问题,如果读过MySQL的官方文档,就知道User Account Management的基本知识了,也不用遇到什么问题就蒙圈了,用一个东西,先浏览学习一下官方文档很必要的,看似浪费时间,其实是捷径。当然,一个个小问题折磨自己,才让我意识到读一遍MySQL官方文档的好处。

Top