一、 MYSQL数据库入门简介
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于Oracle 旗下公司。MySQL最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准化语言。
MySQL数据库主要用于存储各类信息数据,例如:员工姓名、身份证ID、商城订单及金额、销售业绩及报告,学生考试成绩、网站帖子、论坛用户信息、系统报表等等。
MySQL 软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。
关系数据库管理系统(Relational Database Management System,RDBMS),是将数据组织为相关的行和列的系统,而管理关系数据库的计算机软件就是关系数据库管理系统,常用的关系型数据库软件有MYSQL、Mariadb、Oracle、SQL Server、PostgreSQL、DB2等。)
RDBMS数据库的特点如下:
数据以表格的形式出现;
每行记录数据的真实内容;
每列记录数据真实内容的数据域;
无数的行和列组成一张表;
若干的表组成一个数据库;
目前主流架构LAMP(Linux+Apache+MySQL+PHP),MySQL更是得到各位IT运维、DBA的青睐,虽然MySQL数据库已被Orcacle公司收购,不过好消息是原来MySQL创始人已独立出来自己重新开发了MariaDB数据库,开源免费,目前越来越多的人开始尝试使用。MariaDB数据库兼容MySQL数据库所有的功能和相关参数。
MySQL数据库运行在服务器前,需要选择启动的引擎,好比一辆轿车,性能好的发动机会提升轿车的性能,从而启动、运行更加的高效。同样MYSQL也有类似发动机引擎,这里称之为MYSQL引擎。
MYSQL引擎包括:ISAM、MyISAM、InnoDB 、MEMORY、CSV、BLACKHOLE、ARCHIVE、PERFORMANCE_SCHEMA、Berkeley、Merge、Federated、Cluster/NDB等,其中MyISAM、InnoDB使用最为广泛。
性能总结:MyISAM MySQL 5.0之前的默认数据库引擎,最为常用。拥有较高的插入,查询速度,但不支持事务;InnoDB事务型数据库的首选引擎,支持ACID事务,ACID包括:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),一个支持事务(Transaction)的数据库,必需要具有这四种特性,否则在执行事务过程无法保证数据的正确性。
MYSQL5.5之后默认引擎为InnoDB,Innodb支持行级锁定, 支持事物、外键等功能。
MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!
什么是数据库事务?
事务(transaction)是由指逻辑上对数据的的一组操作,这组操作要么一次全部成功,如果这组操作全部失败,是不可分割的一个工作单位。
在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
事务用来管理 insert,update,delete 语句,一般来说,事务是必须满足4个条件(ACID):原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。
原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
BDB源自 Berkeley DB,事务型数据库的另一种选择,支持Commit 和Rollback 等其他事务特性;
Memory所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在MySQL 重新启动时丢失;
Mysql常用的两大引擎有MyISAM和innoDB,那他们有什么明显的区别呢,什么场合使用什么引擎呢?
MyISAM类型的数据库表强调的是性能,其执行数度比InnoDB类型更快,但不提供事务支持,不支持外键,如果执行大量的SELECT(查询)操作,MyISAM是更好的选择,支持表锁。
InnoDB提供事务支持事务、外部键、行级锁等高级数据库功能,执行大量的INSERT或UPDATE,出于性能方面的考虑,可以考虑使用InnoDB引擎。
二、Mysql数据库安装方式
MySQL数据库安装方法有两种,一种是yum/rpm通过YUM源在线安装,另外一种是通过源码软件编译安装。
(1) YUM方式安装MYSQL方法,执行命令:
yum install mysql-server mysql-devel mysql-libs -y #CentOS6.x YUM安装
yum install mariadb-server mariadb mariadb-libs -y #CentOS7.x YUM安装
(2) 源码安装MYSQL5.5.20方法,通过cmake、make、make install三个步骤实现。
wget http://files.directadmin.com/services/all/mysql/5.5.20/MySQL-server-5.5.20-1.linux2.6.i386.rpm
tar -zxf mysql-5.5.20
yum install gcc c ncurses-devel cmake libaio bison gcc-c++ git ncurses-devel ncurses -y
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql55/ \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DMYSQL_DATADIR=/data/mysql \
-DSYSCONFDIR=/etc \
-DMYSQL_USER=mysql \
-DMYSQL_TCP_PORT=3306 \
-DWITH_XTRADB_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EXTRA_CHARSETS=1 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DWITH_BIG_TABLES=1 \
-DWITH_DEBUG=0
make
make install
三、Mysql源码安装参数详解
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql55 #Cmake预编译;
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock #MYSQL Socket通信文件位置;
-DMYSQL_DATADIR=/data/mysql #MYSQL数据存放路径;
-DSYSCONFDIR=/etc #配置文件路径;
-DMYSQL_USER=mysql #MYSQL运行用户;
-DMYSQL_TCP_PORT=3306 #MYSQL监听端口;
-DWITH_XTRADB_STORAGE_ENGINE=1 #开启xtradb引擎支持;
-DWITH_INNOBASE_STORAGE_ENGINE=1 #开启innodb引擎支持;
-DWITH_PARTITION_STORAGE_ENGINE=1 #开启partition引擎支持;
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 #开启blackhole引擎支持;
-DWITH_MYISAM_STORAGE_ENGINE=1 #开启MyISAM引擎支持;
-DWITH_READLINE=1 #启用快捷键功能;
-DENABLED_LOCAL_INFILE=1 #允许从本地导入数据;
-DWITH_EXTRA_CHARSETS=1 #支持额外的字符集;
-DDEFAULT_CHARSET=utf8 #默认字符集UTF-8;
-DDEFAULT_COLLATION=utf8_general_ci #检验字符;
-DEXTRA_CHARSETS=all #安装所有扩展字符集;
-DWITH_BIG_TABLES=1 #将临时表存储在磁盘上;
-DWITH_DEBUG=0 #禁止调试模式支持;
make 编译;
make install 安装
1、bin目录:用于放置一些可执行文件,如mysql.exe、mysqld.exe、mysqlshow.exe等。
2、data目录:用于放置一些日志文件以及数据库。
3、include目录:用于放置一些头文件,如:mysql.h、mysql_ername.h等。
4、lib目录:用于放置一系列库文件。
5、share目录:用于存放字符集、语言等信息。
6、my.ini:是MySQL数据库中使用的配置文件。
7、my-huge.ini:适合超大型数据库的配置文件。
8、my-large.ini:适合大型数据库的配置文件。
9、my-medium.ini:适合中型数据库的配置文件。
10、my-small.ini:适合小型数据库的配置文件。
11、my-template.ini:是配置文件的模板,MySQL配置向导将该配置文件中选择项写入到my.ini文件。
12、my-innodb-heavy-4G.ini:表示该配置文件只对于InnoDB存储引擎有效,而且服务器的内存不能小于4GB。
将源码安装的Mysql数据库服务设置为系统服务,可以使用chkconfig管理,并启动MYSQL数据库。
cd /usr/local/mysql55/
\cp support-files/my-large.cnf /etc/my.cnf
\cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 35 mysqld on
mkdir -p /data/mysql
useradd mysql
/usr/local/mysql55/scripts/mysql_install_db --user=mysql --datadir=/data/mysql/ --basedir=/usr/local/mysql55/
ln -s /usr/local/mysql55/bin/* /usr/bin/
service mysqld restart