数据库从入门到放弃 - MySQL 系
后知后觉 暂无评论

数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。

所谓的“数据库”就是以一定方式存储在一起,能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。一个数据库由多个表空间(Tablespace)构成。

类型

数据库从类型上分为两类:关系型数据库 (RDB)与 非关系型数据库 (NoSQL)

关系型数据库

其中因为历史原因,导致 MySQL 还有多个分支,比如 MariaDB 和 Percona ,他们在兼容性上存在高一致性。

非关系型数据库

本文以 MySQL 及其常用分支 MariaDB 为主。

MySQL

MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,于 2008 年被 SUN 收购,后于 2009 年 SUN 整体被 Oracle 收购,MySQL成为Oracle旗下产品。

官方提供了 Enterprise (企业)和 Community (社区)版本,社区版为开源免费版本。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 之一。

版本历史

版本发布时间最新版本上次更新时间结束支持时间
5.1November 14, 20085.1.732013-12-032013.12
5.5December 3, 20105.5.622018-10-222018.12
5.6February 5, 20135.6.432019-01-212021.2
5.7October 21, 20155.7.252019-01-212023.10
8.0April 19, 20188.0.142019-01-212026.4

安装途径

MySQL 提供四种常用安装方法:

小贴士:安装方式并不是重点,重点在于需求!在无特殊需求的情况下推荐用二进制方式或者包管理器方式进行安装使用。

编译

包管理器

下载官方仓库扩展源

# 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%';
其中其值可设置为0、1、2。分别对应:
【0/LOW】:只检查长度。
【1/MEDIUM】:在0等级的基础上多检查数字、大小写、特殊字符。
【2/STRONG】:在1等级的基础上多检查特殊字符字典文件,此处为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.12009年10月29日5.1.672013年1月30日Stable (GA)
5.22010年4月10日5.2.142013年1月30日Stable (GA)
5.32011年7月26日5.3.122013年1月30日Stable (GA)
5.52012年2月25日5.5.612018年7月31日Stable (GA)
10.02012年11月12日10.0.362018年8月1日Stable (GA)
10.12014年6月30日10.1.352018年8月7日Stable (GA)
10.22016年4月18日10.2.162018年6月26日Stable (GA)
10.32017年4月16日10.3.82018年7月2日Stable (GA)
10.42018年11月9日10.4.02018年11月9日Alpha

安装

与 MySQL 一致,MariaDB 也提供四种常用安装方法:

小贴士:安装方式并不是重点,重点在于需求!在无特殊需求的情况下推荐用二进制方式或者包管理器方式进行安装使用。

添加包管理源

点击官网,选择发行版,然后复制右侧的仓库信息即可使用。

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 为默认字符集,utf8mb4utf8 的超集,支持 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

Percona

附录

参考链接

本文撰写于一年前,如出现图片失效或有任何问题,请在下方留言。博主看到后将及时修正,谢谢!
禁用 / 当前已拒绝评论,仅可查看「历史评论」。