什么是 MySQL?
MySQL 高手是怎样练成的?
CentOS 6 通过 yum 安装 mysql 5.6
网上参考资料
https://www.cnblogs.com/micfox/articles/10989905.html
https://blog.csdn.net/MissDreamY/article/details/104938194
检查当前系统是否安装过 mysql
yum list installed | grep mysql
mysql-libs.x86_64 5.1.73-5.el6_6 @anaconda-CentOS-201508042137.x86_64/6.7
yum -y remove mysql-libs.x86_64
安装及配置
wget http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm
rpm -ivh mysql-community-release-el6-5.noarch.rpm
yum repolist all | grep mysql
yum install mysql-community-server -y
mysql 服务的启动与停止
service mysqld start
service mysqld stop
service mysql status
备注:正在启动 mysqld: [失败] 问题
rm -fr /var/lib/mysql/*
rm /var/lock/subsys/mysqld
killall mysqld
service mysqld start
查看安装时创建的 mysql 用户和 mysql 组
cat /etc/passwd|grep mysql
cat /etc/group|grep mysql
设置远程 root
service mysqld start
mysql_secure_installation
mysql -uroot -p
设置 mysql 开机启动
chkconfig mysqld on
chkconfig --list | grep mysqld
ntsysv
修改 mysql 配置文件位置
cd /usr/share/mysql/
cp /usr/share/mysql/my-default.cnf /etc/my.cnf
修改 mysql 字符集
查看 mysql 编码字符集
show variables like '%char%';
# 或者
show variables like '%character%';
修改配置文件
vim /etc/my.cnf
[client]
default-character-set=utf8
[mysqld]
character_set_server=utf8
character_set_client=utf8
collation-server=utf8_general_ci
[mysql]
default-character-set=utf8
测试配置文件是否生效
create database db01;
create table user(id int not null, name varchar(20));
insert into user values(1,'张三1');
select * from user;
show variables like '%char%';
mysql 的安装位置
ps -ef|grep mysql
路径 | 解释 |
---|---|
/var/lib/mysql/ | mysql 数据库文件的存放路径 |
/usr/share/mysql | 配置文件目录 |
/usr/bin | 相关命令目录 |
/etc/init.d/mysql | 服务启停相关 |
创建用户
create user zhang3 identified by '123123';
查看用和权限的相关信息
select host, user, password, select_priv, insert_priv,drop_priv from mysql.user;
mysql -u xxx -p 123xxx
方式的连接。mysql> select host, user, password, select_priv, insert_priv,drop_priv from mysql.user;
+-----------+------+-------------------------------------------+-------------+-------------+-----------+
| host | user | password | select_priv | insert_priv | drop_priv |
+-----------+------+-------------------------------------------+-------------+-------------+-----------+
| localhost | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | Y | Y | Y |
| heygo | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | Y | Y | Y |
| 127.0.0.1 | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | Y | Y | Y |
| ::1 | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | Y | Y | Y |
+-----------+------+-------------------------------------------+-------------+-------------+-----------+
4 rows in set (0.04 sec)
修改当前用户的密码
set password =password('123456');
修改其他用户的密码
update mysql.user set password=password('123456') where user='li4';
flush privileges;
命令才能生 效修改用户名
update mysql.user set user='li4' where user='wang5';
flush privileges;
命令才能生 效删除用户
drop user li4
delete from user u where user='li4'
进行删除, 系 统会有残留信息保留。授予权限
grant 权限 1,权限 2,…权限 n on 数据库名称.表名称 to 用户名@用户地址 identified by '连接口令'
grant select,insert,delete,drop on atguigudb.* to li4@localhost ;
grant all privileges on *.* to joe@'%' identified by '123';
收回权限
show grants;
revoke [权限 1,权限 2,…权限 n] on 库名.表名 from 用户名@用户地址;
REVOKE ALL PRIVILEGES ON mysql.* FROM joe@localhost;
REVOKE select,insert,update,delete ON mysql.* FROM joe@localhost;
查看权限
show grants;
select * from user ;
二进制日志文件 log-bin
二进制日志文件 log-bin :用于主从复制
错误日志 log-error
默认是关闭的,记录严重的警告和错误信息,每次启动和关闭的详细信息等
查询日志 log
默认关闭,记录查询的sql语句,如果开启会减低mysql的整体性能,因为记录日志也是需要消耗系统资源的
数据文件
如何配置
mysql 的分层思想
mysql 四层架构
连接层:最上层是一些客户端和连接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于tcp/ip的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。
服务层:第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化及部分内置函数的执行。所有跨存储引擎的功能也在这一层实现,如过程、函数等。在该层,服务器会解析查询并创建相应的内部解析树,并对其完成相应的优化如确定查询表的顺序,是否利用索引等,最后生成相应的执行操作。如果是select语句,服务器还会查询内部的缓存。如果缓存空间足够大,这样在解决大量读操作的环境中能够很好的提升系统的性能。
Management Serveices & Utilities | 系统管理和控制工具 |
---|---|
SQL Interface | SQL 接口。 接受用户的 SQL 命令, 并且返回用户需要查询的结果。 比如 select from 就是调用 SQL Interface |
Parser | 解析器。 SQL 命令传递到解析器的时候会被解析器验证和解析 |
Optimizer | 查询优化器。 SQL 语句在查询之前会使用查询优化器对查询进行优化, 比如有 where 条件时, 优化器来决定先投影还是先过滤。 |
Cache 和 Buffer | 查询缓存。 如果查询缓存有命中的查询结果, 查询语句就可以直接去查询缓存中取 数据。 这个缓存机制是由一系列小缓存组成的。 比如表缓存, 记录缓存, key 缓存, 权限缓存等 |
引擎层:存储引擎层,存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过APl与存储引擎进行通信。不同的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取。后面介绍MyISAM和InnoDB
存储层:数据存储层,主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互。
MySQL 部件
SQL 大致的查询流程
mysql 的查询流程大致是:
查看 mysql 存储引擎
show engines;
show variables like '%storage_engine%';
MyISAM 引擎和 InnoDb 引擎的对比
阿里巴巴用的是啥数据库?