Linux 第64,65天 mariaDB基础

Linux 第64,65天 mariaDB基础

时间: 20180927

时间: 20180928


目录

文件管理系统的缺点

数据库管理系统的优点

数据库管理系统

数据库管理系统的基本功能

数据库系统的架构

简易数据规划流程

数据库的正规化分析

范式

SQL概念

约束

MYSQL的特性 (mariaDB和mysql非常类似这里不加区分,程序主要使用mariadb)

mysql数据库安装方式

二进制安装(脚本完成)

源码安装


文件管理系统的缺点

编写应用程序不方便

数据冗余不可避免

应用程序依赖性

不支持对文件的并发访问

数据间联系弱

难以按用户视图表示数据

无安全控制功能


数据库管理系统的优点

相互关联的数据的集合

较少的数据冗余

程序与数据相互独立

保证数据的安全、可靠

最大限度地保证数据的正确性

数据可以并发使用并能同时保证一致性


数据库管理系统

数据库是数据的汇集,它以一定的组织形式存于存储介质上

DBMS是管理数据库的系统软件,它实现数据库系统的各种功能。是数据库系统的核心

DBA:负责数据库的规划、设计、协调、维护和管理等工作

应用程序指以数据库为基础的应用程序


数据库管理系统的基本功能

数据定义

数据处理

数据安全

数据备份


数据库系统的架构

单机架构

大型主机/终端架构

主从式架构(C/S)

分布式架构


简易数据规划流程

第一阶段:收集数据,得到字段

收集必要且完整的数据项

转换成数据表的字段

第二阶段:把字段分类,归入表,建立表的关联

关联:表和表间的关系

分割数据表并建立关联的优点

节省空间

减少输入错误

方便数据修改

第三阶段:

规范化数据库


数据库的正规化分析

RDMBS设计范式基础概念

设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范

要求被称为不同范式,各种范式呈递次规范,越高的范式数据库冗余越小

目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科

范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是

第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),

其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)即可


范式

1NF:无重复的列,每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某

个属性不能有多个值或者不能有重复的属性。除去同类型的字段,就是无重复的列

说明:第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不

是关系数据库

2NF:属性完全依赖于主键,第二范式必须先满足第一范式,要求表中的每个行必须可以被唯一

地区分。通常为表加上一个列,以存储各个实例的唯一标识PK,非PK的字段需要与整个PK有

直接相关性

3NF:属性不依赖于其它非主属性,满足第三范式必须先满足第二范式。第三范式要求一个数据库

表中不包含已在其它表中已包含的非主关键字信息,非PK的字段间不能有从属关系


SQL概念

SQL: Structure Query Language

结构化查询语言

SQL解释器:

数据存储协议:应用层协议,C/S

S:server, 监听于套接字,接收并处理客户端的应用请求

C:Client

客户端程序接口

CLI

GUI

应用编程接口

ODBC:Open Database Connectivity

JDBC:Java Data Base Connectivity


约束

约束:constraint,表中的数据要遵守的限制

主键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行;必须提供数据,

即NOT NULL,一个表只能有一个

惟一键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行;允许为NULL,

一个表可以存在多个

外键:一个表中的某字段可填入的数据取决于另一个表的主键或唯一键已有的数据

检查:字段值在一定范围内



MYSQL的特性

插件式存储引擎:也称为“表类型”,存储管理器有多种实现版本,功能和特性可能均略有差别;

用户可根据需要灵活选择,Mysql5.5.5开始innoDB引擎是MYSQL默认引擎

MyISAM==> Aria

InnoDB==> XtraDB

单进程,多线程

诸多扩展和新特性

提供了较多测试组件

开源


mysql数据库安装方式

1. rpm安装

yum install maria

2. 二进制安装(实现脚本化)

3. 源码安装



二进制安装

useradd -r -M -d /data/mysql mysql

创建数据库存放位置(家目录)

mkdir /data/mysql

chown mysql:mysql /data/mysql

解压二进制文件,/usr/local这个目录名不能改,修改权限

tar -zxvpf /path-to/mariadb-VERSION-OS.tar.gz -C /usr/local

cd /usr/local

ln -s mariadb-VERSION-OS mysql

cd mysql

chown -R root.root .

chown -R mysql /data/mysql

复制配置文件

mkdir /etc/mysql

cp support-files/my-huge.cnf /etc/mysql/my.cnf

配置mysql的配置文件

vim /etc/mysql/my.cnf

在[mysqld]下添加如下配置

datadir=/data/mysql   # 数据库存放目录

innodb_file_per_table= on 

skip_name_resolve= on  # 禁用反向名称解析


初始化数据库

./scripts/mysql_install_db --user=mysql --datadir=/data/mysql


准备服务脚本,并启动服务(CernOS6)

cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld

chkconfig--add mysqld

service mysqld start


安全初始化(删除测试库,更改root口令等)

/user/local/mysql/bin/mysql_secure_installation


配置环境变量

echo 'export PATH=$PATH:/usr/local/mysql/bin' > /etc/profile.d/mysql.sh

source /etc/profile.d/mysql.sh


安装mariaDB帮助文件cent7

vim /etc/man_db.conf 在相应的位置添加如下两行内容

MANPATH_MAP /usr/local/mysql/bin    /usr/local/mysql/man

MANDB_MAP   /usr/local/mysql/man        /var/cache/man/mysql

mandb #更新man数据库


启动mysql

service mysqld start

systemctl start mysqld


脚本完成二进制mariaDB安装

#!/bin/bash


# Description: auto install mariaDB 10.2.18

# Version 2.0

# Author: winthclou

# Run Author: root


# The condition excute this script


[ -f "$1" ] || exit 5


# Prepare ENV

datadir=/data/mysql

confdir=/etc/mysql

basedir=/usr/local/mysql


id mysql &> /dev/null || useradd -M -r -s /sbin/nologin -d $datadir mysql

[ -d "$datadir" ] || install -d -o mysql -g mysql $datadir

[ -d "$confdir" ] || mkdir $confdir


# Install MariaDB

mariadir=${1:0: -7}

tar -xf $1 -C /usr/local

ln -s $mariadir $basedir

chown -R root.root $basedir/*


cp $basedir/support-files/my-huge.cnf $confdir/my.cnf

sed -i "/\[mysqld\]/adatadir=/data/mysql\nskip_name_resolve= on\ninnodb_file_per_table= on" $confdir/my.cnf

cd $basedir

./scripts/mysql_install_db --user=mysql --datadir=$datadir &>/dev/null


# add ENV

echo 'export PATH=$PATH:/usr/local/mysql/bin' > /etc/profile.d/mysql.sh

source /etc/profile.d/mysql.sh


# config help document

manconf=/etc/man_db.conf

grep -q "MANPATH_MAP.*mysql.*" $manconf || sed -i "/\*PATH\*/aMANPATH_MAP /usr/local/mysql/bin    /usr/local/mysql/man" $manconf   #此处和上一行是一行内容

grep -q "MANDB_MAP.*mysql.*mysql" $manconf ||sed -i "/CATPATH/aMANDB_MAP   /usr/local/mysql/man   /var/cache/man/mysql" $manconf #此处和上一行是一行内容


# add service script

cp -a $basedir/support-files/mysql.server /etc/rc.d/init.d/mysqld



源码编译安装mariadb

安装编译时所用的包

yum install bison bison-devel zlib-devel libcurl-devel libarchive-devel\

boost-devel gcc gcc-c++ cmake ncurses-devel gnutls-devel libxml2-devel\

openssl-devellibevent-devellibaio-devel -y

做准备用户和数据目录

mkdir/data

useradd–r –s /bin/false –m –d /data/mysqldb/ mysql

tar xvfmariadb-10.2.15.tar.gz

cmake编译安装:

cmake的重要特性之一是其独立于源码(out-of-source)的编译功能,即编译工作可以在另

一个指定的目录中而非源码目录中进行,这可以保证源码目录不受任何一次编译的影响,因

此在同一个源码树上可以进行多次不同的编译,如针对于不同平台编译

需要变动的注意修改目录

cdmariadb-10.2.15/

cmake. \

-DCMAKE_INSTALL_PREFIX=/app/mysql\

-DMYSQL_DATADIR=/data/mysqldb/ \

-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=/app/mysql/mysql.sock\

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci


准备环境变量

echo 'PATH=/app/mysql/bin:$PATH' > /etc/profile.d/mysql.sh

source /etc/profile.d/mysql.sh

生成数据库文件

cd /app/mysql/

scripts/mysql_install_db--datadir=/data/mysqldb/ --user=mysql

准备配置文件

cp /app/mysql/support-files/my-huge.cnf /etc/my.cnf

准备启动脚本

cp /app/mysql/support-files/mysql.server /etc/init.d/mysqld

启动服务

chkconfig--add mysqld;service mysqldstart


总结:

制作脚本时,要多加判断,否则可能会覆盖或者添加了多余的数据

mariaDB二进制安装方式,其实就是已经编译好的程序,只是为其准备相应的配置文件

添加运行程序的用户,初始化数据,添加环境变量,添加帮助文件和服务脚本,配置

完成后即可运行该程序


猜你喜欢

转载自blog.51cto.com/winthcloud/2287892