博客说明:
-
仅仅是作为个人学习的一种记录和补充,仅供参考。欢迎指正和共同进步
-
学习视频原网址:
https://www.bilibili.com/video/BV1J5411A7ei?spm_id_from=333.337.search-card.all.click
MySQL简介
一、Mysql数据库概述
什么是mysql
- RDBMS(relational dataabse management system):关系型数据库管理系统
- 简单来说,就是采用了二维表格来组织数据的数据库
- 遵循于GPL开源协议的关系型数据库
- GPL一个很重要的特点,修改源代码后的新版本也要继续开源
- 云环境下使用率第一的数据库
- 常见的关系型数据库
- oracle、mysql、DB2(IBM)、Sybase、SQL server(微软)
- Mysql是C/S架构
- GA(GenerallyAvailable) 开发团队认为该版本是稳定版,可以在较为关键的场合使用。
MySQL数据库的历史(略)
- mysql的创始人
- Monty Widenius
- Mysql AB
- SUN MySQL
- Oracle Mysql
- Monty Widenius
MySQL分支版本
- MariaDB
- ORACLE MySQL (官方版本)
- PERCONA SERVER
- Drizzle
推荐还是使用官方的版本 ORACLE MySQL
- 原因(对比MariaDB)
- MariaDB没有核心存储引擎(社区提供)
- MySQL主要由用户需求与企业驱动,而MariaDB主要由社区驱动;
- MySQL有代码重构;而MariaDB无重构计划
- 不同的分支版本未来将越来越不兼容
MySQL数据库的应用
- 主要应用于互联网行业
- 主要应用于OLTP(On-Line Transaction Processing)业务
On-Line Transaction Processing联机事务处理过程(OLTP),也称为面向交易的处理过程,其基本特征是前台接收的用户数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果,是对用户操作快速响应的方式之一。
对比传统商业关系型数据库
- Mysql社区版免费
- 支持跨平台操作
- 典型应用场景OLTP(特点:并发量大,响应快)
- 一个功能要使用的服务器数量较多(例如一个红包功能可能需要几十台mysql数据库)
- 使用趋势逐年增加
重点:MySQL不同版本的数据库比较
- 不用特地去背,随着慢慢深入自然会理解
DBA的分类
运维DBA
- 负责数据库的相关运维工作
- 监控数据库的状态
- 搭建高可用集群
开发DBA
- 负责应用程序的建表
- 负责表的索引创建
- 审核开发SQL语句
内核DBA
- 负责数据库内核级开发
- 处理内核级的相关BUG
- 跟踪最新数据库内核
建议:
- 开发DBA首选,能够熟悉业务,了解流行的技术,可以往架构师方向发展
- 运维DBA有时相对辛苦,发展方向运维DBA总监,薪资相比开发略低一点点(其实我觉得小孩子才做选择…)
- 不推荐内核DBA,虽然工资高,但是几百万行源码…
如何区分数据库和数据库实例
-
数据库(database): 操作系统或存储上的数据文件的集合。mysql数据库中,数据库文件可以是* .frm、.MYD、.MYI、*.ibd等结尾的文件, 不同存储引擎文件类型不同。
-
数据库实例(instance): 由后台进程或者线程以及一个共享内存区组成。共享内存可以被运行的后台线程所共享。 数据库实例才是真正操作数据库的。
- 注意:MySQL的后台守护程序mysqld是单进程多线程的工作模式。
-
数据库服务器(database server):部署安装数据库实例的服务器。
-
关系
- 通常情况下,数据库实例和数据库是一一对应的关系,也就是一个数据库实例对应一个数据库; 但是,在集群环境中存在多个数据库实例共同使用一个数据库。
二、Mysql数据库安装
学会看官方文档
5.7文档网址:https://dev.mysql.com/doc/refman/5.7/en/
- 进入官网,点击文档
-
单击MySQL Server下的
MySQL Reference Manual
笔记以5.7版本为准
- 学会使用搜索栏
课程后期使用的示例库
- 文档——MORE——示例库
- 后期学sql会用到
Mysql5.7的下载
- 点击Downloads
-
下拉到最后,点击
MySQL Community (GPL) Downloads
-
跳转后点击社区版本
- 查找以前的GA版本
- 选择相应版本下载,我下载的是5.7.37
- 直接下载
企业版和社区版的区别
- 企业版多提供了一些功能
- 注:不过这些功能都有相应的开源的解决方案
在linux上安装
5.7版本的安装
-
查看官网
-
https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html
-
- 执行相关命令
yum search libaio # search for info
yum install libaio # 安装依赖
groupadd mysql # 创建mysql组
useradd -r -g mysql -s /bin/false mysql # 创建mysql用户,指定属组和shell
cd /usr/local # 切换到安装目录
tar zxvf /path/to/mysql-VERSION-OS.tar.gz # 解压mysql包
ln -s full-path-to-mysql-VERSION-OS mysql # 建立软链接
cd mysql # 进入安装目录
mkdir mysql-files # 创建mysql-files目录
chown mysql:mysql mysql-files # 修改属主和属组为mysql
chmod 750 mysql-files # 修改目录权限为750
bin/mysqld --initialize --user=mysql # mysql初始化(指定用户),该步骤会产生数据库初始密码,记得保存
bin/mysql_ssl_rsa_setup # 设置安全加密连接(SSL),数据传输会采用加密形式,适合敏感数据
bin/mysqld_safe --user=mysql & # 以安全的方式后台启动mysql(指定用户)
# Next command is optional
cp support-files/mysql.server /etc/init.d/mysql.server # 拷贝.server文件给service管理
-
mysql_file的作用
- mysql-files:主要用于数据文件的导入与导出(备份与还原),MySQL的备份会产生一个文件,可以xxx.sql或xxx.txt。mysql-files就是导入与导出时,所指定的默认目录。
- mysql-files:主要用于数据文件的导入与导出(备份与还原),MySQL的备份会产生一个文件,可以xxx.sql或xxx.txt。mysql-files就是导入与导出时,所指定的默认目录。
-
目录结构和作用
-
编写简易的配置文件(配置文件会随着课程逐渐增加,安装只要写几个基本参数就ok)
# vim /etc/my.cnf
[mysqld]
prot=3306 # 指定端口
user=mysql # 指定运行过程中的用户
datadir=/mdata/mysql_data # 指定数据目录
log_error=error.log # 指定错误日志名称
validate_password=OFF # 关闭MySQL密码强度检测
socket=/tmp/mysql.sock # 指定mysql套接字
- 在配置文件中添加如下的[client]标签可以直接免密登录
[client]
user=root
password=your_passwd
- 在配置文件中添加[mysql]标签和prompt属性可以是前面的提示符更加详细
[mysql]
prompt=(\\u@\\h) [\\d]>\\_
- 一些后续操作
# 添加环境变量
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
source /etc/profile
#设置开机自启动(centos6下,7可以用systemctl管理,自己去搜service文件)
chkconfig --list #查询系统中的所有开机启动项
chkconfig --add mysql #必须与/etc/init.d目录下的脚本名称一致
chkconfig mysql on #把2345四种模式全部开启(3字符界面,5图形界面)
- 一些注意事项
- 想查看mysql软件有没有初始化成功,主要看数据目录有没有内容
- 报错可以查看错误日志进行排查
mysql_safe
是一个守护mysqld进程的脚本程序,旨在mysqld意外停止时,可以重启mysqld进程- 默认情况下,GBLIC版本的数据库要求安装到/usr/local/mysql目录,其mysql.server脚本中对应的目录也是/usr/local/mysql,可以考虑更改其basedir以及datadir两个变量
几张默认库介绍
information_schema
:记录了所有的元数据信息mysql
:记录了用户信息、权限的表performance_schema
:记录性能监控的表- sys:5.7版本新增的数据库,sys数据库里面包含了一系列的存储过程、自定义函数以及视图来帮助我们快速的了解系统的元数据信息。
mysql5.6版本的安装
- 与mysql5.7安装的差异
- 初始化命令为
scripts/mysql_install_db
- 默认初始化安装后无密码
- 初始化命令为
- 安装命令,大体相同,不做详细解释
yum search libaio
yum install libaio
$> groupadd mysql
$> useradd -r -g mysql -s /bin/false mysql
$> cd /usr/local
$> tar zxvf /path/to/mysql-VERSION-OS.tar.gz
$> ln -s full-path-to-mysql-VERSION-OS mysql
$> cd mysql
$> scripts/mysql_install_db --user=mysql # mysql5.6初始化安装完无密码
$> bin/mysqld_safe --user=mysql &
# Next command is optional
$> cp support-files/mysql.server /etc/init.d/mysql.server
- 目录结构
-
为什么最后要将安装目录的权限改为root:mysql?为什么数据目录还是mysql:mysql?
- 还是为了安全考虑,使用过程中默认用mysql用户,仅给予他对数据目录的修改权限,而安装目录不给予相关权限。
-
设置密码的不同
- 5.7可以直接
set password = '123';
- 5.6需要
set password = password('123');
- 5.7可以直接
-
查看参数的默认值:
mysqld --help --verbose
版本升级
-
mysql5.6版本升级到mysql5.7版本
-
先停止mysql服务
-
强烈建议还是先备份数据目录,以防万一
-
修改软链接,启动mysqld。发现错误日志里面很多错误信息
-
使用
mysql_upgrade -s
升级系统表。重启mysql服务,查看错误日志,发现错误解决。
-
-
注:这种更新称之为In-Place Upgrade,这种升级方式非常快速,几乎在秒级。但是要停止服务(解决方案:可以先从机升级,进行ip漂移,再升级主机,直到整个高可用集群都升级完毕)。
-
可以查看对应官方文档
https://dev.mysql.com/doc/refman/5.7/en/upgrade-binary-package.html
-
mysql_upgrade可以跨很多版本进行升级。高版本兼容低版本。
-
一般不使用导入导出进行升级,因为线上的业务的数据目录一般都好几百G。
-
关于mysql_check和触发器的导入导出后续再研究