第二章:MySQL介绍与安装
为什么选择MySQL
- mysql性能卓越,服务稳定,很少出现异常宕机
- mysql开源免费,无版权制约,自主性及使用成本低
- 产品耦合度,mysql支持多种操作系统,支持多开发语言,特别是php
- 技术积累,庞大的活跃的社区,
- 软件体积小,安装简单,易于维护
MySQL数据库分类与版本升级
MySQL官网
http://www.mysql.com/
,MySQL版本采用双授权政策
,和大多数开源产品路线一样,分为社区版
和商业版
,并且这两个版本又分别分成四个版本依次发布,Alpha版
、Beta版
、RC版
和GA版
GA版即为正式版
1:社区版和企业版的区别
- 首先价格上,社区版完全免费,企业版需要高额的费用
- 技术上,企业版具有MySQL企业级服务器、MySQL企业级系统监控工具。企业版经过严格的测试认证,相对企业版,社区版的开发测试环境没有那么严格
- 服务方面,社区版mysql官方不提供任何技术支持,使用过程出现任何意外不负任何责任,企业版与之相反
- 商业版不支持GPL协议
2:MySQL产品路线
三条产品线
1)5.0.XX到5.1.XX产品系列
这条产品线继续完善改进用户体验和性能,同时增加新功能,是mysql早期产品的延续,如rhel6自带的mysql
2)5.4.XX开始到5.7.XX产品系列
mysql社区和第三方公司percona整合的,吸收新的算法和存储引擎,现在已经到了5.6.26
3)6.0.XX到7.X.XX产品系列
主要是为了更好的推广MySQL Cluster版本,提供Cluster版本的性能和稳定性,这个版本比较少公司用,原因是出来太晚了
MySQL架构和结构分析
官方架构图
每个虚线框为一层,总共三层。
第一层,服务层(为客户端服务):为请求做连接处理,授权认证,安全等。
第二层,核心层:查询解析,分析,优化,缓存,提供内建函数;存储过程,触发器,视图。
第三层,存储引擎层,不光做存储和提取数据,而且针对特殊数据引擎还要做事务处理。
内部组件结构图
MySQL安装
生产环境怎么选择MySQL版本
1:选择稳定版 选择社区的GA版
2:产品线,主要是5.1和5.5 ,多数5.5
3:选择MySQL GA版发布6个月以上的版本
4:最好向后较长时间没有更新发布的版本
5:与开发人员使用版本的兼容
6:测试环境跑3-6个月
7:到生产环境非核心业务跑几个月
MySQL安装方法
1:使用二进制方式安装,rpm/yum
2:源码编译,产品线路1用普通编译安装,线路2用cmake编译安装5.5/6/7
源码编译安装mysql5.5.32
如果是mysql5.1系列的直接使用编译安装,不用cmake
1)安装cmake编译工具
[root@localhost ~]# yum install cmake -y
2)下载MySQL
[root@localhost ~]# wget http://ftp.ntu.edu.tw/pub/MySQL/Downloads/MySQL-5.5/mysql-5.5.53.tar.gz
3)安装依赖
[root@localhost ~]# yum install ncurses-devel –y
4)添加用户
[root@localhost ~]# useradd -u 8001 -s /sbin/nologin mysql
5)编译安装
[[email protected] ~]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_DATADIR=/usr/local/mysql/data -DMYSQL_USER=mysql
参数说明:
-DCMAKE_INSTALL_PREFIX 数据库安装目录-DMYSQL_UNIX_ADDR sock文件路径-DDEFAULT_CHARSET 默认字符集-DDEFAULT_COLLATION 默认字符校对-DWITH_EXTRA_CHARSETS 扩展字符支持 默认all-DWITH_storage_STORAGE_ENGINE 存储引擎的支持,默认支持MyISAM,MERGE,MEMORY,CVS存储引擎-DENABLED_LOCAL_INFILE=1 启用加载本地数据-DMYSQL_DATADIR 数据存放目录-DMYSQL_USER mysql运行用户
[root@localhost ~]# make -j 4 && make install
6)授权用户
[root@localhost ~]# chown -R mysql:mysql /usr/local/mysql/[root@localhost ~]# chmod 1777 /tmp
7)创建配置文件
[[email protected] ~]# cp support-files/my-large.cnf /etc/my.cnf
8)设置环境变量
[root@localhost ~]# echo ‘export PATH=/usr/local/mysql/bin:$PATH‘ >>/etc/profile[root@localhost ~]# source !$
10)初始化数据库
[root@localhost ~]# chmod +x scripts/mysql_install_db[root@localhost ~]# /usr/local/mysql/scripts/mysql_install_db --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
看到两个ok就成功
11)初始化安全配置
[root@localhost ~]# mysql_secure_installation 安全初始化配置
12)排错
出现这种错误
Enter current password for root (enter for none):ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
干掉mysql进程
[root@localhost ~]# pkill mysqld[root@localhost ~]# rm -rf /usr/local/mysql/data/*
重新初始化
13)MySQL安全优化小配置 用户安全
mysql> select user,host from mysql.user;mysql> delete from mysql.user where user=‘‘;mysql> delete from mysql.user where host=‘server01.cn‘;mysql> delete from mysql.user where host=‘::1‘;mysql> select user,host from mysql.user;+------+-----------+| user | host |+------+-----------+| root | 127.0.0.1 || root | localhost |
或者把用户都删了,添加一个额外的管理员
mysql> delete from mysql.user;mysql> grant all privileges on *.* to [email protected]‘localhost‘ identified by ‘123456‘ with grant option;mysql> flush privileges;mysql> select user,host from mysql.user;+--------+-----------+| user | host |+--------+-----------+| system | localhost |+--------+-----------+1 row in set (0.00 sec)mysql> drop database test;
14)mysql_secure_installation
mysql -uroot –p 登录mysql
MySQL工作模式及常用命令
交互式模式:mysql>
# 交互式模式下的客户端命令mysql> help # 获取命令帮助mysql> \? # 同上mysql> \c # 取消命令执行mysql> \g # 发送命令至服务器端mysql> \G # 发送命令至服务器端,垂直显示结果mysql> \q # 退出mysql> \! # 执行系统shell命令mysql> \s # 显示服务器端状态信息mysql> \. /path/to/mysql_script.sql # 批量执行sqlmysql> \u # 切换数据库
交互式模式下的服务器端命令(需要命令提示符,默认为分号)
mysql> help contents 能够获取帮助的分类信息mysql> help keyword 获取关键字的帮助信息,如help select
脚本模式:mysql < /path/to/mysql_script.sql
注:常用于主从复制批量导入数据时
连接MySQL
连接类型
本地通信
:客户端与服务器端位于同一主机,而且还要基于127.0.0.1(localhost)地址或lo接口进行通信基于sock文件通信:如mysql -hlocalhost -uroot -p --socket=/tmp/mysql.sock
远程通信
:客户端与服务器端位于不同的主机,或在同一主机使用非回环地址通信基于 TCP socket通信
mysql客户端选项
实例
-u,--user # 指定连接用户-h,--host # 指定连接主机-p,--password # 指定连接密码--protocol={tcp|socket|memory|pipe} # 指定连接协议-P,--port # 指定连接端口,默认监听端口:tcp/3306--socket # 指定本地连接的sock文件--compress # 数据传输采用压缩格式-D,--database # 指定连接后默认使用的数据库-H,--html # 指定产生html输出-X,--xml # 指定产生xml输出--safe-updates # 拒绝使用无where子句的update或delete命令# 使用实例:mysql -hlocalhost -uroot -p
mysql命令提示符
mysql> # 等待输入命令-> # 等待继续输入‘> # 等待结束单引号“> # 等待结束双引号`> # 等待结束反引号/*> # 注释,不执行,需以*/结束注释
mysql的快捷键
ctrl+w:# 删除光标之前的单词ctrl+u:# 删除光标之前至命令行首的所有内容ctrl+y:# 粘贴所有ctrl+w或ctrl+u删除的内容ctrl+a:# 移动光标至行首ctrl+e:# 移动光标至行尾
MySQL管理工具mysqladmin
# 使用格式:mysqladmin [options] command [arg] [,command [arg]] …# 常用的command包括:create DB_Name:# 创建数据库drop DB_Name:# 删除数据库debug:# 打开调试日志并记录于error log中status:# 显示简要状态信息--sleep #:设置间隔时长--count #:设置显示的批次extended-status:# 显示扩展信息,输出mysqld的各状态变量及赋值,相当于执行“mysql> show global status”variables:# 输出mysqld的各服务器变量flush-hosts:# 清空主机相关的缓存:DNS解析缓存;此前因为连接错误次数过多而被拒绝访问mysqld的主机列表flush-logs:# 日志滚动,只能滚动二进制日志和中继日志refresh:# 相当于同时使用flush-hosts和flush-logsflush-privileges:# 通知mysqld重读授权表reload:# 功能同“flush-privileges”flush-status:# 重置状态变量的值flush-tables:# 关闭当前打开的表文件句柄flush-threads:# 清空线程缓存kill:# 杀死指定的线程,需指定线程ID;可以一次杀死多个线程,以逗号分隔,但不能有多余空格password:# 修改当前用户的密码ping:# 模拟ping操作,检测mysqld是否在线processlist:# 显示mysqld线程列表shutdown:# 关闭mysqld进程start-slave,stop-slave:# 启动/关闭从服务器线程
MySQL数据文件解析
MyISAM表:每表有3个文件,都位于数据库目录中
tb_name.frm:# 表结构定义文件tb_name.MYD:# 数据文件tb_name.MYI:# 索引文件
InnoDB表:有2种存储方式
默认方式
:每表有1个独立文件和一个多表共享的文件
tb_name.frm:# 表结构定义文件,位于数据库目录中ibdata#:# 共享的表空间文件,默认位于数据目录(datadir指向的目录)中,如ibdata1
自定义方式
:独立的表空间
tb_name.frm:#表结构定义文件tb_name.ibd:# 独有的表空间文件# 在MySQL初始化中打开独立表空间功能的方法:vi /etc/my.cnf (在[mysqld]段下添加)innodb_file_per_table = ON# 注:表空间:table space,是由InnoDB管理的特有格式的数据文件,内部可同时存储数据和索引