(3)初始化Data目录
解包完MySQL后,MySQL目录中会有一个data目录:
xpleaf@leaf:/usr/local$ cd mysql
xpleaf@leaf:/usr/local/mysql$ ls -d data/
data/ 里面包含的是MySQL运行所必需的系统信息,因此我们需要将这些数据初始化,如下:
#修改mysql目录下的所有文件的属主为mysql
xpleaf@leaf:/usr/local/mysql$ sudo chown -R mysql .
#修改mysql目录下的所有文件的属组为mysql
xpleaf@leaf:/usr/local/mysql$ sudo chgrp -R mysql .
#以mysql用户的身份初始化数据
xpleaf@leaf:/usr/local/mysql$ sudo scripts/mysql_install_db --user=mysql
#修改mysql目录下的所有文件的属主为root
xpleaf@leaf:/usr/local/mysql$ sudo chown -R root .
#修改mysql目录下的data目录的属主为mysql
xpleaf@leaf:/usr/local/mysql$ sudo chown -R mysql data 请务必按照上面的操作进行,至于详细的是什么意思,为什么要这样做,可以参考官方文档,有非常详细的解释:http://dev.mysql.com/doc/refman/5.6/en/data-directory-initialization.html
(4)启动MySQL
如下:
xpleaf@leaf:/usr/local/mysql$ sudo bin/mysqld_safe --user=mysql &
[1] 8365
xpleaf@leaf:/usr/local/mysql$ 160308 14:13:26 mysqld_safe Logging to '/usr/local/mysql-5.6.28-linux-glibc2.5-x86_64/data/leaf.err'.
160308 14:13:26 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql-5.6.28-linux-glibc2.5-x86_64/data 确认已经开启MySQL服务:
xpleaf@leaf:~$ mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (13) 问题:如果你在进行该操作的时候也出现了上面的错误,那么请按照下面的方法来解决:
方式1:使用set password语句
xpleaf@leaf:~$ mysql -u root -p
Enter password:
mysql> set password for 'root'@'localhost' = password('123456');
mysql> set password for 'root'@'127.0.0.1' = password('123456');
mysql> set password for 'root'@'::1' = password('123456');
mysql> set password for 'root'@'leaf' = password('123456');
mysql> flush privileges;方式2:使用update语句
xpleaf@leaf:~$ mysql -u root -p
Enter password:
mysql> update mysql.user set password = password('123456')
-> where User = 'root';
mysql> flush privileges;
xpleaf@leaf:~$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
xpleaf@leaf:/usr/local/mysql$ mysql -u root -p
Enter password: 这时再重新看一下mysql.user表:
xpleaf@leaf:~$ mysql -u root -p
Enter password:
mysql> update mysql.user set password = password('123456') where User = '';
mysql> flush privileges; 这里我们使用update语句的方法。
另外注意这里的`flush privileges`语句,这个语句的作用是使我们刚刚修改密码的操作马上生效,而无需重启mysql服务,如果没有使用该语句,同时也没有重启mysql服务,使用新密码重新登陆mysql时会一直提示ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)错误。
b.删除匿名用户
如果你觉得匿名用户留着实在没有什么必要的话,也可以直接将其删除:
shell> mysql -u root -p
Enter password: (enter root password here)
mysql> DROP USER ''@'localhost';
mysql> DROP USER ''@'host_name';
mysql> flush privileges;
(2)MySQL测试数据库安全优化
--默认情况下的数据库本身存在安全隐患
官方文档的说明:
the mysql.db table contains rows that permit all accounts to access the test database and other databases with names that start with test_
也就是说mysql.db表中有些行允许所有的用户访问test数据库或以名字test_开头的数据库,虽然这对于测试数据库很方便,但其还是带来了一定的安全隐患,所以我们也要对其进行优化。
--数据库安全优化:删除test数据库或名字以test开头的数据库
如下:
xpleaf@leaf:~$ mysql -u root -p
mysql> delete from mysql.db where db like 'test%';
mysql> drop database test;
mysql> flush privileges;