考虑到《可能是目前最详细简明的CentOS7安装与管理教程》一文太长,以及简书目前不支持导航目录,阅读起来过于不便,故对其分解成《CentOS7最小化安装后要做的事》系列,方便以后有针对性的丰富内容。
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匹配的所有版本的包
1.1 安装
首先查看系统是否安装过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安装结束。
1.2 启动配置
启动mariadb:systemctl start mariadb
查看运行状态:systemctl status mariadb
设置开启自启:
systemctl enable mariadb
1.3 密码配置
登陆数据库:mysql -u root -p
首次安装后,root账号默认密码为空,下面我们为root账号设置密码
执行命令:
mysql_secure_installation
使用刚设置的密码登陆数据库:
mysql -u root -p
1.4 字符集与排序规则
接下来,让我么你看下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。
1.5 用户与权限
创建用户: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;