mariadb 的由来
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。Red Hat Enterprise Linux/CentOS 7.0 发行版已将默认的数据库从 MySQL 切换到 MariaDB。
mariadb-server 与连接器
进入 mariadb 的官网下载链接 https://mariadb.org/download/

我翻译一下:
- MariaDB Server 是世界上最流行的开源关系数据库之一,并且在主流 Linux 发行版的标准仓库中都有。可以使用操作系统的包管理器查找 mariadb-server。或者,您也可也使用如下资源
- MariaDB 基金会为 MariaDB Server 也提供了最流行的连接器,以供下载。
mariadb 的卸载
我这边之前已经手动安装过 mariadb 了。这里为了演示安装,需要用 rpm 命令进行卸载。
rpm 常用参数
- -a 查询所有文件
- -e 卸载
- -i 安装
- -q 查询
- -u 升级
- -h 显示安装进度
- -R 查看依赖
- –replacepkgs 重新安装rpm包
- –percent 在软件安装时显示百分比
开始使用 rpm -e mariadb 卸载 mariadb,提示说 mariadb-server 依赖于 mariadb。
因此需要先卸载 mariadb-server,再卸载 mariadb。
可以使用 rpm -qR mariadb-server 查看依赖

使用 rpm -q mariadb 查询,可以发现该卸载的均已卸载完毕了。

安装 mariadb
老规矩,先用 Putty 连接虚拟机中的 centos
使用命令 ip addr | grep inet 查看 ip,然后使用 PuTTY 连接
输入 yum install -y mariadb-server 安装 mariadb-server,它会自动安装其依赖的 mariadb
如果是 ubuntu 可以通过 apt-cache 命令查看依赖 apt-cache depends mariadb-server

mariadb 的启停命令
-
启动服务
systemctl start mariadb或service mariadb start -
停止服务
systemctl stop mariadb或service mariadb stop -
重启服务
systemctl restart mariadb或service mariadb restart -
添加到开机启动
systemctl enable mariadb或chkconfig mariadb on -
设置密码
mysqladmin -u root password ''xxxxxx'' -
安全设置,以及修改数据库管理员密码
mysql_secure_installation
配置 mariadb
安装完后 mariadb,接下来就要设置账号密码了。
如果使用 mysqladmin -u root password ''xxxxxxx'' 或 mysql_secure_installation 来配置报了如下错误,原因就是服务没开启。
输入 systemctl start mariadb 或 service mariadb start 启动服务,然后输入 mysql_secure_installation 配置密码。
mysql_secure_installation
-
第一次要求输入密码,直接回车
Enter current password for root (enter for none) -
第二次才是设置 root 密码
Set root password? [Y/n]
New Password
Re-enter new password -
是否删除匿名用户。Y或回车
Remove anonymous users? [Y/n] -
是否禁止 root 远程登录。我这边在本地测试,安全性要求不高,因此我选 n
Disallow root login remotely? [Y/n] -
是否删除数据库。Y或回车
Remove test databse and access to it? [Y/n] -
重新加载权限表。Y或回车
Reload privilege tables now? [Y/n]

启动 mariadb
mysql -uroot -p<password>
注意:-u和用户名、-p和密码之间均没有空格

最后键入 exit(带不带分号均可),即可正常退出。

配置字符集
进入 maridb 命令行后,键入 show variables like "character";show variables like "%collection%" 查看字符集

vi /etc/my.cnf
在 [mysqld] 标签下添加
init_connect=''SET collation_connection = utf8_unicode_ci''
init_connect=''SET NAMES utf8''
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
- 1
- 2
- 3
- 4
- 5

vi /etc/my.cnf.d/client.cnf
在 [client] 中添加
default-character-set=utf8
- 1

vi /etc/my.cnf.d/mysql-clients.cnf
在 [mysql] 中添加
default-character-set=utf8
- 1

全部配置完后,重启 mariadb
service mariadb restart ,这个命令会被重定向到 /bin/systemctl restart mariadb.service
重启完,还是跟之前一样,进入 mariadb:mysql -uroot -p<password>
友情提示: 我之前打错命令,把 -uroot 打成 -rroot,结果出现 Ignoring query to other database 错误。所以如果出现该错误,请检查登录命令是否正确
重新输入 show variables like "%character%";show variables like "%collation%;" 查看字符集,可以发现现在基本都统一成了utf8了。

添加用户,设置权限
查看当前主机、用户、密码的哈希值
show database;
use mysql;
select host,user,password from user;
- 1
- 2
- 3

授权
grant <权限名数组 或 all privileges> on <数据库名>.<表名> to <用户名>@<允许的IP> identified by "<密码>";
flush privileges;
- 1
- 2
flush privileges 命令用来刷新权限,否则修改可能不生效。
使用 show grants for ''<用户名>'' 可以查看授权时执行的命令

权限组有以下几种类型,可以用逗号隔开
- 数据库管理权限
| 权限名 | 权限所允许的操作 |
|---|---|
| CREATE USER | |
| FILE | |
| GRANT OPTION | |
- 数据库对象操作权限
| 权限名 | 权限所允许的操作 |
|---|---|
| ALTER | |
| ALTER ROUTINE | |
| CREATE | |
| CREATE ROUTINE | |
| CREATE TEMPORARY TABLE | |
| CREATE VIEW | |
| DELETE | |
| DROP | |
| EVENT | |
| EXECUTE | |
| INDEX | |
| INSERT | |
| LOCK TABLE | |
| PEFERENCE | |
| SELECT | |
| SHOW VIEW | |
| TRGGER | |
| UPDATE |
- 其它权限
| 权限名 | 权限所允许的操作 |
|---|---|
| ALL [PRIVILEGES] | 所有操作权限(但不包含GRANT) |
| USAGE | 一个特殊的“无权限” |
<数据库名>.<表名>表示授予权限的具体数据库或表
| db.table | 含义 |
|---|---|
| . | 授予该数据库服务器中所有数据库的权限 |
| db.* | 授予db数据库中所有表的权限 |
| db.table | 授予数据库db中table表的权限 |
允许用户登录的IP
| host | 含义 |
|---|---|
| localhost | 只允许该用户在本地登录,不能远程登录 |
| % | 允许在除本机之外的任何一台机器远程登录 |
| 192.168.1.1 | 具体IP表示仅允许用户从该特定的IP登录 |
刷新权限更变
flush privileges
创建用户
创建用户 create <用户名> identified by ''<password>''
查询之前创建的用户 select user,host,password from mysql.user where user="<用户名>"

修改密码
update mysql.user set password = password(''<密码>'') where user = ''用户名'' and host = ‘%’;
flush privileges;
- 1
- 2
删除用户
drop user <用户名>@''%;''
该命令会删除用户以及对应的权限。执行完后,你会发现 mysql.user 表中的用户,以及 mysql.db 表中的权限记录都消失了。
数据库的备份与恢复
首先进入数据库 mysql -uroot -p<password>,创建一个测试数据库并填充数据
MariaDB [(none)]>create database test;
MariaDB [(none)]>use test;
MariaDB [(none)]>create table book(name char(20), author char(20));
MariaDB [(none)]>insert into book values(''相对论'', ''爱因斯坦'');
MariaDB [(none)]>insert into book values(''爱情公寓'', ''韦正'');
MariaDB [(none)]>select * from book;
- 1
- 2
- 3
- 4
- 5
- 6

备份
从 mariadb 的命令行,退出到 centos 命令行。
执行 mysqldump -u root -p --all-databases > /tmp/db.dump 将数据库备份到 /tmp.dump 中。

恢复的2种方法
备份后进入 mariadb 命令行,删除之前创建的 test 数据库。
[root@localhost ~]# mysql -u root -p
Mariadb [(none)] > drop database test
Mariadb [(none)] > show databases
- 1
- 2
- 3

此时执行 source /tmp/db.dump 即可恢复数据库了
如果不在 mariadb 命令行中,也可以直接使用 mysql -uroot -p < /tmp/db.dump 命令进行恢复(从外部恢复,不会有任何回显)
