源码编译mysql数据库

提起数据库相信大家都已经很耳熟了,但是你真的了解它吗?
接下来咱们就了解一下mysql数据库吧。
首先大家都知道程序=数据+指令
可是数据都存储在哪里呢?
数据存储肯定要通过硬盘来惊醒存储,自然少不了IO交互:
i/o:
提供数据 保存数据 提供文件 交互式输入 持久存储中
存在的问题:
1.文件数据冗余和不一致性
比如公司一张工资表和人事表里面肯定有重复的地方,那么这些重复的条目就形成了数据冗余,
2.数据访问困难
3.数据孤立
4.完整性问题
比如张三有7K元钱,他向李四转账5K,突然断电了,那么系统刚刚从李四账户中划走5K,但是这5K并没有进入李四的账户中,这应该如何解决呢?
5.原子性问题
6.并发性问题
比如张三账户上有7K元,张三通过银行柜台查询知道自己的账户有7K,张三媳妇通过ATM查询得知账户有7K,那么他们同时取走7K,这时数据库如何记录,那么谁有会取到钱呢?
带着种种疑问,我们来简单了解一下DBMS(数据库管理系统)
首先数据库分为4种。
1.层次型:一个子节点只有一个父节点,一个父节点可以有多个子节点
2.网状型:结构复杂,管理不易,将数据库网住的同时也将程序员们网在了一起
3.关系型:将数据组成二维关系
4.对象型:面向对象的关系型数据库
我们都过搜索的经历吧,由于数据的过分庞大,大大增加了搜索的时间,但是考虑过这样的问题码?因为在搜索工作是由CPU来进行运算的,搜索范围中的全部数据需要全部加载至内存才能被cpu读取,这样搜索的时间大大增加了。
数据库就是在文件系统中的一种逻辑性存储,将数据切割成片,每片可以独立的工作。
其次
DBMS:数据库管理系统
RDBMS:常见的关系型数据库
提起数据库就不得不提起早前的三巨头:
Sysbase —>microsoft:SQLserver
Informix —>IBM:DB2
Oracle —>mysql (收购sun公司)
这些都是基于C/S架构的mysql–mysqld基于mysql协议完成
sqlite是非C/S架构的数据库
通常用于嵌入式系统.
SQL:Structure Query Language
DDL:CREATE DROP ALTER
DML:SELECT INSERT UPDATE DELETE
DCL:GRANT REVOKE
事务:ACID
A:原子性
C:一致性
I:隔离性
D:持久性
隔离:隔离的级别
read uncommitted:读未提交
read committed:读已提交
repeatable read:可重读
serializable:串行化
MySQL:存储化引勤
MyISAM:无事务,索引数据分离 非聚集索引
InnoDB:事务型,索引数据不分离 聚集索引
关系型数据库设计前三范式
字段的原子性
主键
非主属性不允许重复
关系数据库的约束:主键、外键、惟一键、条件约束
mysql的基本架构
在这里插入图片描述
数据库模块高层次图在这里插入图片描述
接下来就让我们开始编译mysql吧,编译mysql之前需要安装cmake,cmake可以yum安装,也可以编译安装,在这里我们选择编译安装cmake,首先我们先下载cmake

[root@bogon wang161x]# wget https://cmake.org/files/v3.10/cmake-3.10.2.tar.gz

在这里插入图片描述
这个包大小只有7M左右

[root@bogon wang161x]# tar xf cmake-3.10.2.tar.gz
[root@bogon wang161x]# cd cmake-3.10.2/
[root@bogon cmake-3.10.2]# ./bootstrap

在这里插入图片描述

[root@bogon cmake-3.10.2]# make && make install

在这里插入图片描述
camke的特点就是在安装的过程中可以显示安装的进度,更像window中安装软件的风格!
稍等3、4分钟后就结束了,此时我们来进行安装mysql
首先下载mysql源码包,我们在163镜像网站上下载,大小约为27M左右。

[root@bogon cmake-3.10.2]# wget http://mirrors.163.com/mysql/Downloads/MySQL-5.5/mysql-5.5.59.tar.gz

在这里插入图片描述
下载完毕开始解压gz文件

[root@bogon cmake-3.10.2]# tar xf mysql-5.5.59.tar.gz
[root@bogon cmake-3.10.2]# cd mysql-5.5.59/[root@bogon mysql-5.5.59]# mkdir /mydata/data -pv
mkdir: 已创建目录 "/mydata"
mkdir: 已创建目录 "/mydata/data"
[root@bogon mysql-5.5.59]# groupadd -r mysql
[root@bogon mysql-5.5.59]# useradd -g mysql -r -d /mydata/data mysql
[root@bogon cmake-3.10.2]#cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/mydata/data/ -DSYSCONFDIR=/etc -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_LIBWRAP=0 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DENABLED_LOCAL_INFILE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
/home/wang161x/cmake-3.10.2/mysql-5.5.59/CMakeFiles/CMakeTmp/CheckSymbolExists.c:2:25: 致命错误:openssl/sha.h:没有那个文件或目录
#include <openssl/sha.h>
^
编译中断。
gmake[1]: *** [CMakeFiles/cmTC_4be0f.dir/CheckSymbolExists.c.o] 错误 1
gmake[1]: 离开目录“/home/wang161x/cmake-3.10.2/mysql-5.5.59/CMakeFiles/CMakeTmp”
gmake: *** [cmTC_4be0f/fast] 错误 2

在这里插入图片描述
这是缺少相关的devel包此时我们安装编译需要的devel包

[root@bogon mysql-5.5.59]# yum -y install autoconf automake libtool cmake ncurses-devel openssl-devel lzo-devel zlib-devel gcc gcc-c++

然后重新cmake

[root@bogon mysql-5.5.59]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/mydata/data -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_SSL=system -DMYSQL_ZLIB=system -DMYSQL_LIBWRAP=0 -DMYSQL_UNIX_ADDR=/TMP/MYSQL.SOCK -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci

在这里插入图片描述
在这里插入图片描述
如上图编译完成。
然后make&&make install

[root@bogon mysql-5.5.59]# make && make install

在这里插入图片描述
如上图,在make的过程中也有进度显示
接下来开始配置mysql的脚本文件以及服务文件
将当前文件中的所有文件的属主属组改为root:mysql

[root@bogon mysql-5.5.59]# chown -R root:mysql ./*
[root@bogon mysql-5.5.59]# chown -R mysql:mysql /mydata
[root@bogon mysql-5.5.59]# chown -R mysql:mysql /mydata/data/
[root@bogon mysql-5.5.59]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data/
bash: scripts/mysql_install_db: 权限不够
[root@bogon mysql-5.5.59]#

出现错误权限不够,分析一下应该初始化脚本没有权限,所以对scripts/mysql_install_db+x操作

[root@bogon mysql-5.5.59]# chmod +x scripts/mysql_install_db
[root@bogon mysql-5.5.59]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data/

FATAL ERROR: Could not find ./bin/my_print_defaults

If you compiled from source, you need to run 'make install' to
copy the software into the correct location ready for operation.

If you are using a binary release, you must either be at the top
level of the extracted archive, or pass the --basedir option
pointing to that location.

[root@bogon mysql-5.5.59]#

解决了上一个错误,又出现一个新的错误:Could not find ./bin/my_print_defaults,其实这个文件是存在的,只不过这个文件是在安装目录下的,而初始化脚本中使用的是相对路径,所以我们要在安装路径运行脚本,也就是/usr/local/mysql中

[root@bogon mysql-5.5.59]# chmod +x scripts/mysql_install_db
[root@bogon mysql-5.5.59]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data/

在这里插入图片描述
OK了,然后复制脚本,调整开机启动复制配置文件,配置环境变量,修改配置文件

[root@bogon mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@bogon mysql]# chkconfig --add mysqld
[root@bogon mysql]# cp support-files/my-large.cnf /etc/my.cnf
cp:是否覆盖"/etc/my.cnf"? y
[root@bogon mysql]# vim /etc/my.cnf
socket = /tmp/mysql.sock
[mysqld]
socket = /tmp/mysql.sock
thread_concurrency = 4
datadir = /mydata/data

将上述代码添加或修改为上图即可

vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin:$PATH
[root@bogon mysql]# chmod +x /etc/profile.d/mysql.sh
[root@bogon mysql]# source /etc/profile
[root@bogon mysql]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.59-log Source distribution

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

至此mysql完成编译,Server version: 5.5.59-log Source distribution版本为5.5.59源码版本,接下来jiukaiishi我们的mysql之路吧!

发布了56 篇原创文章 · 获赞 1 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_41363156/article/details/84490825