02-mysql高级篇-再叙mysql架构及环境准备
点击蓝色“潭时录”关注我丫
每天和小潭一起快乐的学习~
你好,我是在学mysql的小潭。在基础篇部分,我们已经了解过mysql架构方面的知识,现在我们将在此篇推文中做一个简单的回顾,同时也将对linux下的mysql做安装和配置。
mysql概述
1.mysql是一个关系型数据库管理系统,由瑞典mysql ab公司开发,目前属于Oracle公司 |
2.mysql是一种关联数据库管理系统,将数据保存在不同的表中,而不是将所有数据放在一个大仓库中,这样就增加了速度并提高了灵活性 |
3.mysql是开源的,所以不需要支付额外的费用 |
4.mysql支持大型的数据库,可以处理拥有上千万条记录的大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大支持4GB,64位系统支持最大表文件为8TB |
5.mysql使用标准的sql数据语言形式 |
6.mysql可以允许于多个系统上,并且支持多种语言,这些编程语言包括 c,c++,java,python,php等 |
7.mysql对php有很好的支持 |
8.mysql可以定制,采用GPL协议,可以修改源码来开发自己的mysql系统 |
mysql高阶的知识储备需求:
1.mysql内核的编码,优化和改写
2.mysql的优化
3.mysql服务器的优化
4.各种参数常量的设定
5.查询语句的优化
6.主从复制
7.软硬件升级
8.容灾备份
9.sql编程
mysql的linux版安装
基础篇的学习中,我们接触到的是windows版本的mysql安装及使用,而在实际工作场景中,基本是将数据库的使用场景转移到linux系统上,因此高级篇我们将更多偏向于实际应用,在此将介绍mysql的linux版安装方法。
linux版本的mysql,主流的有rpm和二进制源码安装方式。我们将使用rpm的安装方式进行介绍,其中mysql版本选用5.7版本。
linux:
mysql:
http://dev.mysql.com/downloads/mysql
检查当前系统是否安装过mysql,如有已安装的有关mysql的软件或依赖,先做清除处理
可将物理pc下载的rpm包复制到共享文件夹下(共享文件夹设置可参看虚拟机教程文档末尾部分)
root用户切换: su - root
查询命令:rpm -qa|grep -i mysql
删除命令:rpm -e --nodeps RPM软件包名(该名字是查询命令获取到的名字)
或使用yum命令(会自动删除/etc/my.cnf文件):yum remove mysql-libs
补充:有些系统可能存在mariadb-libs的依赖包,可以使用以下命令进行查询确认和删除:
rpm -qa|grep -i mariadb
yum remove mariadb-libs
安装mysql依赖包(可使用tab键自动补全文件名称)
整体安装顺序依次为common->libs->client->server
补充:ivh中, i-install安装;v-verbose进度条;h-hash哈希校验
rpm -ivh mysql-community-common-xxxx.rpm
rpm -ivh mysql-community-libs-xxxx.rpm
安装mysql客户端
rpm -ivh MySQL-client-xxx-xxx.linux.xxx.rpm
安装mysql服务端
rpm -ivh MySQL-server-xxx-xxx.linux.xxx.rpm
查看mysql是否安装成功及其版本
查看版本:mysqladmin --version
查看mysql安装时创建的mysql用户和mysql组
cat /etc/passwd|grep mysql
cat /etc/group|grep mysql
mysql服务的启动和停止
查看mysql服务:ps -ef|grep mysql
启动服务:service mysqld start
停止服务:service mysqld stop
启动报错处理方法:
1)以上截图的报错信息提示配置文件中mysql数据库文件的存放路径下不为空,我们先查看下配置文件中的数据文件存放路径:
cat /etc/my.cnf
2)对datadir下的文件做清空处理,后手动初始化数据库,最后重试重启mysql服务
rm -rf /var/lib/mysql/*
mysqld --initialize --user=mysql
service mysqld start
mysql服务启动后的连接操作
首次登录mysql时需要使用mysql提供的临时密码
查看及获取临时密码:cat /var/log/mysqld.log|grep 'temporary password'
使用临时密码登录并做密码修改:mysql -u root -p
修改mysql登录密码:ALTER USER USER() IDENTIFIED BY '123456';
区别于基础篇的密码重设方法,此处需要使用ALTER USRE方式
设置自启动mysql服务
chmod +x /etc/init.d/mysqld # 确保mysqld有可执行权限
chkconfig --add mysqld # 设置开机自启动mysql
chkconfig --list|grep mysql # 0:关闭 1:关闭 2:关闭 3:启用 4:启用 5:启用 6:关闭 0-6代表含义可以使用cat /etc/inittab查看含义
ntsysv # t图形界面,可以翻到mysql这一行查看到[*]即表示开机后会自动启动mysql
查看mysql数据库文件的位置(类似Windows环境的mysql配置的data文件夹)
ps -ef|grep mysql # 获取到的信息中 --datadir=xxxx
路径 |
含义 |
备注 |
/var/lib/mysql |
mysql数据库文件的存放路径 |
/var/lib/mysql/atguigu.cloud.pid |
/usr/share/mysql |
配置文件目录 |
mysql.server命令及配置文件 |
/usr/bin |
相关命令目录 |
mysqladmin, mysqldump等命令 |
/etc/init.d/mysqld |
启动和停止相关脚本 |
配置文件的说明
在安装mysql-community-server-xxxx.rpm组件,即服务端后,会自动生成以下配置文件或文件夹:
1)/etc/下:my.cnf文件和my.cnf.d文件夹
2)/var/lib/下:mysql文件夹,mysql-files文件夹和mysql-keyring文件夹
3)/var/log/下:mysql.log文件
4)/var/run/下:mysqld目录
修改字符集和数据存储路径
字符集相关:
1.查看字符集(登录mysql):show variables like 'character%';
或 show variables like '%char%';
默认字符集客户端和服务器端都用了latin1,会对存储的中文造成乱码现象。
2.修改字符集:vim /etc/my.cnf
编辑模式:i
保存退出:esc + :wq
配置内容(其他内容可以在后续逐步添加):
[client] # 需要添加的设置
#password = your_password
port = 3306
socket = /var/lib/mysql/mysql.sock
default-character-set=utf8 # 需要添加的设置
# The MySQL server
[mysqld]
port = 3306
# start 需要添加的部分
character-set-server=utf8 # 需要添加的设置
collation-server=utf8_general_ci # 需要添加的设置
# end 需要添加的部分
socket = /var/lib/mysql/mysql.sock
skip-external-locking
key_buffer_size = 384M
max_allowed_packet = 1M
table_open_cache = 512
sort_buffer_size = 2M # 排序缓冲池大小,order by/group by
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 32M
thread_concurrency = 8
[mysql] # 需要添加的设置
no-auto-rehash
default-character-set=utf8 # 需要添加的设置
3.重启mysql服务,重新连接后重新建库建表,可以正常插入中文字符
service mysqld stop
service mysqld start
或
service mysqld restart
mysql的配置文件介绍
主要配置文件:
二进制日志log-bin
主要用于主从复制
# Replication Master Server(default)
# binary logging is required for replication
log-bin=mysql-bin
错误日志log-error
默认关闭
记录严重的警告和错误信息、每次启动和关闭的详细信息等
查询日志log
默认关闭
记录查询的sql语句,如果开启会降低mysql的整体性能,因为记录日志需要消耗系统资源
数据文件
两类系统
windows下:mysql安装位置下的data目录可以挑选很多库
linux下:默认路径 /var/lib/mysql
可以先查看当前系统中全部的库后再进去
frm文件
存放表结构
myd文件
存放表数据
myi文件
存放表索引
如何配置
windows下:my.ini 文件
linux下:/etc/my.cnf 文件
mysql架构介绍
总体概述
和其他数据库相比,mysql有些与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。 主要体现在存储引擎的架构上: 插件式的存储引擎架构将查询处理和其他的系统任务以及数据的提取分离开来。可以根据实际需求和业务选择合适的存储引擎。 |
1.连接层 最上层是一些客户端和连接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似tcp/ip的通信。主要完成一些类似于连接处理、授权认证及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。 |
2.服务层 第二层架构主要完成大多数的核心服务功能,如SQL接口、完成缓存的查询、SQL的分析和优化及部分内置函数的执行。所有跨存储引擎的功能也在这一层实现。 如过程、函数等,在该层,服务器会解析查询并创建相应的内部解析树,并对其完成相应的优化,如确定查询表的顺序、是否利用索引等,最后生成相应的执行操作。 如果是select语句,服务器还会查询内部的缓存。缓存空间足够大,在解决大量读操作的环境中能够很好的提升系统的性能。 |
3.引擎层 存储引擎层,存储引擎真正的负责了mysql中数据的存储和提取,服务器通过API与存储引擎进行通信,不同的存储引擎具有的功能不同,可以根据实际需要进行选取 |
4.存储层 数据存储层,主要是将数据存储在运行于裸设备的文件系统上,并完成与存储引擎的交互。 |
mysql存储引擎
查看命令
1.使用命令查看存储引擎
mysql> show engines; # 查看mysql已提供的存储引擎
mysql> show variables like '%storage_engine%'; # 查看mysql当前默认的存储引擎
MyISAM和InnoDB引擎的对比
对比项 |
MyISAM |
InnoDB |
主外键 |
不支持 |
支持 |
事务 |
不支持 | 支持 |
行表锁 |
表锁,即使操作一条记录也会锁住整个表,不适合高并发操作 |
行锁,操作时只锁住某一行,不对其它行产生影响,适合高并发操作 |
缓存 |
只缓存索引,不缓存真实数据 |
缓存索引和真实数据,对内存要求较高,而且内存大小对性能有决定性影响 |
表空间 | 小 | 大 |
关注点 |
性能 | 事务 |
默认安装 |
Y |
Y |
下期预告:索引优化分析