此文章参考
老男孩教育资料安装部分参考:
https://blog.csdn.net/hoboher…
1 数据库介绍
1. 1 什么是数据库
简单说,数据库就是一个存放数据库的仓库,这个仓库是按照一定的数据结构 (数据结构是指数据的组织形式或数据之间的联系) 来组织、存储的,我们可以通过数据库提供的多种方法来管理数据库里的数据。
然而现在的数据库不再仅仅是存储和管理数据了,而转变成用户所需要的各种数据管理的方式。数据库有很多种类和功能,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。
1.2 数据库的种类
按照早期的数据库理论,比较流行的数据库有三种,分别为层次式数据库、网络式数据库和关系型数据库,而当今互联网中,最常用的数据库模型主要是两种,即关系型数据库和非关系型数据库(NOSQL)。
1.2.1 关系型数据库介绍
(1)关系型数据库由来
虽然网状数据库和层次数据库已经很好的解决了数据的集中和共享问题,但是再数据独立性和抽象级别上仍有很大欠缺。用户在对这两种数据库进行存取时,仍然需要明确数据的存储结构,指出存取路径。而关系数据库就可以较好地解决这些问题。
(2)关系数据库介绍
关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)并使用结构化查询语言SQL语句进行查取的。关系型数据库的产品有MySQL和Oracle等。
1.2.2 非关系型数据库介绍
(1)非关系型数据库诞生背景
非关系型数据库被成为NoSQL数据库,NoSQL的本意是 “Not OnlySQL”,指的是非关系型数据库。NoSQL的产生并不是要彻底地否定关系型数据库,而是作为传统关系型数据库的一个有效补充。NoSQL在特定的场景下可以发挥出难以想象的高效率和高性能。
由于互联网 WEB2.0 的网站的兴起,传统的关系型数据库在应对 web2.0 的网站,特别对于规模日益扩大的海量数据,超大规模和高并发的微博、微信、SNS类型的 web2.0 纯动态网站已经显得力不从心,暴露了很多难以克服的问题。于是开始出现了大批针对特定场景,以高性能和使用便利为目的的功能特异化的数据库产品,NoSQL(非关系型)数据库,并得到了非常迅速的发展。
1.2.2.1 非关系型数据库种类
(1)键值(Key-Value)存储数据库
键值数据库就类似传统语言中使用的哈希表。可以通过 key 来添加、查询或者删除数据,因为使用 key 主键访问,所以会获得很高的性能及扩展性。
键值(Key-Value)数据库主要就是使用一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value 模型对于 IT 系统来说的优势在于简单、易部署、高并发。
典型产品:Memcached、Redis、MemcacheDB、Berkeley DB
(2)列存储(Column-oriented)数据库
这种数据库大环境较差,一般都是大公司在用,薪资15K以下可以先不考虑学习,因为用的不多。
列存储数据库将数据存储在列族(column family)中,一个列族存储经常被一起查询的相关数据。
这部分数据库通常是用来应对分布式存储的海量数据。键依然存在,但是他们的特点是指向了多个列。这些列是由列家族来安排的。
典型产品:Cassandra,HBase
(3)面向文档 (Document-Oriented)数据库
(4)面向图形
这里详细了解 Memcached、Redis、MongoDB
互联网企业去 IOE ,Oracle适合 传统大企业,大公司,政府,金融,证券
1.3.2 MySQL数据库
MySQL 数据库是一个中小型关系型数据库管理系统,软件开发者为瑞典 MySQL AB 公司。由于体积小、速度快、总体拥有成本低,尤其是开放源代码这一特点,许多大中小型网站也为了降低成本总体拥有成本而选择了 MySQL 作为网站数据库,甚至淘宝网也选择启用 ORACLE 而更换为更开放的 MySQL.
应用范围:大中小型网站中 ,互联网领域,大中小型网站,游戏公司,电商平台等等。
1.3.3 Memcached
Memcached 是一个开源的、高性能的、具有分布式内存对象的缓存系统。通过它可以减轻数据库负载,加速动态的 web 应用,最初版本由 LiveJournal 的 Brad Fitzpatrick 在2003年开发完成。目前全球有非常多的用户都在使用它来构建自己的大负载网站或提高自己的高访问网站的响应速度。
Memcache 是这个项目的名称,而 Memcached 是服务器端的主程序文件名
缓存一般用来保存一些经常被存取的对象或数据,Memcached 是一种纯内存缓存系统,把经常存取的对象或数据缓存在 memcached 的内存中,这些数据被程序通过 API 的方式存取,为了解决 Memcached 重启丢失数据的问题,新浪开发了一个开源项目 Memcachedb。
1.3.4 Redis
和 Memcached 类似,redis 也是 Key-Value ,自带持久化,主从、集群等等,大公司用的多。
2 MySQL简介
2.1 MySQL 的优点
(1)MySQL 性能卓越,服务稳定,很少出现异常宕机。
(2)MySQL 开放源代码且无版权制约,自主性及使用成本低。
(3)MySQL 历史悠久,社区及用户非常活跃,遇到问题,可以寻求帮助。
(4)MySQL 软件体积小,安装使用简单,并且易于维护,安装及维护成本低。
(5)MySQL 品牌口碑效应,是的企业无需考虑就直接用之,LAMP,LEMP 流行架构。
(6)MySQL 支持多种操作系统,提供多种 API 接口,支持多种开发语言,特别对流行的 PHP 语言有很好的支持。
GA 版是软件的正式发布版本
2.2 MySQL 版本选择最终建议
1)稳定版:选择开源的社区版的稳定版本 GA 版本
2)产品线:可以选择 5.1 或 5.5。互联网公司主流 5.5,其次是 5.1 和 5.6
3)选择 MySQL 数据库 GA 版发布后 6 个月以上的 GA 版本
4)要选择前后几个月没有大的BUG修复的版本,而不是大量修复 BUG 的集中版本
5)最好向后较长时间没有更新发布的版本
6)要考虑开发人员开发程序使用的版本是否兼容你选的版本
7)作为内部开发测试数据库环境,跑大概 3~6 个月的时间
8)优先企业非核心业务采用新版本的数据库 GA 版本软件
9)向 DBA 高手请教
11)经过上述工序之后,若是没有重要的功能 BUG 或性能瓶颈,则可以开始考虑作为任何业务数据服务的后端数据库软件
3 MySQL的安装
MySQL分为商业版和社区版,我使用的是社区版。
3.1 下载 MySQL
可以进入 MySQL 的官网下载社区版的二进制包
下载连接:
https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.22.tar.gz
重要
- MySQL依赖于
libaio
库。如果未在本地安装此库,则数据目录初始化和后续服务器启动步骤将失败。如有必要,使用适当的软件包管理器进行安装。
shell> yum search libaio # search for info
shell> yum install libaio # install library
- 对于MySQL 5.7.19及更高版本:*对通用Linux版本添加了对非统一内存访问(NUMA)的支持,该版本现在依赖于
libnuma
库; 如果您的系统上尚未安装该库,请使用系统的软件包管理器来搜索并安装它(有关一些示例命令,请参阅最后一个项目符号)。
3.2 开始安装
删除Mariadb的遗留配置文件
rm -rf /etc/my.cnf
创建用户
useradd -s /sbin/nologin -M mysql
修改权限
chown -R mysql.mysql /opt/mysql
安装依赖
shell> yum -y install gcc gcc-devel gcc-c++ gcc-c++-devel autoconf* automake* zlib* libxml*ncurses-devel ncurses libgcrypt* libtool* cmake openssl openssl-devel bisonbison-devel perl-Data-Dumper boost boost-doc boost-devel
解压 MySQL 源码包
shell> cd /opt/
shell> tar zxf mysql-5.7.22.tar.gz
shell> cd mysql-5.7.22
安装 boost
5.7版本更新之后有很多变化,比如现在安装必须要安装这个boost库了
下载链接:
安装命令:
shell> mkdir /opt/mysql-5.7.22/boost/
shell> cp boost_1_59_0.tar.gz /opt/mysql-5.7.22/boost/ ##这里只能用这个版本的boost
解压等操作编译的时候程序会做,这里只需把包拷贝到这里即可
编译
要先切换到mysql的源码目录里去
shell> cmake \
-DBUILD_CONFIG=mysql_release \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_INSTALL_PREFIX=/opt/mysql \
-DMYSQL_DATADIR=/opt/mysql/data \
-DSYSCONFDIR=/opt/mysql/conf \
-DMYSQL_UNIX_ADDR=/opt/mysql/tmp/mysql.sock \
-DSYSTEMD_PID_DIR=/opt/mysql \
-DMYSQL_USER=mysql \
-DWITH_SYSTEMD=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_DEBUG=0 \
-DMYSQL_MAINTAINER_MODE=0 \
-DWITH_SSL:STRING=bundled \
-DWITH_ZLIB:STRING=bundled \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=./boost
参数介绍
shell> cmake\
-DBUILD_CONFIG=mysql_release\ #此选项使用Oracle使用的相同构建选项配置源分发,以生成官方MySQL版本的二进制分发。
-DCMAKE_BUILD_TYPE=RelWithDebInfo \ #要生成的构建类型 = 启用优化并生成调试信息。这是默认的MySQL构建类型。
-DCMAKE_INSTALL_PREFIX=/opt/mysql\ #选项表示基本安装目录。
-DMYSQL_DATADIR=/opt/mysql/data \ #MySQL数据目录的位置。
-DSYSCONFDIR=/opt/mysql/conf \ #默认my.cnf选项文件目录。
-DMYSQL_UNIX_ADDR=/opt/mysql/tmp/mysql.sock \ #服务器侦听套接字连接的Unix套接字文件路径。这必须是绝对路径名。默认是/tmp/mysql.sock。
-DSYSTEMD_PID_DIR=/opt/mysql \ #当MySQL由systemd管理时,在其中创建PID文件的目录的名称。默认是 /var/run/mysqld; 这可能会根据INSTALL_LAYOUT值隐式更改 。
-DMYSQL_USER=mysql \ #指定MySQL的启动用户
-DWITH_SYSTEMD=1 \ #安装systemd支持文件
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_TCP_PORT=3306 \ #配置 MySQL 监听的端口号
-DENABLED_LOCAL_INFILE=1 \ #使mysql客户端具有load data infile的功能,该功能具有安全隐患 load data infile语句从一个文本文件中以很高的速度读入一个表
-DENABLE_DOWNLOADS=1 \ #googlemock发行版的路径,用于基于Google Test的单元测试。=1,CMake将从GitHub下载发行版。
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \ #服务器字符集
-DDEFAULT_COLLATION=utf8_general_ci \ #服务器排序规则
-DWITH_DEBUG=0 \ #不包含调试支持。
-DMYSQL_MAINTAINER_MODE=0 \ #是否启用MySQL维护者特定的开发环境。如果启用,此选项会导致编译器警告变为错误。
-DWITH_SSL:STRING=bundled \
-DWITH_ZLIB:STRING=bundled \
-DDOWNLOAD_BOOST=1 \ #是否下载Boost库。默认是 OFF。
-DWITH_BOOST=./boost #指定Boost库目录位置。
* 注
如果想了解更多的参数或者查看以上参数更详细的信息,请访问 MySQL 官网查看
查看编译是否成功
shell> echo $? ##为0就说明编译成功
开始安装 MySQL
shell> make && make install
这个过程比较漫长,耐心等待一下
3.3 相关配置
添加 systemd 服务控制
cp ./scripts/mysqld.service /usr/lib/systemd/system
添加环境变量
cat > /etc/profile.d/mysql.sh << EOF
PATH=/opt/mysql/bin:$PATH
export PATH
EOF
source /etc/profile
空密码初始化数据库
rm -rf /opt/mysql/data/*
/opt/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql --datadir=/opt/mysql/data/
配置启动MySQL
systemctl enable mysqld.service
systemctl daemon-reload ##刷新 mysqld.service 的修改(此博客并未修改)
systemctl start mysqld.service
systemctl status mysqld.service