前言
因为自己对mysql的相关知识点比较分散,所以写了这篇文章系统性的梳理一下mysql的相关知识,方便查阅,查漏补缺,如果各位看官发现有不对的地方,欢迎拍砖。
mysql简介
ySQL®软件提供了十分快速的多线程、多用户、牢靠的SQL(结构化查询语言)数据库服务器。MySQL服务器定位于任务关键型、重负荷生产系统,并能嵌入在大量部署的软件中。MySQL是MySQL AB的注册商标。
mysql是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放到一个大的仓库内,这样就增加了速度提高了灵活性。mysql中的sql指的是”结构化查询语言”
1.最上层是一些客户端和连接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于tcp/ip的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。
2.第二层架构主要完成大多少的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化及部分内置函数的执行。所有跨存储引擎的功能也在这一层实现,如过程、函数等。在该层,服务器会解析查询并创建相应的内部解析树,并对其完成相应的优化如确定查询表的顺序,是否利用索引等,最后生成相应的执行操作。如果是select语句,服务器还会查询内部的缓存。如果缓存空间足够大,这样在解决大量读操作的环境中能够很好的提升系统的性能。
3.存储引擎层,存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过API与存储引擎进行通信。不同的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取。
4.数据存储层,主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互。
MySQL的主要特性:
内部构件和可移植性:
1、使用C和C++编写
2、用众多不同的编译器进行了测试
3、能够工作在众多不同的平台上
4、使用GNU Automake、Autoconf和Libtool进行移植
5、采用了核心线程的完全多线程,如果有多个CPU,它能很方便的使用这些CPU
6、innodb引擎提供了事务性和非事务性存储引擎。
7、使用了极快的“B树”磁盘表(MyISAM)和索引压缩
8、极快的基于线程的内存分配系统
9、通过使用优化的“单扫描多连接”,能实现极快的连接
10、存储器中的哈希表用作临时表
安全
十分灵活和安全的权限和密码系统,允许基于主机的验证。连接到服务器时,所有的密码传输均采用加密形式,从而保证了密码安全。
可伸缩性和限制
处理大型数据库:可以使用5千万条记录的数据库,甚至有60000个表,50亿数行数据。
每个表支持高达64条索引(mysql4.1.2之前为32条)。每条索引可以由1~16个列或者列元素组成,最大索引宽度为1000字节。
安装
官网下载地址:https://dev.mysql.com/downloads/
安装前准备
1、添加mysqlyum源【yum安装】
[root@882b316b272d /]# wget https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
[root@882b316b272d /]# rpm -Uvh mysql80-community-release-el7-1.noarch.rpm
warning: mysql80-community-release-el7-1.noarch.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:mysql80-community-release-el7-1 ################################# [100%]
2、下载相关安装包
wget https://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-5.6.40-1.el7.x86_64.rpm-bundle.tar
wget https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.40.tar.gz
yum安装
【这里以mysql5.6为例】
系统环境:
[root@882b316b272d /]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@882b316b272d /]# uname -a
Linux 882b316b272d 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
安装mysql-server
[root@882b316b272d /]# yum install mysql-community-server
[root@882b316b272d /]# service mysqld restart
初次安装mysql5.6默认是没有密码的,所以,直接执行
[root@882b316b272d /]# mysql -u root
mysql >
注意:安装mysql5.7默认是会给你生成一个随机密码的,注意提示!
编译安装
1、获取源码包文件
hold
2、安装相关工具及依赖
yum install cmake –y
yum install ncurses-devel –y
3、添加相关配置
useradd mysql -s /sbin/nologin -M
4、开始安装
tar zxf mysql-5.5.32.tar.gz
cd mysql-5.5.32
cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.32 \
-DMYSQL_DATADIR=/application/mysql-5.5.32/data \
-DMYSQL_UNIX_ADDR=/application/mysql-5.5.32/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \
-DENABLED_LOCAL_INFILE=ON \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITHOUT_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FAST_MUTEXES=1 \
-DWITH_ZLIB=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_READLINE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DWITH_DEBUG=0
make
make install
5、后续配置
ln -s /application/mysql-5.5.32/ /application/mysql #创建软连接安装
cp mysql-5.5.32/support-files/my-small.cnf /etc/my.cnf #
echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile
chown -R mysql.mysql /application/mysql/data/
6、初始化数据库
chmod -R 1777 /tmp/
cd /application/mysql/scripts/
./mysql_install_db --basedir=/application/mysql/ --datadir=/application/mysql/data/ --user=mysql
7、配置服务并启动
source /etc/profile
\cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
/etc/init.d/mysqld start
8、修改密码并开启自启动
lsof -i:3306
mysqladmin -u root password 'hy2017'
chkconfig mysqld on
二进制安装
1、获取二进制安装包
mysql-5.6.40-linux2.6-x86_64.tar.gz
2、解压并做好软连接
tar zxf mysql-5.5.49-linux2.6-x86_64.tar.gz #解压
mv mysql-5.5.49-linux2.6-x86_64 /application/mysql-5.5.49 #重命名
ln -s /application/mysql-5.5.49/ /application/mysql #做好软连接
3、授权
chown -R mysql.mysql /application/mysql #库授权
mkdir /application/mysql/data –p #创建数据库数据目录
4、初始化安装
cd /application/mysql
./scripts/mysql_install_db –basedir=/application/mysql/ –datadir=/application/mysql/data/ –user=mysql
5、修改配置文件
/bin/cp support-files/my-small.cnf /etc/my.cnf #这里用系统自带的配置模板,后期再做配置
sed -i ‘s#/usr/local/#/application/#g’ /application/mysql/bin/mysqld_safe #修改默认安装路径
6、为了方便操作,设置环境变量
PATH=”/application/mysql/bin:$PATH”
echo `PATH=/application/mysql/bin:$PATH` >>/etc/profile
. /etc/profile
7、mysql启动设置
sed -i ‘s#/usr/local/#/application/#g’ support-files/mysql.server #修改路径
cp support-files/mysql.server /etc/init.d/mysqld #改名
chmod +x /etc/init.d/mysqld #添加权限
/etc/init.d/mysqld start
cp -a /application/mysql/bin/* /usr/local/sbin/
配置
以下是常用配置参数详解,如果想要了解更多,====>>点这里
port = 3306 #mysqld服务运行时的端口号,默认为3306
socket = /tmp/mysql.sock #socket文件是linux/unix系统特有的,用户在该环境下的客户端连接可以不通过tcp/ip网络,而直接使用socket文件连接
back_log = 300 #该值为设定档mysql暂时停止响应新的请求前,短时间内有多少个请求可以存在堆栈内,如果系统在短时间内有很多的连接,应该增大该值,该值最好设置小于512的整数
skip-networking #不在tcp/ip端口上进行监听,所有的连接都是通过本地的socket文件连接,这样可以提高安全性,确定是不能通过网络连接数据库。
skip-locking #避免mysql的外部锁定,增强稳定性
skip-name-resolve #避免mysql对外部的连接进行DNS解析,若使用此设置,那么远程主机连接时只能使用ip,而不能使用域名
max_connections = 3000 #指定mysql服务所允许的最大连接进程数,
max_connect_errors = 1000 #每个主机连接允许异常中断的次数,当超过该次数mysql服务器将禁止该主机的连接请求,直到mysql服务重启,或者flushhosts命令清空host的相关信息
table_cache = 614k #表的高速缓冲区的大小,当mysql访问一个表时,如果mysql表缓冲区还有空间,那么这个表就会被打开通放入高速缓冲区,好处是可以更快速的访问表中的内容。
如果open_tables和opened_tables的值接近该值,那么久该增加该值的大小
max_allowed_packet = 4M #设定在网络传输中一次可以传输消息的最大值,系统默认为1M,最大可以是1G
sort_buffer_size = 16M #排序缓冲区用来处理类似orderby以及groupby队列所引起的排序,系统默认大小为2M,该参数对应分配内存是每个连接独占的,若有100个连接,实际分配的排序缓冲区大小为6*100;推荐设置为6M-8M
join_buffer_size 8M #联合查询操作所使用的缓冲区大小。
thread_cache_size = 64 #设置threadcache池中可以缓存连接线程的最大数量,默认为0,该值表示可以重新利用保存在缓存中线程的数量,当断开连接时若缓存中还有空间,那么客户端的线程将被放到缓存中,如果线程重新被请求,那么请求将从缓存中读取,若果缓存中是空的或者是新的请求,那么线程将被重新创建。设置规律为:1G内存设置为8,2G内存设置为16,4G以上设置为64
query_cache_size = 64M #指定mysql查询缓冲区的大小,用来缓冲select的结果,并在下一次同样查询的时候不再执行查询而直接返回结果,根据Qcache_lowmem_prunes的大小,来查看当前的负载是否足够高
query_cache_limit = 4M #只有小于该值的结果才被缓冲,放置一个极大的结果将其他所有的查询结果都覆盖
tmp_table_size 256M #内存临时表的大小,如果超过该值,会将临时表写入磁盘
default_storage_engine = MYISAM #创建表时默认使用的存储引擎
log-bin=mysql-bin #打开二进制日志功能
key_buffer_size = 384M #指定索引缓冲区的大小,内存为4G时刻设置为256M或384M
read_buffer_size = 8M #用来做MYISAM表全表扫描的缓冲大小