数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。
所谓的“数据库”就是以一定方式存储在一起,能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。一个数据库由多个表空间(Tablespace)构成。
类型
数据库从类型上分为两类:关系型数据库 (RDB)与 非关系型数据库 (NoSQL)
关系型数据库
- MySQL
- Oracle
- PostgreSQL
- Microsoft SQL Server
其中因为历史原因,导致 MySQL 还有多个分支,比如 MariaDB 和 Percona ,他们在兼容性上存在高一致性。
非关系型数据库
- MongoDB
- Redis
- Cassandra
本文以 MySQL 及其常用分支 MariaDB 为主。
MySQL
MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,于 2008 年被 SUN 收购,后于 2009 年 SUN 整体被 Oracle 收购,MySQL成为Oracle旗下产品。
官方提供了 Enterprise (企业)和 Community (社区)版本,社区版为开源免费版本。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 之一。
版本历史
版本 | 发布时间 | 最新版本 | 上次更新时间 | 结束支持时间 |
---|---|---|---|---|
5.1 | November 14, 2008 | 5.1.73 | 2013-12-03 | 2013.12 |
5.5 | December 3, 2010 | 5.5.62 | 2018-10-22 | 2018.12 |
5.6 | February 5, 2013 | 5.6.43 | 2019-01-21 | 2021.2 |
5.7 | October 21, 2015 | 5.7.25 | 2019-01-21 | 2023.10 |
8.0 | April 19, 2018 | 8.0.14 | 2019-01-21 | 2026.4 |
安装途径
MySQL 提供四种常用安装方法:
- 编译
- 二进制(预编译)
- 包管理器
- 容器(Docker)
小贴士:安装方式并不是重点,重点在于需求!在无特殊需求的情况下推荐用二进制方式或者包管理器方式进行安装使用。
编译
包管理器
下载官方仓库扩展源
# rpm -ivh http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/mysql57-community-release-el7-10.noarch.rpm
小贴士:本文以 5.7 版本为例进行,推荐使用 5.7 版本,此版本支持新的 Innodb 引擎。
扩展部分:
查询 MySQL 的引擎
> show engines;
查看默认数据引擎
> show variables like '%storage_engine%';
安装 MySQL 社区版
# yum install mysql-community-server
启动数据库
# systemctl start mysqld
查找数据库默认密码
# grep 'password' /var/log/mysqld.log
小贴士:MySQL 5.7 新版本引入的安全特性,数据库初始密码会随机生成并写入日志文件,输出内容的最后为随机密码。
登录数据库并重置根用户密码
# mysql -uroot -pPASSWD
> alter user root@'localhost' identified by '123@VVavE.net';
小贴士:MySQL 5.7 默认安装了 validate_password
插件,会自动禁用弱密码,启用了密码严格模式,必须包含三种以上字符(大写、小写、特殊符号、数字等)且字符长度达到一定要求。
查看默认的密码审核规则
> SHOW VARIABLES LIKE 'vali%';
validate_password_length 8
# 密码的最小长度validate_password_mixed_case_count 1
# 至少要包含小写或大写字母的个数validate_password_number_count 1
# 至少要包含的数字的个数validate_password_policy MEDIUM
# 密码强度等级
其中其值可设置为0、1、2。分别对应:
【0/LOW】:只检查长度。
【1/MEDIUM】:在0等级的基础上多检查数字、大小写、特殊字符。
【2/STRONG】:在1等级的基础上多检查特殊字符字典文件,此处为1。
validate_password_special_char_count 1
# 至少要包含的个数字符的个数
要禁用此插件可以修改 MySQL 配置文件,在 my.cnf
中的 [mysqld]
标签下添加一行即可。
validate_password=off
MariaDB
MariaDB 数据库管理系统是 MySQL 的一个分支,主要由开源社区在维护,采用 GPL 授权许可。开发这个分支的原因之一是:甲骨文公司收购了 MySQL 后,有将 MySQL 闭源的潜在风险,因此社区采用分支的方式来避开这个风险。
MariaDB 的目的是完全兼容 MySQL,包括 API 和命令行,使之能轻松成为 MySQL 的代替品。在存储引擎方面,10.0.9 版起使用 XtraDB(名称代号为 Aria )来代替 MySQL 的 InnoDB 。
MariaDB 由 MySQL 的创始人米卡埃尔·维德纽斯(Ulf Michael Widenius)主导开发,他早前曾以10亿美元的价格,将自己创建的公司 MySQL AB 卖给了 SUN,此后,随着 SUN 被甲骨文收购,MySQL 的所有权也落入 Oracle 的手中。MariaDB 名称来自其女儿玛丽亚(英语:Maria)的名字。
版本更替
MariaDB直到5.5版本,均依照 MySQL 的版本。因此,使用 MariaDB 5.5 的人会从 MySQL 5.5 中了解到 MariaDB 的所有功能。
从 2012年11月12日 起发布的10.0.0版开始,不再依照 MySQL 的版号。10.0.x 版以5.5版为基础,加上移植自 MySQL 5.6 版的功能和自行开发的新功能。
截止至今日
版本 | 原始发布时间 | 最新版本 | 发布日期 | 状态 |
---|---|---|---|---|
5.1 | 2009年10月29日 | 5.1.67 | 2013年1月30日 | Stable (GA) |
5.2 | 2010年4月10日 | 5.2.14 | 2013年1月30日 | Stable (GA) |
5.3 | 2011年7月26日 | 5.3.12 | 2013年1月30日 | Stable (GA) |
5.5 | 2012年2月25日 | 5.5.61 | 2018年7月31日 | Stable (GA) |
10.0 | 2012年11月12日 | 10.0.36 | 2018年8月1日 | Stable (GA) |
10.1 | 2014年6月30日 | 10.1.35 | 2018年8月7日 | Stable (GA) |
10.2 | 2016年4月18日 | 10.2.16 | 2018年6月26日 | Stable (GA) |
10.3 | 2017年4月16日 | 10.3.8 | 2018年7月2日 | Stable (GA) |
10.4 | 2018年11月9日 | 10.4.0 | 2018年11月9日 | Alpha |
安装
与 MySQL 一致,MariaDB 也提供四种常用安装方法:
- 编译
- 二进制(预编译)
- 包管理器
- 容器(Docker)
小贴士:安装方式并不是重点,重点在于需求!在无特殊需求的情况下推荐用二进制方式或者包管理器方式进行安装使用。
添加包管理源
点击官网,选择发行版,然后复制右侧的仓库信息即可使用。
CentOS
新建仓库文件
# vim /etc/yum.repos.d/MariaDB.repo
写入以下内容
# MariaDB 10.3 CentOS repository list
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.3/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
也可以使用官方提供的仓库部署脚本进行一键修改
# curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
若在 Debian 及其衍生版本时执行命令时出现以下报错
gpg: failed to start the dirmngr '/usr/bin/dirmngr': No such file or directory
gpg: connecting dirmngr at '/run/user/0/gnupg/d.skhskby49k4uurn81jp5iesj/S.dirmngr' failed: No such file or directory
gpg: keyserver receive failed: No dirmngr
[error] Failed to add trusted package signing keys.
请安装缺少的组件即可,然后需要重新执行脚本,并删除多余的仓库文件 /etc/apt/sources.list.d/mariadb.list.old_1
。
# apt install dirmngr
# rm -rf /etc/apt/sources.list.d/mariadb.list.old_1
安装客户端及服务端
$ sudo yum install MariaDB-server MariaDB-client
Debian
安装所需依赖
# apt-get install software-properties-common dirmngr
配置认证秘钥
# apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8
新建仓库文件
# vim /etc/apt/sources.list.d/MariaDB.list
写入以下内容
# MariaDB 10.3 repository list
# http://downloads.mariadb.org/mariadb/repositories/
deb [arch=amd64,i386,ppc64el] http://sfo1.mirrors.digitalocean.com/mariadb/repo/10.3/debian stretch main
deb-src http://sfo1.mirrors.digitalocean.com/mariadb/repo/10.3/debian stretch main
安装客户端及服务端
$ sudo apt-get update
$ sudo apt-get install mariadb-server
修改默认字符集
安装 MariaDB 后,使用会遇到一个问题:中文乱码,这是因为 MariaDB 的默认字符集是 latin1 ,若建立数据库时不强制指定字符集,则会使用系统预制的默认字符集。
修改 my.cnf 即可,编辑 /etc/mysql/mariadb.cnf
,在 [mysqld]
标签下加入/取消以下两行(注释)(若已经开始使用数据库且忘记修改,请修改后重启数据库即可生效。)
[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci
在 [client]
标签下取消以下一行注释(若不存在请加入即可)。
[client]
# Default is Latin1, if you need UTF-8 set this (also in server section)
default-character-set = utf8
小贴士:推荐使用utf8mb4
替换utf8
为默认字符集,utf8mb4
为utf8
的超集,支持 Emoji 表情,对博客、论坛等需要表情支持的网站有极大的优势。
以上操作仅对新建立的数据库生效,已存在的数据需要在数据库内重新进行修改。
查看当前字符集
MariaDB [(none)]> show variables like 'character_set%';
修改全局默认字符集
SET GLOBAL character_set_client = utf8;
SET GLOBAL character_set_connection = utf8;
SET GLOBAL character_set_database = utf8;
SET GLOBAL character_set_results = utf8;
SET GLOBAL character_set_server = utf8;
启动并初始化
配置数据库开机自启
# systemctl enable mysqld
启动数据库
# systemctl start mysqld
初始化数据库
# '/usr/bin/mysql_secure_installation'
若只想设定根密码
# '/usr/bin/mysqladmin' -u root password 'NEW_PASSWORD'
小贴士:替换 NEW_PASSWORD 为想设为的密码即可。
基于 GTID 的主从复制
MySQL 的主从复制有两种模式:基于日志点的复制、基于 GTID 的复制。两种模式都依赖 MySQL 的二进制日志
从 MariaDB 10.0.2 版本开始,默认支持 GTID 模式的复制。
GTID(Global Transaction ID) 全局事务ID,保证主库上的每个提交的事务在集群中都可以拥有一个唯一的 ID 号码。
GTID 整体由三段组成(中间用'-'隔开):Domain_ID-Server_ID-Sequence_Number
- Domain ID:域ID,单主库模式下,此数值默认为 0 ;多源复制用此部分区分多个来源。
- Server ID:服务器ID,与标准复制模式相同
- Sequence-Number:事务序号
Percona
附录
参考链接
本文由 柒 创作,采用 知识共享署名4.0
国际许可协议进行许可。
转载本站文章前请注明出处,文章作者保留所有权限。
最后编辑时间: 2019-01-03 11:55 AM