前面Linux运维基础告一段落,今天开始新一阶段的高级运维课程!
一、mysql基础知识
1、关系型数据库基础理论及MySQL数据库基础架构
关系型数据的基础理论
文件系统上:最初所有的数据都存储于文件中,每次读取文件时需要把所有的块数据都加载到内存中, 通过工具grep查询需要的数据,如果文件比较大(100万行),这时加载会很慢而且占用资源比较大。
数据管理软件:
层次模型、网状模型、关系模型、对象-关系模型、非关系模型
DBMS: Database Management System
mysql对每个客户请求都是由一个线程来响应,
2、MySQL核心概念及MariaDB编译安装
数据存储机制:
数据按索引顺序存储,索引顺序文件
数据是按需随机存放,堆文件
mysql核心部件组成:
connection pool(连接池) ,负责用户认证、线程重用、连接限制、内存检查、提供缓存
sql interface(sql 接口),负责DML、DDL、触发器各类功能
parser(分析器),对象权限检查,查询转换,把用户写的sql语句转换为数据库能执行的语句。
optimizer(优化器),优化mysql性能
caches&&buffers(缓存和缓冲),用于提升mysql I/O方面性能
之后就是选择使用存储引擎。存储引擎就可以直接读取文件系统中的文件。
MyISAM、InnoDB、Memory、Merge、Federated、CSV、Archive、Blackholl、Aria、SphinxSE、 TokuDB
二、安装方式: (rpm包、os vendor、mysql)(通用二进制格式)(源码包)
编译方式安装mariadb:
#yum install cmake 安装cmake编译环境
#useradd -r mysql
#mkdir /mydata/data -pv
#chown -R mysql.mysql /mydata/data
#cmake . -DMYSQL_DATADIR=/mydata/data -DWITH_SSL=system 默认路径/usr/local/mysql 安装选 项参考 《MySQL Compiling and Installation》
#make && make install
#cd /usr/local/mysql
#cp support-files/mysql.server /etc/rc.d/init.d/mysqld
#chmod +x /etc/rc.d/init.d/mysqld
#cp support-files/my-lange.cnf /etc/my.cnf
#vi /etc/my.cnf 定义路径 datadir=/mydata/data
#ls /mydata/data 查看,没有数据库 需要初始化数据库
#scripts/mysql_install_db --user=mysql --datadir=/mydata/data
#services mysqld start
#/usr/local/mysql/bin/mysql 访问mysql
#SHOW ENGINES 查看支持的收索引擎
#SHOW GLOBAL VARIABLES LIKE '%SSL%'
MySQL的数据文件:文件和日志
文件:数据文件和索引文件
日志:事务日志、二进制日志、查询日志、慢查询日志、错误日志、中继日志
MySQL的服务器变量:
SHOW {GLOBAL|SESSION} VARIABLES [LIKE CLAUSE];
MySQL的状态变量:
SHOW {GLOBAL|SESSION} STATUS [LIKE CLAUSE];
三、安装和访问MySQL(初始化)
1、给root设置密码
@内置命令 set password for 'username@host' = password('password')
>use mysql
>select user,password,host from user; 查看管理员账号和匿名账号(user表)
>set password for 'root@localhost' = passwrod('magedu')
>select user,password,host from user;
@update user set password=PASSWORD('magedu') where user='root';
@#mysqladmin -u root -p password 'new_password' 回车后输入旧密码
如:/usr/local/mysql/bin/mysqladmin -u root -h127.0.0.1 -p password 'new_password'; 回车输入旧密码
2、删除匿名用户
@ #drop user ''@'hostname’;删除匿名用户
修改环境变量:vi /etc/profile.d/mysql.sh
添加 export PATH=/usr/local/mysql/bin:$PATH
#./etc/profile.d/mysql.sh
#mysql -u root -p
#输入旧密码
@ >delete from user where user=''; 删除匿名用户
四、配置文件:所有的mysql程序都可以以此文件作为其配置文件
例如:mysqld, mysql, mysqladmin, mysqld_safe
[program]
parameter1 =
获取帮助:mysqld --verbose --help
--option, -option: 命令行选项
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
--defaults-extra-file=#:额外读取的配置文件;
--defaults-file=#: 仅读取此处指定的配置文件
mysql程序的类别:
服务器端程序:启动并监听于套接字上;mysqld, mysqld_safe, mysqld_multi
客户端程序:可通过mysql协议连入服务器并发出请求的;mysql, mysqlbinlog, mysqladmin, mysqldump等
工具程序:运行于服务器进程所在的主机,实现一些管理或维护操作,myisamchk
客户端程序的通用选项:
-u, --user= -u root, -uroot, --user=root
-h, --host=
-p, --password=
--protocol=
tcp:
socket: unix sock
pipe:
memory:
--port: 当Protocol是tcp时使用的端口;
--socket: 相当于--protocol socket
其它选项: -D --database=
五、mysql客户端程序:mysql
批模式:mysql < /path/from/somefile.sql
交互式模式:
命令有两类:
客户端命令:help可列出所有命令
clear, \c:
ego, \G:
go, \g:
delimiter, \d:
quit, exit, \q:
source, \. /path/from/somefile.sql:
相当于mysql < /path/from/somefile.sql
system, \! COMMAND: 运行shell命令
use, \u DB_NAME: 将指定的库设为默认库
服务器端命令:help KEYWORD
SQL语句:DDL、DML
mysqladmin工具:
create DB_NAME:
mysqldadmin [options] create DB_NAME;
drop DB_NAME:
status: 显示mysqld的简单要状态信息,专用选项--sleep #: 间隔秒数,--count #: 显示的次数
mysqladmin status --sleep2 --count3
mysqladmin status -uroot -p123456
extend-status: 显示mysqld的所有服务器状态变量
flush-privileges: 刷新授权表,相当于reload命令
flush-hosts: 清除dns缓存及被拒绝的客户端列表缓存
flush-logs: 滚动日志, 二进制日志和中继日志
flush-status: 重置各状态变量
flush-tables: 关闭当前打开的所有的表文件句柄;
flush-treads: 重置线程缓存;
password: 设置密码
ping: 测试服务器是否在线
processlist: 显示当前服务器上的所有线程
refresh: 相当于执行flush-hosts和flush-logs
shutdown: 关闭服务器进程 ;
start-slave, stop-slave: 启动、关闭从服务器线程;
variables: 显示服务器变量
mysql功能特性补充:
1、命令历史;
2、命令行编辑功能:
Ctrl+a: 快速移动光标至行首
Ctrl+e: 快速移动光标至行尾
Ctrl+w: 删除光标之前的单词
Ctrl+u: 删除行首至光标处的所有内容
Ctrl+y: 粘贴使用Ctrl+w或Ctrl+u删除的内容
3、mysql图形化的客户端程序:phpMyAdmin、Navicat for mysql、Toad for mysql、mysql front、sqlyog
开发DBA:数据库设计(E-R)、SQL语句编写、自定义函数、存储过程、存储函数、触发器、事件调度器
管理DBA:安装、升级服务器程序, 数据备份、恢复, 用户和权限管理, 指标监控、性能分析、基准测试, 语句优化, 数据字典, 按需配置服务器(服务器变量:默认的存储引擎、缓存、日志), 服务器的规模扩展架构设计及实施
SQL语言的组成部分: DDL DML DCL 主键、外键、惟一键、条件、非空、事务 视图定义 事务控制
六、mysql数据类型及服务器变量
数据类型的功用: 1、存储的值类型; 2、占据的最大存储空间; 3、定长、变长;
4、如何被索引和排序;5、是否能够被索引;
数据字典:系统编目(system catalog) 保存了数据库服务器上的元数据
元数据:关系的名称 每个关系中各字段的名称 各字段的类型和长度 约束
每个关系上的视图的名字及视图的定义 授权的用户名字 用户的授权和帐户信息
统计类数据 每个关系中字段数; 每个关系中行数; 每个关系的存储方法;
元数据也通过数据库保存(infomation_schema、mysql、performance_schema)
数据类型:
字符型CHAR VARCHAR BINARY VARBINAR
数值型 精确数值型INT DECIMAL 近似数值型 FLOAT DOUBLE
日期时间型:DATE TIME DATETIME YEAR STAMP
内建类型:ENUM SET
字符型:
CHAR:255
VARCARH:65535
TINYTEXT: 255
TEXT: 65535
MEDIUMTEXT: 2^24
LONGTEXT: 2^32
BINARY: 255
VARBINARY:65535
TINYBLOB
BLOB
MEDIUMBLOG
LONGBLOB
修饰符:
NULL
NOT NULL
DEFAULT 'string'
CHARACTER SET 'set'
SHOW CHARACTER SET;
COLLATION 'collation'
SHOW COLLATION;
字符有通配符: %: 匹配任意长度的任意字符、 _: 匹配任意单个字符;
整型:
TINYINT: 1Byte、
SMALLINT: 2Bytes
MEDIUMINT: 3Bytes
INT:4Bytes
BININT:8Bytes
修饰符:
UNSIGNED
NULL
NOT NULL
DEFAULT #
AUTO_INCREMENT: 自动增长
特殊要求:非空,且必须是主键或惟一键;
浮点型: FLOAT 单精度 DOUBLE 双精度
修饰符:NOT NULL、NULL、DEFAULT、UNSIGNED
布尔型:没有专用布尔型,其是TINYINT(1)的别名;
日期时间型:DATE: 3Bytes、TIME: 3Bytes、DATETIME: 8Bytes、TIMESTAMP: 4Bytes
YEAR(2):1Byte、YEAR(4): 1Byte
修饰符:NULL、 NOT NULL、 DEFAULT VALUE
内建类型:
ENUM:枚举,表示仅能从给出的选项选择其中一个;
ENUM('string1','string2')
SET:集合, 表示能使用给出的元素组合成字符串
SET('a','b','c')
MySQL sql_mode:
sql模式:用来限定mysqld的工作特性
TRADITIONAL
STRICT_TRANS_TABLES:对支持事务的表使用严格模式;
STRICT_ALL_TABLES:对所有表使用严格模式
5、服务器变量的类型:
全局:对所有会话都生效;
所有的会话在建立时都从全局继承,但继承完成后每个会话独立维护自己会话级变量
修改全局的服务器变量仅对之后建立的会话生效
要求有管理权限
会话:仅对当前会话有效;
修改即刻生效;
不要求管理权限
修改方式:
动态修改: 会话级别,立即生效;全局级别,新建立的会话有效;重启服务会失效
静态修改:要修改配置文件,或修改传递给mysqld的选项的值;重启后有效;
并非所有的服务器变量都支持动态修改;
查看服务器变量:
mysql> SHOW {GLOBAL|SESSION} VARIABLES [LIKE clause];
mysql> SELECT @@{GLOBAL|SESSION}.VARIABLE_NAME;
mysql> SELECT * FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME='';
mysql> SELECT * FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='';
动态修改变量的值:
mysql> SET {GLOBAL|SESSION} VARIABLE_NAME='VALUE'
让设置永久有效的方式:
[mysqld]
sql_mode = 'STRICT_ALL_TABLES'