一、Mysql数据库简介
Mysql是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗下公司。Mysql 最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
Mysql 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准化语言。
Mysql软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。
(RDBMS即关系数据库管理系统(Relational Database Management System),是将数据组织为相关的行和列的系统,而管理关系数据库的计算机软件就是关系数据库管理系统,常用的数据库软件有Oracle、SQL Server等。)
二、RDBMS的特点
对应目前主流的LAMP(Linux+Apache+Mysql+PHP)架构来说,Mysql更是得到各位IT运维、DBA的青睐,目前mysql已被orcacle收购,不过好消息是原来mysql创始人已独立出来自己重新开发了一个MariaDB,而且使用的人数越来越多。而且MariaDB兼容mysql所有的功能和相关参数。
三、Mysql数据库引擎详解
Mysql数据库运行在服务器前,需要选择启动的引擎,好比一辆轿车,性能好的发动机会提升轿车的性能,从而启动、运行更加的高效。同样Mysql也有类似发动机引擎,这里称之为Mysql引擎。
Mysql引擎包括:ISAM、MyISAM、InnoDB 、MEMORY、CSV、BLACKHOLE、ARCHIVE、PERFORMANCE_SCHEMA、Berkeley、Merge、Federated、Cluster/NDB等,其中MyISAM、InnoDB使用最为广泛,如下为Myisam BDB Memory InnoDB Archive引擎功能的对比:
引擎特性 | Myisam | BDB | Memory | InnoDB | Archive |
批量插入的速度 | 高 | 高 | 高 | 中 | 非常高 |
集群索引 | 不支持 | 不支持 | 不支持 | 支持 | 不支持 |
数据缓存 | 不支持 | 不支持 | 支持 | 支持 | 不支持 |
索引缓存 | 支持 | 不支持 | 支持 | 支持 | 不支持 |
数据可压缩 | 支持 | 不支持 | 不支持 | 不支持 | 支持 |
硬盘空间使用 | 低 | 低 | NULL | 高 | 非常低 |
内存使用 | 低 | 低 | 中等 | 高 | 低 |
外键支持 | 不支持 | 不支持 | 不支持 | 支持 | 不支持 |
存储限制 | 没有 | 没有 | 有 | 64TB | 没有 |
事务安全 | 不支持 | 支持 | 不支持 | 支持 | 不支持 |
锁机制 | 表锁 | 页锁 | 表锁 | 行锁 | 行锁 |
B树索引 | 支持 | 支持 | 支持 | 支持 | 不支持 |
哈希索引 | 不支持 | 不支持 | 支持 | 支持 | 不支持 |
全文索引 | 支持 | 不支持 | 不支持 | 不支持 | 不支持 |
性能总结:MyISAM MySQL 5.0 之前的默认数据库引擎,最为常用。拥有较高的插入,查询速度,但不支持事务;
MySQL是我们比较常用的一种数据库软件。它有着诸多的优点,如开源的,免费的等等。其实它还有一个很好的特点,那就是有多种引擎可以供你选择。如果赛车手能根据不同的路况,地形随手更换与之最适宜的引擎,那么他们将创造奇迹。
MyISAM MySQL 5.0 之前的默认数据库引擎,最为常用。拥有较高的插入,查询速度,但不支持事务;
InnoDB事务型数据库的首选引擎,支持ACID事务,支持行级锁定、支持事物、外键等功能, MySQL 5.5 起成为默认数据库引擎;
InnoDB事务型数据库的首选引擎,支持ACID事务,ACID包括:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),一个支持事务(Transaction)的数据库,必需要具有这四种特性,否则在执行事务过程无法保证数据的正确性。
BDB源自 Berkeley DB,事务型数据库的另一种选择,支持Commit 和Rollback 等其他事务特性;
Memory所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在 MySQL 重新启动时丢失;
Mysql常用的两大引擎有MyISAM和innoDB,那他们有什么明显的区别呢,什么场合使用什么引擎呢?
MyISAM类型的表强调的是性能,其执行速度比InnoDB类型更快,但不提供事务支持,如果执行大量的SELECT(查询)操作,MyISAM是更好的选择,支持表锁。
InnoDB提供事务支持事务,外部键等高级数据库功能,执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表,支持行锁。
四、Mysql数据库应用索引
索引是一种特殊的文件(InnoDB 数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。索引不是万能的,索引可以加快数据检索操作,但会使数据修改操作变慢。每修改数据记录,索引就必须刷新一次。常见索引类别如下:
普通索引(由关键字 KEY 或 INDEX 定义的索引)的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHERE column =)或排序条件(ORDER BY column)中的数据列创建索引。只要有可能,就应该选择一个数据最整齐、最紧凑的数据列(如一个整数类型的数据列)来创建索引。
普通索引允许被索引的数据列包含重复的值。比如说,因为人有可能同名,所以同一个姓名在同一个"员工个人资料"数据表里可能出现两次或更多次。
如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE 把它定义为一个唯一索引。这么做的好处:一是简化了 MySQL 对这个索引的管理工作,这个索引也因此而变得更有效率;二是 MySQL 会在有新记录插入数据表时,自动检查新记录的这个字段的值是否已经在某个记录的这个字段里出现过了;如果是,MySQL 将拒绝插入那条新记录。也就是说,唯一索引可以保证数据记录的唯一性。事实上,在许多场合,人们创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复。
在前面已经反复多次强调过:必须为主键字段创建一个索引,这个索引就是所谓的"主索引"。主索引与唯一索引的唯一区别是:前者在定义时使用的关键字是 PRIMARY 而不是 UNIQUE。
如果为某个外键字段定义了一个外键约束条件,MySQL 就会定义一个内部索引来帮助自己以最有效率的方式去管理和使用外键约束条件。
索引可以覆盖多个数据列,如像 INDEX (columnA, columnB) 索引。这种索引的特点是 MySQL 可以有选择地使用一个这样的索引。如果查询操作只需要用到 columnA 数据列上的一个索引,就可以使用复合索引 INDEX(columnA, columnB)。不过,这种用法仅适用于在复合索引中排列在前的数据列组合。比如说,INDEX (A,B,C) 可以当做 A 或 (A,B) 的索引来使用,但不能当做 B、C 或 (B,C) 的索引来使用。
五、Mysql数据库安装
Mysql安装方式有两种,一种是YUM/RPM安装,另外一种是源码包安装。
CentOS 6.x
[root@localhost ~]# yum install -y mysql-server mysql-devel mysql
CentOS 7.x
[root@localhost ~]# yum install -y mariadb-server mariadb mariadb-libs mariadb-devel
[root@localhost ~]# yum -y install wget gcc gcc-c++ cmake make ncurses-devel perl perl-devel
[root@localhost ~]# wget -c http://mirrors.yangxingzhen.com/mysql/mysql-5.6.36.tar.gz
2)解压软件包
[root@localhost ~]# tar zxf mysql-5.6.36.tar.gz
3)预编译
[root@localhost ~]# cd mysql.5.6.36
[root@localhost ~]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_EXDDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
4)安装
[root@localhost ~]# make && make install
[root@localhost ~]# useradd -s /sbin/nologin mysql
[root@localhost ~]# mkdir -p /data/mysql
[root@localhost ~]# chown -R mysql.mysql /data/mysql
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
datadir = /data/mysql
socket = /tmp/mysql.sock
user = mysql
log-error = /var/log/mysqld.log
character-set-server = utf8
[client]
default-character-set = utf8
[mysql]
default-character-set = utf8
[root@localhost ~]# /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mysql --basedir=/usr/local/mysql
8)创建软连接
[root@localhost ~]# ln -s /usr/local/mysql/bin/* /usr/bin
[root@localhost ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@localhost ~]# chmod o+x /etc/init.d/mysqld
[root@localhost ~]# chkconfig --add mysqld
[root@localhost ~]# chkconfig mysqld on
10)启动MYSQL服务
[root@localhost ~]# /etc/init.d/mysqld start
MYSQL源码安装参数详解
#cmake预编译
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql
#MYSQL数据存放路径
-DMYSQL_DATADIR=/data/mysql
#配置文件路径
-DSYSCONFDIR=/etc
#MYSQL Socket通信文件位置
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock
#MYSQL 运行用户
-DMYSQL_USER=mysql
#MYSQL监听端口
-DMYSQL_TCP_PORT=3306
#启引擎
-DWGE_ENGINE=1
#开启innodb引擎支持
-DWITH_INNOBASE_STORAGE_ENGINE=1
#开启partition引擎支持
-DWITH_PARTITION_STORAGE_ENGINE=1
#开启引擎
-DWITH_BLACGINE=1
#开启MyISAM引擎支持
-DWITH_MYISAM_STORAGE_ENGINE=1
#启用快捷键功能
-DWITH_READLINE=1
#允许从本地导入数据
-DENABLED_LOCAL_INFILE=1
#默认字符集UTF-8
-DWITH_EXDDEFAULT_CHARSET=utf8
#检验字符
-DDEFAULT_COLLATION=utf8_general_ci
#安装所有扩展字符集
-DEXTRA_CHARSETS=all
#禁止调试模式支持
-DWITH_BIG_DEBUG=0
附MYSQL自动化安装脚本,脚本内容如下,有需要的朋友可以参考。
#!/bin/bash
#2017-12-5 17:35:38
#by author yangxz
#Auto Install MYSQL
#定义MYSQL路径变量
MYSQL_URL=https://mirrors.yangxingzhen.com/mysql
MYSQL_FILES=mysql-5.6.36.tar.gz
MYSQL_FILES_DIR=mysql-5.6.36
MYSQL_PREFIX=/usr/local/mysql
#下载MYSQL、解压MYSQL、预编译MYSQL、安装MYSQL
yum –y install ncurses-devel perl gcc gcc-c++ wget cmake make
wget –c $MYSQL_URL/$MYSQL_FILES
tar zxf $MYSQL_FILES
cd $MYSQL_FILES_DIR
cmake . -DCMAKE_INSTALL_PREFIX=$MYSQL_PREFIX \
-DMYSQL_DATADIR=/data/mysql \
-DSYSCONFDIR=/etc \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DMYSQL_USER=mysql \
-DMYSQL_TCP_PORT=3306 \
-DWGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_BLACGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EXDDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DWITH_BIG_DEBUG=0
make &&make install
#配置MYSQL
useradd -s /sbin/nologin mysql
mkdir -p /data/mysql
chown -R mysql.mysql /data/mysql
#编写MYSQL配置文件
cat > /etc/my.cnf <<EOF
[mysqld]
datadir = /data/mysql
socket = /tmp/mysql.sock
user = mysql
log-error = /var/log/mysqld.log
character-set-server = utf8
[client]
default-character-set = utf8
[mysql]
default-character-set = utf8
EOF
#初始化MYSQL数据库
/usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mysql -basedir=/usr/local/mysql
#创建软连接
ln -s /usr/local/mysql/bin/* /usr/bin
#配置成系统服务,授权,添加开机自启动
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod o+x /etc/init.d/mysqld
service mysqld start
chkconfig --add mysqld
chkconfig mysqld on
若文章图片、下载链接等信息出错,请在评论区留言反馈,博主将第一时间更新!如本文“对您有用”,欢迎随意打赏,谢谢!
广东省深圳市南山区 电信 1F
亲测,写的不错,感谢博主