MySQL
(一)关系型数据库基础
(二)MySQL安装
(三)管理数据库和表
(四)用户和权限管理
(五)函数,存储过程和触发器
(六)MySQL架构
(七)存储引擎
(八)MySQL服务器选项,系统和状态变量
(九)优化查询和索引管理
(十)锁和事务管理
(十一)日志管理
(十二)备份还原
(十三)MySQL集群
(一)关系型数据库基础
1)数据库管理系统
1)数据库:database
-
数据库时数据的汇集,它以一定的组织形式存储于介质上:
数据库不一定均是放在硬盘中的,也可能存放于内存中。一定的组织形式存储并非全部使用文件存储形式。数据库的含义是将数据汇总起来,以什么形式不重要。因此数据可以是各种形式,可以是文字图片音频等。MySQL数据库一般存放的还是文字(字符串)视频之类的在MySQL中存放的是所在的路径–>强化性能。 -
DBMS:管理数据库的系统软件,DBMS实现数据库的各种功能、数据库的核心:
因为数据库存放的方式各种各样(内存方式存放,磁盘方式存放(二进制直接存放和文件等各种方式存放)),user直接访问时:user需要知道数据库存放的形式。而且当多个user同时访问时,还可能带来数据安全问题(因为让用户直接接触数据,用户可能会直接破坏数据。)因此数据库通常以文件方式存放但是数据库的文件是不可能让用户直接访问的。用户访问是通过DBMS的client去访问数据库。 -
DBA:负责数据库的规划、设计、协调、维护和管理工作
-
DBMS图示:
应用程序指以数据库为基础的应用程序
-
DBMS的优点:
①相互关联的数据的集合
②较少的数据冗余
③程序与数据相互独立
④保证数据的安全、可靠
⑤最大限度地保证数据的正确性
⑥数据可以并发使用并能同时保证一致性 -
DBMS的基本功能:
①数据定义:存放至数据库中的到底有哪些内容
②数据处理:对数据增删改查等
③数据安全
④数据备份
2)关系型数据库
2-1)关系型数据库:
- RDBMS即关系数据库管理系统(Relational Database Management System)
- 关系:关系就是二维表,其中:表中的行、列次序不重要
- 行row:表中的每一行,又称为一条记录
- 列column:表中的每一列,称为属性,终端
- 主键primary key:用于唯一确定一个记录的字段
- 域domain:属性的取值范围
行:记录 ==> row(行)、record(记录)
列:属性、域、字段 ==> column(列)、field(域)、domain(域)、
主键:一个表只有一个主键,此字段所有记录必须唯一,而且不能为空、
复合主键是多个字段==>即多个字段组合成一个主键
2-2)常见的关系型数据库种类:
- MySQL:MySQL,MariaDB,Percona Server
- PostgreSQL: 简称为pgsql,EnterpriseDB
- Oracle
- MSSQL
- DB2
- 数据库的使用排名:https://db-engines.com/en/ranking
SQL:关系型数据库使用的标准语言 < 关系型数据库 >
NOSQL:Not Only SQL < 非关系型数据库 >
eg:redis ==> NOSQL可以解决SQL性能不佳的问题
2-3)关系型数据库的规范化
-
数据库规范化:
RDMBS设计范式基础概念:设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,不同的规范要求被称为不同范式,各种范式呈递次规范,越高的范式数据库冗余越小。 -
目前关系数据库有六种范式:
第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF),一般数据库只需满足第三范式(3NF)即可。 -
第一范式:
1NF:无重复的列,每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性,确保每一列的原子性。除去同类型的字段,就是无重复的列。
说明: 第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。
不满足第一范式的表范例:
name age course 但是课程有多个(比如语数外+选修课程)
此时构建学生信息和对应的课程时:
name age course1 course2 ...(不满足列的原子性)
强行放在一张表时:
name age course
其中课程多,选修课还不一样—(不满足一个属性为单值)
因此拆表:分成学生信息表和课程表,
==>对应关系就是具体学生具有课程
- 第二范式:
2NF:属性完全依赖于主键,第二范式必须先满足第一范式,要求表中的每个行必须可以被唯一地区分,通常为表加上每行的唯一标识PK,非PK的字段需要与整个PK有直接相关性。
不满足第二范式的表范例:
此表包括以下字段:
其中主键=name+city(假设name+city可以完全区分一个人)
name age gender city phone-area-code (电话区号)
这些字段中其中电话区号与城市(主键的一部分)是依赖关系的,与主键不是完全
的依赖关系
- 第三范式:
3NF:**属性不依赖于其它非主属性,满足第三范式必须先满足第二范式。**第三范式要求一个数据表中不包含已在其它表中已包含的非主关键字信息,非PK的字段间不能有从属关系。
不满足第三范式的表范例:
id设为主键,
id name age gender city phone-area-code (电话区号)
电话话区号与城市(非主键)是依赖关系的,不依赖于主键
-
注意: 范式的实现的优势在于数据规范,不会出现数据冗余,但是满足范式就会被迫将表拆分,然后查询时有涉及表的合成,影响性能,增加了查询的复杂度,所以有时为了实现高性能会故意的违反2NF和3NF。
-
范式就是设计数据库的规范,设计数据库时非常困难的,每个数据库中包含众多的表,每个表应该包含的字段是和实际的业务挂钩的,只有在了解业务生成需求的情况下才能去更好的设计表。(运维不涉及设计数据库,维护和管理数据库,和数据库的性能好坏)
2-4)SQL概念
- SQL: Structure Query Language 结构化查询语言
SQL解释器:
数据存储协议:应用层协议,C/S
SQL:关系型数据库使用的标准语言 <SQL是标准规范>
- S:server, 监听于套接字,接收并处理客户端的应用请求
- C:Client
客户端程序接口
CLI
GUI
应用编程接口
ODBC:Open Database Connectivity
JDBC:Java Data Base Connectivity
2-5)关系型数据的相关的基本概念
-
约束:constraint,表中的数据要遵守的限制
①主键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行;必须提供数据,即NOT NULL,一个表只能有一个。②惟一键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行;允许为NULL,一个表可以存在多个。
③外键:一个表中的某字段可填入的数据取决于另一个表的主键或唯一键已有的数据。
④检查:字段值在一定范围内(eg:domain)
-
索引:将表中的一个或多个字段中的数据复制一份另存,并且按特定次序排序存储。
-
关系运算:select(查询)
选择:挑选出符合条件的行
投影:挑选出需要的字段
连接:表间字段的关联
2-6)关系数据库的数据模型
- 数据抽象:
物理层:数据存储格式,即RDBMS在磁盘上如何组织文件
逻辑层:DBA角度,描述存储什么数据,以及数据间存在什么样的关系
视图层:用户角度,描述DB中的部分数据
物理层:不同的数据库管理系统在磁盘上存放数据的形式是不一样的,比如:MySQL和Oracle 在磁盘上存放数据的形式就不一样。
逻辑层:一个数据库中包含哪些表,表中有哪些字段?表和表之间的关系。
视图层:只能看到用户能看到的信息(部分信息)。eg(user在商品数据库中只能看到售价看不到进价)
运维关注:物理层和逻辑层
- 关系模型的分类:
关系模型
基于对象的关系模型
半结构化的关系模型:XML数据
(二)MySQL安装
1)MySQL数据库系列
-
MySQL数据库系列
mysql
mariadb
percona -
官方网址:
https://www.mysql.com/
http://mariadb.org/
https://www.percona.com -
官方文档
https://dev.mysql.com/doc/
https://mariadb.com/kb/en/
https://www.percona.com/software/mysql-database/percona-server -
版本演变:
MySQL:5.1 --> 5.5 --> 5.6 --> 5.7 -->8.0
MariaDB:5.5 -->10.0–> 10.1 --> 10.2 --> 10.3 --> 10.4
版本对应:MariaDB10.2 ==> MySQL5.7
centos6 默认数据库MySQL
# yum info MySQL (MySQL目前属于Oracle)
centos7 默认数据库MariaDB
# yum info MariaDB
2)MySQL的特性
- 插件式存储引擎:也称为“表类型”
存储引擎:管理了存放在磁盘上的各种数据库的相关数据库文件。
存储管理器有多种实现版本,功能和特性可能均略有差别;用户可根据需要灵活选择,Mysql5.5.5开始innoDB引擎是:
MYSQL默认引擎
MyISAM ==> Aria
InnoDB ==> XtraDB
-
单进程,多线程
-
诸多扩展和新特性
-
提供了较多测试组件
-
开源
3)MySQL的安装方式
-
1、源代码:编译安装
-
2、二进制格式的程序包:展开至特定路径,并经过简单配置后即可使用
-
3、程序包管理器管理的程序包
CentOS 安装光盘
项目官方:https://downloads.mariadb.org/mariadb/repositories/
国内镜像:https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/
https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/ -
生产环境最常使用的安装方式:二进制格式安装MySQL
4)yum安装MySQL
①centos6 安装mysql
- yum install -y mysql-server
- 由于依赖关系,自动安装客户端软件:mysql
- mysql-server程序包:
==>centos6
#rpm -ql mysql-server 查看程序文件列表
/etc/rc.d/init.d/mysqld ==>MySQL服务脚本
管理:server mysqld [start|stop...]
/usr/libexec/mysqld ==>二进制主程序
/var/lib/mysql ==>数据存放路径(默认路径)
/var/log/mysqld.log ==>日志文件
-
#service mysqld start 启动mysqld
mysqld监听在3306/tcp端口 -
查看进程#ps aux
#ps aux 查看进程和以谁的身份进行
root 2370 0.0 0.1 108220 1464 .... /bin/sh /usr/bin
mysql 2472 0.1 2.5 368004 25200 .... /usr/libexec/mys
#getent passwd mysql 查看mysql用户 ==>安装mysql自动生成mysql用户
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
#pstree -p| grep mysqld 单进程多线程
├─mysqld_safe(2370)───mysqld(2472)─┬─{mysqld}(2474)
│ ├─{mysqld}(2475)
│ ├─{mysqld}(2476)
│ ├─{mysqld}(2477)
- #rpm -q --scripts mysql-server
#rpm -q --scripts mysql-server
preinstall scriptlet (安装前脚本)
创建mysql组和mysql用户的语句:
/usr/sbin/groupadd -g 27 -o -r mysql >/dev/null 2>&1 || \
/usr/sbin/useradd -M -N -g mysql -o -r -d /var/lib/mysql -s \
/bin/ bash -c "MySQL Server" -u 27 mysql >/dev/null 2>&1
.....
- #ll -h /var/lib/mysql/ 启动mysql之后
#ll -h /var/lib/mysql/
第一启动mysql会在默认存放数据的路径下生成以下文件:
-rw-rw----. 1 mysql mysql 10M Aug 17 04:50 ibdata1
-rw-rw----. 1 mysql mysql 5.0M Aug 17 04:50 ib_logfile0
-rw-rw----. 1 mysql mysql 5.0M Aug 17 04:50 ib_logfile1
drwx------. 2 mysql mysql 4.0K Aug 17 04:50 mysql
srwxrwxrwx. 1 mysql mysql 0 Aug 17 04:50 mysql.sock
drwx------. 2 mysql mysql 4.0K Aug 17 04:50 test
#du -sh /var/lib/mysql/
21M /var/lib/mysql/
②centos7 安装mariadb
- centos7 #yum install -y mariadb-server
- 由于依赖关系,自动安装客户端软件:mariadb
- #rpm -ql mariadb-server程序安装包程序列表
/usr/lib/systemd/system/mariadb.service ==>启动服务的.service文件
/usr/libexec/mysqld ==> 主程序
/etc/my.cnf.d/==>mysql的配置文件目录,优先级比/etc/my.cnf要高
/etc/my.cnf ==> 也是mysql的配置文件
- 启动:# systemctl start mariadb
- 进程查看:# ps aux
# ps aux
mysql 10227 0.0 0.1 113308 1620 ? Ss ... /bin/sh /usr/bin
mysql 10389 2.0 8.3 969244 82764 ? Sl ... /usr/libexec/mys
与centos6的区别:mysqld_safe的用户centos6是root,centos7是mysql
# pstree -p |grep mysqld
|-mysqld_safe(10227)---mysqld(10389)-+-{mysqld}(10393)
| |-{mysqld}(10394
- 注意: yum安装可以去官方网站搜索对应版本的yum 仓库路径
官网搜索对应rpm包的yum仓库配置:
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
但是光盘本身也带有的老版本的RPM包,yum install mariadb-server
时注意看版本(将直接安装新版本的RPM包)
清华大学yum仓库路径
mirrors.ustc.edu.cn/mariadb/yum/10.2/centos7-amd64
5)mysql的基本使用
①安装之后的简单使用
-
连接数据库:mysql -uUSERNAME -p[PASSWOED] -hHOSTIP
注意:直接mysql:表示以root@localhost身份连接数据库
MariaDB [(none)]>? ?或者help查看客户端命令 -
常用的客户端交互式命令:
status :查看服务器端版本信息
use :进入到database
system :调用linux命令
prompt :提示符格式
特点:服务器端命令以";"结尾
客户端命令不用
- 查看刚安装启动的mysql的自带的一些数据库:
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema | 基于内存中的数据库,没有对应datadir文件夹
| | 和性能相关的数据库,当前数据的状态
| mysql | 存放用户和密码的数据库
| performance_schema | 与性能相关的信息
| test | 默认为空,一般之后删除
+--------------------+
- 查看数据库对应的表# ls /var/lib/mysql/mysql
每张表对应有是三个文件:存放用户口令的user表
user.frm
user.MYD
user.MYI
其中每个文件对应功能后面介绍
-
一个数据库=datadir下的一个文件夹
-
对数据库的简单访问
MariaDB [none]> use mysql
MariaDB [mysql]> show tables;
MariaDB [mysql]> desc user;查看表中有哪些字段
MariaDB [mysql]> select user,password,host from user;
+------+----------+------------+
| user | password | host |默认带有6个用户账号
+------+----------+------------+
| root | | localhost |
| root | | centos7-17 |
| root | | 127.0.0.1 |
| root | | ::1 |
| | | localhost |
| | | centos7-17 |user 自动为空表示匿名用户
+------+----------+------------+匿名用户表示什么用户均能连接
但是匿名用户和root用户权限不一样
MariaDB [mysql]> desc user;可以看user表中的主键:(user,host)
即复合主键:(user,host)
user@host:这样表示一个mysql有效用户
==> root@localhost
==> root@centos7-17
==> root@127.0.0.1
==> root@::1
表示四个不同的账户
- 刚安装的数据库启动后,执行一个安全脚本# mysql_secure_installation
# mysql_secure_installation
设置数据库管理员root口令
禁止root远程登录
删除anonymous用户帐号
删除test数据库
②MariaDB程序
1)客户端程序:
- mysql: 交互式的CLI工具
- mysqldump:备份工具,基于mysql协议向mysqld发起查询请求,并将查得的所有数据转换成insert等写操作语句保存文本文件中
- mysqladmin:基于mysql协议管理mysqld
- mysqlimport:数据导入工具
2)服务器端程序
- mysqld_safe
- mysqld
- mysqld_multi 多实例
多实例:表示在一个物理服务器上运行多个mysql数据库的服务器软件。需
要将mysqld的监听端口错开。(即同一软件打开多次,但是监听端口要不同)
多实例可能用于测试环境。
mysqld_multi 这个命令呢只能运行同一mysqld服务器软件。即同一服务器版本。
一个程序本身是磁盘上一个静态文件,但是一个进程即将对应的磁盘文件加载至内
存中,进程会占用一定的资源,多实例即将同一磁盘文件运行多次,同时占据多
个资源,每一个进程就称为一个应用程序的实例。
3)用户账号
- mysql用户账号由两部分组成:
‘USERNAME’@'HOST‘ - 说明:
HOST限制此用户可通过哪些远程主机连接mysql服务器
支持使用通配符:
% 匹配任意长度的任意字符
172.16.0.0/255.255.0.0 或 172.16.%.%
_ 匹配任意单个字符
4)mysql命令
- 交互式模式:
- 脚本模式:
mysql –uUSERNAME -pPASSWORD < /path/somefile.sql
mysql>source /path/from/somefile.sql - 常用选项:
-A, --no-auto-rehash 禁止补全
-u, --user= 用户名,默认为root
-h, --host= 服务器主机,默认为localhost
-p, --passowrd= 用户密码,建议使用-p,默认为空密码
-P, --port= 服务器端口
-S, --socket= 指定连接socket文件路径
-D, --database= 指定默认数据库
-C, --compress 启用压缩
-e “SQL“ 执行SQL命令
-V, --version 显示版本
-v --verbose 显示详细信息
–print-defaults 获取程序默认使用的配置
5)socket地址
- 服务器监听的两种socket地址:
ip socket: 监听在tcp的3306端口,支持远程通信
unix sock: 监听在sock文件上,仅支持本机通信 - 说明:host为localhost,127.0.0.1时自动使用unix sock
6)服务器端配置
- 服务器端(mysqld):工作特性有多种配置方式
- 1、命令行选项:
- 2、配置文件:类ini格式
集中式的配置,能够为mysql的各应用程序提供配置信息
[mysqld]
[mysqld_safe]
[mysqld_multi]
[mysql]
[mysqldump]
[server]
[client]
格式:parameter = value
说明:
_和- 相同
1,ON,TRUE意义相同,默认value也是1
0,OFF,FALSE意义相同
7)配置文件
- /etc/my.cnf Global选项
- /etc/mysql/my.cnf Global选项
- SYSCONFDIR/my.cnf Global选项
- $MYSQL_HOME/my.cnf Server-specific 选项
- –defaults-extra-file=path
- ~/.my.cnf User-specific 选项
8)MairaDB配置
- 侦听3306/tcp端口可以在绑定有一个或全部接口IP上
- 关闭网络连接
关闭网络连接的实现
vim /etc/my.cnf
[mysqld]
skip-networking=1
关闭网络连接,只侦听本地客户端,所有和服务器的交互都通过一个socket实
现,socket的配置存放在/var/lib/mysql/mysql.sock) 可在/etc/my.cnf修
改。
可以以此方式将数据库处于维护状态,只允许本地连接。
6)mysql的二进制安装 ※※※※
①安装过程总结
- (1)准备用户
# groupadd -g 666 -o -r mysql
# useradd -s /sbin/nologin -r -d /data/mysql -g 666 -u 666 -c "mysql server" mysql
# getent passwd mysql
mysql:x:666:666:mysql server:/data/mysql:/sbin/nologin
- (2)准备数据目录,数据目录建议使用逻辑卷
# mkdir /data/mysql -p
# chown mysql.mysql /data/mysql/
- (3)准备mysql程序
注意: 因为编译安装时–profix=PATH是别人指定的,此处解压的目录就必须放置于/usr/loca/目录下,并且名字为mysql目录,因此一般建议使用软链接生成/usr/local/mysql/目录。通用二进制安装别的版本只需将软链接修改即可。
/usr/local/mysql/ ==>mysql的程序路径
源码目录:/usr/src/ -->我将源码路径放置在/usr/src目录中
# tar xf /usr/src/mariadb-10.2.27-linux-x86_64.tar.gz
软链接生成/usr/local/mysql/目录
# ln -s ../src/mariadb-10.2.27-linux-x86_64 /usr/local/mysql
查看/usr/local/mysql/目录下文件属主属组皆uid=1000的用户,需要修改
# chown -R mysql.mysql /usr/local/mysql/
- (4)准备配置文件
①需要指明数据存放路径,因为自定义了一个数据库存放路径,不选择默认的
/var/lib/mysql/目录。二进制解压缩下有对应的模板可生成需要配置文件。
②添加一些常用的服务器端的一些配置
①利用模板生成然后修改配置文件:
模板文件在 mysql包中的support-files文件在的*.cnf文件
然后对配置文件进行如下修改:
[mysqld]
datadir=/data/mysql
innodb_file_per_table=on innodb存储引擎存放文件的格式
skip_name_resolve=on 禁止将ip地址反向解析为名称,建议使用
具体实现如下:
# mkdir /etc/mysql
# cp /usr/local/mysql/support-files/my-huge.cnf /etc/mysql/my.cnf
# vim /etc/mysql/my.cnf
[mysqld] 在此语句快中添加如下语句:
datadir=/data/mysql
innodb_file_per_table=on
skip_name_resolve=on
②自己生成配置文件:
- (5)创建数据库文件
服务启动时,会依赖一些数据库文件,默认有几个数据库。因此同意二进制安装需要将数据库文件创建出来。通过mysql包在scripts/mysql_install_db脚本生成,执行此脚本是时需要依赖于mysql包中bin/目录中的一些程序,因此执行时建议直接绝对路径执行。
# /usr/local/mysql/scripts/mysql_install_db --datadir=/data/mysql --user=mysql
命令执行失败原因1:./bin/mysqld: error while loading shared
libraries: libaio.so.1: cannot open shared object file: No such
file or directory 无法打开共享文件libaio.so.1
# yum install -y libaio需要安装
- (6)准备服务脚本,并启动服务
启动脚本文件在/usr/local/mysql/support-files/mysql.server
*.server文件,但是其实是一个shell脚本文件
①准备服务启动脚本:
# file support-files/mysql.server
mysql.server: POSIX shell script, ASCII text executable
将服务脚本放置于/etc/init.d/目录下 centos7下此目录一样可用
# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
# chkconfig --add mysqld
# chkconfig --list
# service mysqld start 启动服务
②准备启动的.service文件
- (7)PATH路径
# echo 'PATH=/usr/local/mysql/bin:$PATH' >/etc/profile.d/mysql.sh
# . /etc/profile.d/mysql.sh
- (8)安全初始化
# mysql_secure_installation
如果只将mysql客户端工具加入PATH变量中了,绝对路径执行
# /usr/local/mysql/bin/mysql_secure_installation
②安装过程命令总结
关于通用二进制安装命令的总结:
1、创建mysql用户和mysql组:
# groupadd -g 666 -o -r mysql
# useradd -s /sbin/nologin -r -d /data/mysql -g 666 -u 666 -c "mysql server" mysql
2、datadir目录:
# mkdir /data/mysql -p
# chown mysql.mysql /data/mysql/
3、/usr/local/mysql/目录:
# tar xf /usr/src/mariadb-10.2.27-linux-x86_64.tar.gz
# ln -s ../src/mariadb-10.2.27-linux-x86_64 /usr/local/mysql
# chown -R mysql.mysql /usr/local/mysql/
4、/etc/mysql/my.cnf文件:
# mkdir /etc/mysql
# cp /usr/local/mysql/support-files/my-huge.cnf /etc/mysql/my.cnf
# vim /etc/mysql/my.cnf
[mysqld]
datadir=/data/mysql
innodb_file_per_table=on
skip_name_resolve=on
5、datadir目录下启动需要的文件:
# /usr/local/mysql/scripts/mysql_install_db --datadir=/data/mysql --user=mysql
6、服务启动脚本
# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
# chkconfig --add mysqld
# service mysqld start
7、PATH变量
# echo 'PATH=/usr/local/mysql/bin:$PATH' >/etc/profile.d/mysql.sh
# . /etc/profile.d/mysql.sh
8、安全加固
# mysql_secure_installation
# /usr/local/mysql/bin/mysql_secure_installation
③一键安装脚本
通用二进制安装mysql的一键安装脚本
7)源码编译安装mysql
①编译安装过程
- (1)安装环境
yum install bison bison-devel zlib-devel libcurl-devel libarchive-devel boostdevel gcc gcc-c++ cmake ncurses-devel gnutls-devel libxml2-devel openssl-devel libevent-devel libaio-devel
yum install bison bison-devel zlib-devel libcurl-devel libarchive-devel boost-devel gcc gcc-c++ cmake ncurses-devel gnutls-devel libxml2-devel openssl-devel libevent-devel libaio-devel
- (2)做准备用户和数据目录
创建用户和datadir(数据存储目录)
# groupadd -g 666 -o -r mysql
# useradd -s /sbin/nologin -r -d /data/mysql -g 666 -u 666 -c "mysql server" mysql
# mkdir /data/mysql -p
# chown mysql.mysql /data/mysql/
-
(3)cmake 编译安装
cmake的重要特性之一是其独立于源码(out-of-source)的编译功能,即编译工作可以在另一个指定的目录中而非源码目录中进行,这可以保证源码目录不受任何一次编译的影响,因此在同一个源码树上可以进行多次不同的编译,如针对于不同平台编译编译选项:https://dev.mysql.com/doc/refman/5.7/en/source-configuration-options.html
提示:如果出错,执行rm -f CMakeCache.txt
# tar xf mariadb-10.2.27.tar.gz -C /usr/src/
# cd /usr/src/mariadb-version
# cmake . \
-DCMAKE_INSTALL_PREFIX=/app/mysql \
-DMYSQL_DATADIR=/data/mysql/ \
-DSYSCONFDIR=/etc/ \
-DMYSQL_USER=mysql \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITHOUT_MROONGA_STORAGE_ENGINE=1 \
-DWITH_DEBUG=0 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
# make -j 4 && make install
-
(4)准备环境变量
echo ‘PATH=/app/mysql/bin:$PATH’ > /etc/profile.d/mysql.sh
. /etc/profile.d/mysql.sh -
(5)生成数据库文件
cd /app/mysql/
scripts/mysql_install_db --datadir=/data/mysql/ --user=mysql -
(6)准备配置文件
cp /app/mysql/support-files/my-huge.cnf /etc/my.cnf -
(7)准备启动脚本
cp /app/mysql/support-files/mysql.server /etc/init.d/mysqld -
(8)启动服务
chkconfig --add mysqld ;service mysqld start