前言

提到数据库,大家肯定能想到 MySQL,它是当年很多网站的标配,很多站长都是从 LAMP 架构开始的,其中的“M”就是指 MySQL 数据库。后来呢,“M”也指 MariaDB,因为在 MySQL 被甲骨文收购后,原始开发者们担心随之而来的一些风险,于是出现了另一个分支,也就是今天的 MariaDB。它与 MySQL 是高度兼容的,对站长来说,想要从 MySQL 切换到 MariaDB 不需要进行任何额外的操作,就跟平时备份恢复 MySQL 数据库一样,都 9102 年了,估计站长们早都已经换成 MariaDB 了。

还有一个工具是 LAMP 的好搭档,它就是 phpMyAdmin,使用 phpMyAdmin 的图形界面来创建、恢复、修改 MariaDB 数据库非常方便,不用记 SQL 命令,就能搞定基本的一些操作,这对不喜欢命令行的我来说,实在是太方便了,相信很多站长也都是从虚拟主机和 phpMyAdmin 开始折腾的。

后来虚拟主机已经满足不了折腾需求了,VPS(包括现在的各种云服务器)才是更好的折腾对象。很长一段时间,我都还是自己在 VPS 上安装一个 phpMyAdmin 用来管理和操作数据库。我一般都是给 phpMyAdmin 绑定一个不存在的域名,然后通过修改本地 hosts 文件指向 VPS 的 IP 地址,通过这个虚假的域名来登录 phpMyAdmin 后台然后进行操作。但是这明显是多余的,额外占用系统资源不说,这种远程操作方式安全性也很低,而且 phpMyAdmin 配置也还是有点繁琐的。另外,phpMyAdmin 经常要更新,有时还会带来 bug,在经历了几次烦人的错误后,我下定决心直接用 MySQL 命令来操作,把 phpMyAdmin 删了。

不知道有没有人跟我一样,总是对命令行带着一种莫名的恐慌和抵触,有图形界面用就不想敲命令😂,这也是为什么长时间使用 phpMyAdmin 而不想直接用数据库自带的命令来操作。其实真正接触多了,会感觉命令行也没什么可怕的,常用的命令也就那么几个,那不常用的呢?当然是 Google 啦!下面就记录一下 MariaDB 最常用的几个命令。

【注意:】MySQL 命令都是以 ; 号结束的,刚开始经常忘记,动不动就出错😓。

创建用户、数据库,以及分配权限

创建一个用户(同时设置密码),然后创建一个同名或者不同名的数据库,然后给予这个用户对这个数据库的所有权限,但是不能给用户此数据库之外的(global)权限。

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';    # 创建用户 username,密码 password

CREATE DATABASE dbname;    # 创建数据库 dbname

GRANT ALL PRIVILEGES ON dbname.* TO 'username'@'localhost';    # 给予用户 username 对数据库 dbname 的所有权限

备份和恢复数据库

[Update 2021-08-25]:目前最新版的 Mariadb 在运行 mariadb-secure-installation 时不再需要设置 root 用户(有点跟随系统的意思,如果系统本身设置没问题了,它就不再提示要设置 root 用户),往后如果需要 root 权限运行的 mysql 命令,可以直接切换到 root 运行,或者前面加上 sudo。所以,根据这个,把下面的命令修改了一下:

备份

sudo mysqldump database_name > database_name.sql

mysqldump -u root -p database_name > database_name.sql

恢复

sudo mysql database_name < database_name.sql

mysql -u root -p database_name < database_name.sql

删除数据库

如果数据库不用了,怎么删除呢?很简单,命令格式如下:

DROP {DATABASE | SCHEMA} [IF EXISTS] db_name

MarisDB 官方给出的具体例子:

DROP DATABASE bufg;
Query OK, 0 rows affected (0.39 sec)


DROP DATABASE bufg;
ERROR 1008 (HY000): Can't drop database 'bufg'; database doesn't exist


\W
Show warnings enabled.


DROP DATABASE IF EXISTS bufg;
Query OK, 0 rows affected, 1 warning (0.00 sec)Note (Code 1008): Can't drop database 'bufg'; database doesn't exist

我自己的例子:

MariaDB [(none)]> SHOW DATABASES;   # 列出现有的数据库
+--------------------+
| Database           |
+--------------------+
| wanlu              |
| test               |
| information_schema |
| mysql              |
| wptest             |
| performance_schema |
| drupaltest         |
+--------------------+
7 rows in set (0.001 sec)


MariaDB [(none)]> DROP DATABASE drupaltest;   # 删除 drupaltest 这个数据库
Query OK, 298 rows affected (0.199 sec)


MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| wanlu              |
| test               |
| information_schema |
| mysql              |
| wptest             |
| performance_schema |
+--------------------+
6 rows in set (0.001 sec)   # 可以看出 drupaltest 数据库已经被删除


MariaDB [(none)]>

删除用户

删除了数据库,多数情况下,还要删除对应的用户,命令差不多:

DROP USER [IF EXISTS] user_name [, user_name] ...

需要注意的是,这里删除的用户,要跟使用 CREATE USER 创建这个用户时的信息是一样的,创建时是 CREATE USER 'username'@'localhost'删除时也得带着这个 @'localhost'。比如:'jeffrey'@'localhost',如果没有指定的话,仅写上用户名,那么默认的是 'jeffrey'@'%',熟悉吧,这个 % 就是默认的,使用 phpMyAdmin 时,也是这样的,多数情况下我们要手动选成 localhost

我的例子:

MariaDB [(none)]> SELECT User FROM mysql.user;
+------------------+
| User             |
+------------------+
| root             |
| root             |
| wanlu            |
| debian-sys-maint |
| test             |
| wptest           |
| root             |
| drupaltest       |
+------------------+
8 rows in set (0.001 sec)


MariaDB [(none)]> DROP USER drupaltest;
ERROR 1396 (HY000): Operation DROP USER failed for 'drupaltest'@'%'   # 如果不写明那么默认是 @'%',所以出错了

MariaDB [(none)]> SELECT User FROM mysql.user;
+------------------+
| User             |
+------------------+
| root             |
| root             |
| wanlu            |
| debian-sys-maint |
| test             |
| wptest           |
| root             |
| drupaltest       |
+------------------+
8 rows in set (0.001 sec)


MariaDB [(none)]> DROP USER 'drupaltest'@'localhost';   # 跟上 '@'localhost',执行正确
Query OK, 0 rows affected (0.001 sec)


MariaDB [(none)]> SELECT User FROM mysql.user;
+------------------+
| User             |
+------------------+
| root             |
| root             |
| wanlu            |
| debian-sys-maint |
| test             |
| wptest           |
| root             |
+------------------+
7 rows in set (0.000 sec)   # 用户 drupaltest 已被删除


MariaDB [(none)]>

以上就是 MariaDB 数据库最简单也是最常用的几个操作命令,学会使用 MySQL 命令来操作数据库,就可以跟 phpMyAdmin 说拜拜了~

【P.S. 本文其实早就写好了,只是在 Evernote 里放着,今天把它发出来晒晒太阳~】