Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
gaoac opened this issue Apr 6, 2020 · 0 comments
Labels
Linux linux服务器知识 MariaDB

Comments

@gaoac
Copy link
Owner

gaoac commented Apr 6, 2020

首先我们从常规的 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;

@gaoac gaoac added Linux linux服务器知识 MariaDB labels Apr 6, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Linux linux服务器知识 MariaDB
Projects
None yet
Development

No branches or pull requests

1 participant