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
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
vi /etc/my.cnf.d/client.cnf
在 [client] 中添加
default-character-set=utf8
vi /etc/my.cnf.d/mysql-clients.cnf
在 [mysql] 中添加
default-character-set=utf8
全部配置完后,重启 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;
授权
grant <权限名数组 或 all privileges> on <数据库名>.<表名> to <用户名>@<允许的IP> identified by "<密码>";
flush privileges;
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;
删除用户
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;
备份
从 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
此时执行 source /tmp/db.dump
即可恢复数据库了
如果不在 mariadb 命令行中,也可以直接使用 mysql -uroot -p < /tmp/db.dump
命令进行恢复(从外部恢复,不会有任何回显)