在Ubuntu 18.04上安装MySQL的方法

简介
MySQL是个开源的数据库管理系统。它通过关系数据库(relational database)和结构化查询语言(Structured Query Language)管理数据。
MySQL的安装简单点说就是:更新源,安装包(mysql-server),执行安全配置向导命令(mysql_secure_installation)。
$ sudo apt update
$ sudo apt install mysql-server
$ sudo mysql_secure_installation

本文将介绍在Ubuntu 18.04上安装MySQL 5.7的方法。

前提条件
要使用本文中的命令,需要:
.系统必须是Ubuntu 18.04,还要一个有sudo权限的非root用户,并要开启系统防火墙(iptables)。

第一步——安装MySQL
Ubuntu 18.04中APT 安装包仓库里只有最新版的MySQL.本文撰写的时候是5.7.
先通过apt命令更新安装包索引:
$ sudo apt update


然后,安装默认包:
$ sudo apt install mysql-server


上面的命令虽然可以安装MySQL,但是安装过程中不会要求你设置密码或者更改配置。MySQL安装过程中的安全配置问题由专门命令来处理。

第二步——配置MySQL
初次安装都会运行一下安全配置命令。这个命令会修改一些安全系数低的默认配置比如,root用户远程登录、匿名账户。低版本的MySQL你还要手动初始化data目录,5.7自动完成data目录初始化。

安全配置命令:
$ sudo mysql_secure_installation


这个命令执行过程中有一系列的交互。首先会问你是否安装可以检测MySQL密码强度密码验证插件。然后是设置root用户密码。之后是确认密码。除此之外都应该选择"Y"并回车。这个过程中会删除匿名账户和test库、禁止root用户远程登录、加载新规则刷新授权表,并让配置立马生效。

MySQL data目录的初始化用mysql_install_db命令来完成(5.7.6之前的版本,5.7.6及高版本用mysqld --initialize)。Debain系统比如Ubuntu会自动初始化不需要执行初始化命令。如果运行了会报错:
mysqld: Can't create directory 'var/lib/mysql/'(Errcode:17 - Files exists)
...
2018-04-23T13:48:00.572066Z 0 [ERROR] Aborting


虽然你已经给root用户设置了密码,但是该用户并没有授权通过密码连接MySQL.

第三步——(可选)修改用户认证方法和权限
Ubuntu上运行MySQL5.7和更高版本,root用户默认通过auth_socket插件连接数据库而不是密码。这样虽然更安全更实用,但是外部程序比如phpMyAdmin要访问root用户的话就有点复杂了。

如果要用密码登录MySQL,就要修改认证方法用mysql_native_password替换auth_socket.具体操作是先在终端打开MySQL命令提示窗口:
$ sudo mysql


然后用如下命令检测每个MySQL用户的认证方法:
mysql > SELECT user,authentication_string,plugin,host FROM mysql.user;

Output
+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)


上面的示例可以看出root用户确实用的auth_socket插件。修改root账户认证方式要用ALTER USER命令。
mysql >  ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

运行该命令后,root用户的密码就被修改为第二步设置的密码了。之后再运行FLUSH PRIVILEGES 告诉服务器重载授权表,使设置生效。

mysql > FLUSH PRIVILEGES;

再次检查各用户的认证方法,确认root用户的修改是否生效:
mysql > SELECT user,authentication_string,plugin,host FROM mysql.user;

Output
+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

确认无误之后退出MySQL shell程序:
mysql > exit


创建新用户用来操作特定数据。
$ mysql -u root -p

mysql > CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';


创建完用户之后要给他分配合适的权限。比如,把某个数据库中的全部表授权给该用户,包括新增、修改和移除用户权限的权限:
mysql > GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;


这里不需要再执行FLUSH PRIVILEGES命令。这个命令在对授权表进行增删改是使用。因为你只是新增了一个用户又不是修改现有用户授权信息FLUSH PRIVILEGES命名就没有必要。

第四步——检查服务状态
$ systemctl status msyql.service

sudo systemctl start mysql


如果你安装了mysqladmin 也可以用如下命令检查一下

$ sudo mysqladmin -p -u root version



原文地址: How To Install MySQL on Ubuntu 18.04

评论0条