前言

最近突发灵感,想要用ASP.Net或者Go语言来实现一个社区类的网站,但是在动手之前发现我关于数据库方面的知识还是很薄弱的,刚好又想起了我还有个闲置的博客站...而且手写这一类的笔记也很容易丢,我就索性写电子版本的笔记,全当打字的练习好了.

请注意,这只是我的个人笔记,这可能并不适合于想要自学的同学.但是我会从基础写起,尽可能地过一遍这本书中的主要知识点.

本笔记参考书籍:
MySQL与MariaDB学习指南

下载

MySQL

你可以从https://dev.mysql.com/downloads/下载到MySQL的community版本,你应该根据你的操作系统与CPU架构选择合适自己的版本,请注意不要下载开发中的版本.

MariaDB

你可以从https://mariadb.org/download/下载到MariaDB,与MySQL同样,你应该根据你的操作系统与CPU架构选择合适自己的版本,请注意不要下载开发中的版本.

安装

Windows

下载上面的安装包后运行安装包,根据提示安装即可.这很简单,又由于我不打算在我的电脑上直接安装,所以我就不给出详细的安装步骤了.

Ubuntu

打开终端,运行:

sudo apt update
sudo apt install mariadb mariadb-cilent

Alpine Linux

由于以后在生产环境中,数据库软件一般都会部署在linux上,但是我不想弄很大的linux发行版,所以这边直接使用了轻巧的Alpine Linux,运行在虚拟机中,并在物理机中使用ssh连接到虚拟机来执行命令,方便我复制输出结果.

因此,接下来的笔记内容所使用的环境为:

Server version: 10.11.5-MariaDB Alpine Linux

在虚拟机中安装完成Alpine linux后,运行:

#安装MariaDB
apk add mariadb
apk add mariadb-client
#初始化MariaDB
/etc/init.d/mariadb setup
#启动MariaDB
service mariadb start

测试运行

打开终端,尝试着运行mysql命令,如果你的输出类似于:

root@localhost ~# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.11.5-MariaDB Alpine Linux

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

真棒!你已经安装成功了,如果想要退出这个界面,可以输入exit;命令退出MySQL终端.

配置

给root设置初始的密码

这是很重要的一个步骤,因为root用户的权限非常大,但是它初始的密码是空的,因此我们需要修改它.例如可以使用附带安装的mysqladmin工具:

mysqladmin -u root -p flush-privileges password "114514"

这里我们将root密码改为了114514,它会给出提示Enter password:,由于我们是全新安装,root并没有密码,所以你可以直接打一个回车.

但是如果你想要在一个服务器上更改root密码,这就不安全了,例如在linux中可以使用history命令查看你的命令日志,就像这样:

mysql -u root -p
mysqladmin -u root -p flush-privileges password "114514"
service mariadb start
poweroff
mysql
/etc/init.d/mariadb setup
apk add mariadb-client
apk search mariadb
apk add mariadb
/usr/bin/fish
nano /etc/passwd
service sshd restart
service
sysctl sshd restart
nano /etc/ssh/sshd_config
busybox chsh
chsh

~
~
~

以上是我的命令执行日志,可以很清楚的看到我通过这个命令更改了root密码,因此为了安全起见,我们应该执行:

mysqladmin -u root -p flush-privileges password

这里会提示你输入一遍原来的密码,再输入两遍你想要使用的新密码.

用户名@主机名?

在MySQL中,权限由用户名和主机来决定,例如我们刚刚所提到的root便是用户名,而我们是在本机直接执行的SQL语句,所以我们的主机便是localhost,所以我们刚刚更改root密码的操作,对应的就是root@localhost

如果你想要查看你的所有组合,你可以这样做:

首先进入MySQL终端:

mysql -u root -p

输入密码进入SQL终端后,使用以下命令查看所有的组合:

SELECT User,Host FROM mysql.user;

你将得到以下输出:

+-------------+-----------+
| User        | Host      |
+-------------+-----------+
| PUBLIC      |           |
|             | localhost |
| mariadb.sys | localhost |
| mysql       | localhost |
| root        | localhost |
+-------------+-----------+
5 rows in set (0.061 sec)

在上面的结果中,出现了一个空用户名,主机名为localhost的组合,这就是匿名用户,也就是说任何人都可以从localhost登录.

这里需要注意一点,有的MySQL版本可能会出现root@%的组合,%的意思是任何主机,也就是说root用户可以被从任何地方登入,这样很不安全,所以你可以使用下面的SQL语句删除这样的组合:

DROP USER 'root'@'%';

当然在这里也可以进行密码的修改,但是这里有个坑:如果有root@localhost[email protected]这样的两个组合,虽然localhost和127.0.0.1指的都是同一主机,但是还是需要分两次修改密码.

例如,如果我想更改我的root@localhost组合的密码,我可以执行:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('114514');

当你完成了上述的修改,你需要退出SQL终端,在命令行用下面的命令来刷新一下,使得更改生效:

mysqladmin -u root -p flush-privileges

之后就可以使用更改后的密码登录了.

创建用户

基于安全原因,日常来说还是不要使用root用户为妙,我们来创建一个普通的用户来进行日常的数据管理,打开的你的MySQL终端:

GRANT USAGE ON *.* TO 'corona'@'localhost' IDENTIFIED BY '114514';

这里就创建了一个名叫corona密码为114514的普通用户,其中*.*代表所有数据库和所有数据表.但是这个时候这个用户还是没有任何权限的,什么都不能做,我们可以给这个用户赋予查询权限:

GRANT SELECT ON *.* TO 'corona'@'localhost';

这里的SELECT是查询语句的意思,这里我们就可以使用corona账户来使用select命令查询数据了.

我们可以用下面的命令来查看corona所拥有的权限:

SHOW GRANTS FOR 'corona'@'localhost'\G

输出如下:

*************************** 1. row ***************************
Grants for corona@localhost: GRANT SELECT ON *.* TO `corona`@`localhost` IDENTIFIED BY PASSWORD '*D9050F2D99C3DDD8138912B7BDF8F4BACBE3A8E7'
1 row in set (0.000 sec)

你可以看到,这里显示的密码是加密后的密码.

当然为了学习起见,我们还是赋予这个用户完整的基础权限比较好:

GRANT ALL ON *.* TO 'corona'@'localhost';

这里的ALL代指所有权限.