-
Notifications
You must be signed in to change notification settings - Fork 1
Description
首先我们从常规的 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
先卸载系统中的 mariadb:
rpm -e --nodeps mariadb-libs-****.x86_64
查看可安装版本:
yum list mariadb*
这里要说明一下:
出于实用的目的,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 版本。
这里我们安装mariadb与mariadb-server即可。
执行命令yum install -y mariadb mariadb-server
程序会自动分析其需要的依赖并下载安装,我们静等完成就好。
到此,mariadb 安装结束。
启动配置
启动 mariadb
systemctl start mariadb
查看运行状态
systemctl status mariadb
设置开启自启
systemctl enable mariadb
密码配置
登陆数据库:
mysql -u root -p
首次安装后,root 账号默认密码为空,下面我们为 root 账号设置密码
执行命令:mysql_secure_installation
使用刚设置的密码登陆数据库:
mysql -u root -p
字符集与排序规则
接下来,让我么你看下 mariadb 数据库字符集(Character set)和排序规则(Collation):
执行:show variables like "%character%";show variables like "%collation%";
这里再普及下字符集的概念:
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",大家知道这个事情就好,再根据项目需要进行选择。
临时修改(重启后失效)
字符集
– 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重启 mariadb
systemctl restart mariadb
重新登录,再次查看
show variables like "%character%";show variables like "%collation%";
都已设置成 utf8。
用户与权限
创建用户:
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;















