Skip to content

可能是目前最详细简明的CentOS7安装与管理教程(6):MariaDB 安装与配置 #8

@gaoac

Description

@gaoac

首先我们从常规的 LMAP 套装开始:

MariaDB

CentOS 6 或早期的版本中提供的是 MySQL 的服务器/客户端安装包,但 CentOS 7 已使用了 MariaDB 替代了默认的 MySQL。MariaDB 数据库管理系统是 MySQL 的一个分支,主要由开源社区在维护,采用 GPL 授权许可 MariaDB 的目的是完全兼容 MySQL,包括 API 和命令行,使之能轻松成为 MySQL 的代替品。

在这里先介绍下常用的 RPM 命令:

查询软件包

rpm -q xxx

rpm -qp _.rpm: 获取当前目录下的 rpm 包相关信息

rpm -qa | less :列出所有已安装的软件包

rpm -qa | grep xxx :列出所有被安装的 xxx

rpm -qf /usr/sbin/httpd :查看某个文件属于哪个软件包,可以是普通文件或可执行文件,跟文件的绝对路径

rpm -qi xxx:列出已安装的 xxx 包的标准详细信息

rpm -ql xxx:列出 rpm 包 xxx 的文件内容
安装软件包

rpm -ivh _
.rpm:其中 i 表示安装,v 表示显示安装过程,h 表示显示进度

升级软件包

rpm -Uvh ***.rpm

删除软件包

rpm -e xxx

rpm -e -–nodeps xxx:不考虑依赖包

rpm -e –-allmatches xxx:删除所有跟 xxx 匹配的所有版本的包

安装

首先查看系统是否安装过 mariadb:
rpm -qa | grep mariadb

image

先卸载系统中的 mariadb:
rpm -e --nodeps mariadb-libs-****.x86_64

image

查看可安装版本:
yum list mariadb*

image

这里要说明一下:

出于实用的目的,MariaDB 是同一 MySQL 版本的二进制替代品(例如 MySQL 5.1->MariaDB 5.1, MariaDB5.2 和 MariaDB 5.3 是兼容的。MySQL 5.5 将会和 MariaDB 5.5 保持兼容)。简单说 5.x 就是为了兼容 MySQL5.x 的,接口几乎一致,体验上几乎无差别。
但是从 2012 年 11 月 12 日发布的 mariadb10.0.0 开始,不在依照 MySQL 的版本号,10.0.x 版本是以 5.5 版为基础,加入移植自 MySQL5.6 版的新功能和自行开发的新功能。

所以,为了更好的兼容已有 MySQL(5.6 以前)版本,这里我们不安装最新版 marisdb10,而是选择 5.5 版本。

这里我们安装mariadbmariadb-server即可。
执行命令yum install -y mariadb mariadb-server

image

image

程序会自动分析其需要的依赖并下载安装,我们静等完成就好。

image

到此,mariadb 安装结束。

启动配置

启动 mariadb
systemctl start mariadb
查看运行状态
systemctl status mariadb

image

设置开启自启
systemctl enable mariadb

image

密码配置

登陆数据库:
mysql -u root -p

image

首次安装后,root 账号默认密码为空,下面我们为 root 账号设置密码
执行命令:mysql_secure_installation

image

image

使用刚设置的密码登陆数据库:
mysql -u root -p

image

字符集与排序规则

接下来,让我么你看下 mariadb 数据库字符集(Character set)和排序规则(Collation):
执行:show variables like "%character%";show variables like "%collation%";

image

这里再普及下字符集的概念:

character_set_client: 代表客户端字符集,客户端最简单的来说,就是指命令行,或者其它操作数据库的网页,应用等等,客户端字符集就代表了用户输入的字符,用什么字符集来编码。

character_set_connection: 代表与服务器连接层的字符集,mysql 是连接 mysqld 服务器的客户端,两者连接层,采用的字符集。

character_set_database: 数据库采用的字符集。

character_set_filesystem: 文件采用的肯定是二进制最合适,不用修改。

character_set_result: 结果字符集,返回结果时采用的字符集。

character_set_server: mysql 服务器采用的字符集,也就是操作默认的字符集。

character_set_system: 系统元数据(字段名等)字符集,比如我们输入的命令'insert ...'这些语句字符串采用的字符集。
>_collation__类同

为了保证统一,避免出现编码不一致导致的乱码问题,我们统一设置成 UTF-8:

这里不得不再次强调一下:

MariaDB / MySQL 中 的 "utf8" 并不是真正的 UTF-8,其中的 "utf8mb4" 才是真正的 UTF-8。"utf8" 只支持每个字符最多三个字节,而真正的 UTF-8 是每个字符最多四个字节。MySQL 在 5.5.3 之后增加了这个 "utf8mb4" 的编码,mb4 就是 most bytes 4 的意思,专门用来兼容四字节的 unicode。好在 "utf8mb4" 是 "utf8" 的超集,除了将编码改为 "utf8mb4" 外不需要做其他转换,如果要想完美兼容,或者想存储 emoji 表情之类的,最好还是设置成 "utf8mb4" 当然,为了节省空间,一般情况下使用 "utf8' 也就够了。所以,现在网络上出现的设置"utf8' 的文章,可以说都多少有些过时了。

查看数据库支持字符集:
执行 SHOW CHARSET;
可以看到当前版本的 MariaDB 是支持 "utf8mb4" 的。由于个人需要,为了节省空间,我们接下来还是设置成 "utf8",大家知道这个事情就好,再根据项目需要进行选择。

image

临时修改(重启后失效)

字符集

– mysql> SET character_set_client = utf8 ;

– mysql> SET character_set_connection = utf8 ;

mysql> SET character_set_database = utf8 ;

mysql> SET character_set_results = utf8 ;

mysql> SET character_set_server = utf8 ;
排序规则

– mysql> SET collation_connection = utf8_general_ci;

mysql> SET collation_database = utf8_general_ci;

mysql> SET collation_server = utf8_general_ci ;

这里对 mysql 中的排序规则 utf8_unicode_ci、utf8_general_ci 的区别总结:

ci 是 case insensitive, 即 "大小写不敏感"

utf8_general_ci 不区分大小写

utf8_general_cs 区分大小写

utf8_unicode_ci 和 utf8_general_ci 对中、英文来说没有实质的差别。

utf8_general_ci 校对速度快,但准确度稍差。

utf8_unicode_ci 准确度高,但校对速度稍慢。

tf8_unicode_ci 比较准确,utf8_general_ci 速度比较快。通常情况下 utf8_general_ci 的准确性就够我们用的了,如果你的应用有德语、法语或者俄语,请一定使用 utf8_unicode_ci。

永久修改
首先修改 my.cnf 文件:
vi /etc/my.cnf
在[mysqld]下添加

init_connect='SET collation_connection = utf8_general_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_general_ci
# To ignore client information and use the default server character set
# 忽略客户端字符集信息,并使用服务器默认字符集
skip-character-set-client-handshake

image

重启 mariadb
systemctl restart mariadb
重新登录,再次查看
show variables like "%character%";show variables like "%collation%";
都已设置成 utf8。

image

用户与权限

创建用户:
CREATE USER username IDENTIFIED BY 'password';

为用户设置权限:

授予 username 用户在所有数据库上的所有权限:GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';

撤销 username 用户在所有数据库上的所有权限REVOKE ALL PRIVILEGES ON *.* FROM 'username'@'localhost';

授予 username 用户在 xxx 数据库上的所有权限:GRANT ALL PRIVILEGES ON xxx.* TO 'username'@'localhost' IDENTIFIED BY 'password';

授予 username 用户在 xxx 数据库上的 SELECT, UPDATE 权限:GRANT SELECT, UPDATE ON xxx.* TO 'username'@'localhost' IDENTIFIED BY 'password';

注意:上述命令中@localhost指的是本地,如果需要远程登录数据库,则使用@'%'

刷新权限:
FLUSH PRIVILEGES;

删除用户:
DROP USER username@localhost;

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions