mirror of https://github.com/dunwu/db-tutorial.git
update docs
parent
b54a37f5fb
commit
961094a23c
|
@ -2,9 +2,9 @@
|
|||
|
||||
## 📖 内容
|
||||
|
||||
### [关系型数据库面试题 💯](sql/common/sql-interview.md)
|
||||
### [关系型数据库面试题 💯](sql-interview.md)
|
||||
|
||||
### [SQL Cheat Sheet](sql/common/sql-cheat-sheet.md)
|
||||
### [SQL Cheat Sheet](sql-cheat-sheet.md)
|
||||
|
||||
![img](http://dunwu.test.upcdn.net/snap/20200115160512.png)
|
||||
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
# 高级 SQL
|
||||
|
||||
> 不同于 [SQL Cheat Sheet](sql-cheat-sheet.md) 中的一般语法,本文主要整理收集一些高级但是很有用的 SQL
|
||||
|
||||
## 数据库
|
||||
|
||||
## 表
|
||||
|
||||
查看表的基本信息
|
||||
|
||||
```sql
|
||||
SELECT * FROM information_schema.tables
|
||||
WHERE table_schema = 'test' AND table_name = 'user';
|
||||
```
|
||||
|
||||
查看表的列信息
|
||||
|
||||
```sql
|
||||
SELECT * FROM information_schema.columns
|
||||
WHERE table_schema = 'test' AND table_name = 'user';
|
||||
```
|
||||
|
||||
## 参考资料
|
||||
|
||||
- [《SQL 必知必会》](https://item.jd.com/11232698.html)
|
|
@ -1,8 +1,8 @@
|
|||
# SQL Cheat Sheet
|
||||
|
||||
> 本文针对关系型数据库的一般语法。限于篇幅,本文侧重说明用法,不会展开讲解特性、原理。
|
||||
> 本文针对关系型数据库的基本语法。限于篇幅,本文侧重说明用法,不会展开讲解特性、原理。
|
||||
>
|
||||
> 本文语法主要针对 Mysql。
|
||||
> 本文语法主要针对 Mysql,但大部分的语法对其他关系型数据库也适用。
|
||||
|
||||
![img](http://dunwu.test.upcdn.net/snap/20200115160512.png)
|
||||
|
||||
|
|
|
@ -1,50 +1,95 @@
|
|||
# Mysql 运维
|
||||
|
||||
> 如果你的公司有 DBA,那么我恭喜你,你可以无视 Mysql 运维。如果你的公司没有 DBA,那你就好好学两手 Mysql 基本运维操作,行走江湖,防身必备。
|
||||
>
|
||||
> 环境:CentOS7
|
||||
>
|
||||
> 版本:![mysql](https://img.shields.io/badge/mysql-8.0-blue)
|
||||
|
||||
<!-- TOC depthFrom:2 depthTo:3 -->
|
||||
|
||||
- [一、虚拟机部署](#一虚拟机部署)
|
||||
- [安装 mysql yum 源](#安装-mysql-yum-源)
|
||||
- [mysql 服务管理](#mysql-服务管理)
|
||||
- [初始化数据库密码](#初始化数据库密码)
|
||||
- [配置远程访问](#配置远程访问)
|
||||
- [跳过登录认证](#跳过登录认证)
|
||||
- [二、基本运维](#二基本运维)
|
||||
- [客户端连接](#客户端连接)
|
||||
- [查看连接](#查看连接)
|
||||
- [创建用户](#创建用户)
|
||||
- [查看用户](#查看用户)
|
||||
- [授权](#授权)
|
||||
- [撤销授权](#撤销授权)
|
||||
- [查看授权](#查看授权)
|
||||
- [更改用户密码](#更改用户密码)
|
||||
- [备份与恢复](#备份与恢复)
|
||||
- [卸载](#卸载)
|
||||
- [主从节点部署](#主从节点部署)
|
||||
- [三、配置](#三配置)
|
||||
- [配置文件路径](#配置文件路径)
|
||||
- [配置项语法](#配置项语法)
|
||||
- [常用配置项说明](#常用配置项说明)
|
||||
- [四、常见问题](#四常见问题)
|
||||
- [Too many connections](#too-many-connections)
|
||||
- [时区(time_zone)偏差](#时区time_zone偏差)
|
||||
- [数据表损坏如何修复](#数据表损坏如何修复)
|
||||
- [数据结构](#数据结构)
|
||||
- [五、脚本](#五脚本)
|
||||
- [参考资料](#参考资料)
|
||||
- [1. 安装部署](#1-安装部署)
|
||||
- [1.1. Windows 安装](#11-windows-安装)
|
||||
- [1.2. CentOS 安装](#12-centos-安装)
|
||||
- [1.3. 初始化数据库密码](#13-初始化数据库密码)
|
||||
- [1.4. 配置远程访问](#14-配置远程访问)
|
||||
- [1.5. 跳过登录认证](#15-跳过登录认证)
|
||||
- [2. 基本运维](#2-基本运维)
|
||||
- [2.1. 客户端连接](#21-客户端连接)
|
||||
- [2.2. 查看连接](#22-查看连接)
|
||||
- [2.3. 创建用户](#23-创建用户)
|
||||
- [2.4. 查看用户](#24-查看用户)
|
||||
- [2.5. 授权](#25-授权)
|
||||
- [2.6. 撤销授权](#26-撤销授权)
|
||||
- [2.7. 查看授权](#27-查看授权)
|
||||
- [2.8. 更改用户密码](#28-更改用户密码)
|
||||
- [2.9. 备份与恢复](#29-备份与恢复)
|
||||
- [2.10. 卸载](#210-卸载)
|
||||
- [2.11. 主从节点部署](#211-主从节点部署)
|
||||
- [3. 配置](#3-配置)
|
||||
- [3.1. 配置文件路径](#31-配置文件路径)
|
||||
- [3.2. 配置项语法](#32-配置项语法)
|
||||
- [3.3. 常用配置项说明](#33-常用配置项说明)
|
||||
- [4. 常见问题](#4-常见问题)
|
||||
- [4.1. Too many connections](#41-too-many-connections)
|
||||
- [4.2. 时区(time_zone)偏差](#42-时区time_zone偏差)
|
||||
- [4.3. 数据表损坏如何修复](#43-数据表损坏如何修复)
|
||||
- [4.4. 数据结构](#44-数据结构)
|
||||
- [5. 脚本](#5-脚本)
|
||||
- [6. 参考资料](#6-参考资料)
|
||||
|
||||
<!-- /TOC -->
|
||||
|
||||
## 一、虚拟机部署
|
||||
## 1. 安装部署
|
||||
|
||||
### 1.1. Windows 安装
|
||||
|
||||
(1)下载 Mysql 5.7 免安装版
|
||||
|
||||
下载地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads
|
||||
|
||||
(2)解压并创建 my.ini 在根目录
|
||||
|
||||
my.ini 文件示例:
|
||||
|
||||
```ini
|
||||
[mysqld]
|
||||
#设置3306端口
|
||||
port = 3306
|
||||
# 设置mysql的安装目录 这块换成自己解压的路径
|
||||
basedir=D:\\Tools\\DB\\mysql\\mysql-5.7.31
|
||||
# 允许最大连接数
|
||||
max_connections=200
|
||||
# 服务端使用的字符集默认为8比特编码的latin1字符集
|
||||
character-set-server=utf8
|
||||
# 创建新表时将使用的默认存储引擎
|
||||
default-storage-engine=INNODB
|
||||
|
||||
[client]
|
||||
# 设置mysql客户端默认字符集
|
||||
default-character-set=utf8
|
||||
```
|
||||
|
||||
(3)执行安装命令
|
||||
|
||||
在控制台 CMD 中依次执行以下安装命令
|
||||
|
||||
```
|
||||
cd D:\\Tools\\DB\\mysql\\mysql-5.7.31
|
||||
mysqld --initialize
|
||||
mysqld -install
|
||||
```
|
||||
|
||||
说明:
|
||||
|
||||
- `mysqld --initialize` 会自动初始化创建 data 文件夹并初始化 mysql。
|
||||
- `mysqld -install` 会安装 mysql 服务。
|
||||
|
||||
(4)启动服务
|
||||
|
||||
在控制台执行 `net start mysql` 启动服务。
|
||||
|
||||
### 1.2. CentOS 安装
|
||||
|
||||
> 本文仅介绍 rpm 安装方式
|
||||
|
||||
### 安装 mysql yum 源
|
||||
#### 安装 mysql yum 源
|
||||
|
||||
官方下载地址:https://dev.mysql.com/downloads/repo/yum/
|
||||
|
||||
|
@ -91,15 +136,15 @@ mysql-community-server.x86_64 : A very fast and reliable SQL database server
|
|||
通过 yum 安装 mysql 有几个重要目录:
|
||||
|
||||
```
|
||||
# 配置文件
|
||||
## 配置文件
|
||||
/etc/my.cnf
|
||||
# 数据库目录
|
||||
## 数据库目录
|
||||
/var/lib/mysql/
|
||||
# 配置文件
|
||||
## 配置文件
|
||||
/usr/share/mysql(mysql.server命令及配置文件)
|
||||
# 相关命令
|
||||
## 相关命令
|
||||
/usr/bin(mysqladmin mysqldump等命令)
|
||||
# 启动脚本
|
||||
## 启动脚本
|
||||
/usr/lib/systemd/system/mysqld.service (注册为 systemd 服务)
|
||||
```
|
||||
|
||||
|
@ -109,28 +154,28 @@ mysql-community-server.x86_64 : A very fast and reliable SQL database server
|
|||
yum install mysql-community-server
|
||||
```
|
||||
|
||||
### mysql 服务管理
|
||||
#### mysql 服务管理
|
||||
|
||||
通过 yum 方式安装 mysql 后,本地会有一个名为 `mysqld` 的 systemd 服务。
|
||||
|
||||
其服务管理十分简便:
|
||||
|
||||
```shell
|
||||
# 查看状态
|
||||
## 查看状态
|
||||
systemctl status mysqld
|
||||
# 启用服务
|
||||
## 启用服务
|
||||
systemctl enable mysqld
|
||||
# 禁用服务
|
||||
## 禁用服务
|
||||
systemctl disable mysqld
|
||||
# 启动服务
|
||||
## 启动服务
|
||||
systemctl start mysqld
|
||||
# 重启服务
|
||||
## 重启服务
|
||||
systemctl restart mysqld
|
||||
# 停止服务
|
||||
## 停止服务
|
||||
systemctl stop mysqld
|
||||
```
|
||||
|
||||
### 初始化数据库密码
|
||||
### 1.3. 初始化数据库密码
|
||||
|
||||
查看一下初始密码
|
||||
|
||||
|
@ -153,7 +198,7 @@ ALTER user 'root'@'localhost' IDENTIFIED BY '你的密码';
|
|||
|
||||
注:密码强度默认为中等,大小写字母、数字、特殊符号,只有修改成功后才能修改配置再设置更简单的密码
|
||||
|
||||
### 配置远程访问
|
||||
### 1.4. 配置远程访问
|
||||
|
||||
```sql
|
||||
CREATE USER 'root'@'%' IDENTIFIED BY '你的密码';
|
||||
|
@ -162,7 +207,7 @@ ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';
|
|||
FLUSH PRIVILEGES;
|
||||
```
|
||||
|
||||
### 跳过登录认证
|
||||
### 1.5. 跳过登录认证
|
||||
|
||||
```shell
|
||||
vim /etc/my.cnf
|
||||
|
@ -174,9 +219,9 @@ vim /etc/my.cnf
|
|||
|
||||
执行 `systemctl restart mysqld`,重启 mysql
|
||||
|
||||
## 二、基本运维
|
||||
## 2. 基本运维
|
||||
|
||||
### 客户端连接
|
||||
### 2.1. 客户端连接
|
||||
|
||||
语法:`mysql -h<主机> -P<端口> -u<用户名> -p<密码>`
|
||||
|
||||
|
@ -202,13 +247,13 @@ Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
|
|||
mysql>
|
||||
```
|
||||
|
||||
### 查看连接
|
||||
### 2.2. 查看连接
|
||||
|
||||
连接完成后,如果你没有后续的动作,这个连接就处于空闲状态,你可以在 `show processlist` 命令中看到它。客户端如果太长时间没动静,连接器就会自动将它断开。这个时间是由参数 `wait_timeout` 控制的,默认值是 8 小时。
|
||||
|
||||
![img](http://dunwu.test.upcdn.net/snap/20200714115031.png)
|
||||
|
||||
### 创建用户
|
||||
### 2.3. 创建用户
|
||||
|
||||
```sql
|
||||
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
|
||||
|
@ -234,7 +279,7 @@ CREATE USER 'pig'@'%';
|
|||
>
|
||||
> 所以,需要加上 `IDENTIFIED WITH mysql_native_password`,例如:`CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';`
|
||||
|
||||
### 查看用户
|
||||
### 2.4. 查看用户
|
||||
|
||||
```sql
|
||||
-- 查看所有用户
|
||||
|
@ -242,7 +287,7 @@ SELECT DISTINCT CONCAT('User: ''', user, '''@''', host, ''';') AS query
|
|||
FROM mysql.user;
|
||||
```
|
||||
|
||||
### 授权
|
||||
### 2.5. 授权
|
||||
|
||||
命令:
|
||||
|
||||
|
@ -275,7 +320,7 @@ GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTIO
|
|||
GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
|
||||
```
|
||||
|
||||
### 撤销授权
|
||||
### 2.6. 撤销授权
|
||||
|
||||
命令:
|
||||
|
||||
|
@ -299,14 +344,14 @@ REVOKE SELECT ON *.* FROM 'pig'@'%';
|
|||
|
||||
具体信息可以用命令`SHOW GRANTS FOR 'pig'@'%';` 查看。
|
||||
|
||||
### 查看授权
|
||||
### 2.7. 查看授权
|
||||
|
||||
```SQL
|
||||
-- 查看用户权限
|
||||
SHOW GRANTS FOR 'root'@'%';
|
||||
```
|
||||
|
||||
### 更改用户密码
|
||||
### 2.8. 更改用户密码
|
||||
|
||||
```sql
|
||||
SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');
|
||||
|
@ -324,7 +369,7 @@ SET PASSWORD = PASSWORD("newpassword");
|
|||
SET PASSWORD FOR 'pig'@'%' = PASSWORD("123456");
|
||||
```
|
||||
|
||||
### 备份与恢复
|
||||
### 2.9. 备份与恢复
|
||||
|
||||
Mysql 备份数据使用 mysqldump 命令。
|
||||
|
||||
|
@ -375,7 +420,7 @@ mysql -h <host> -P<port> -u<username> -p<database> < backup.sql
|
|||
mysql -u<username> -p --all-databases < backup.sql
|
||||
```
|
||||
|
||||
### 卸载
|
||||
### 2.10. 卸载
|
||||
|
||||
(1)查看已安装的 mysql
|
||||
|
||||
|
@ -395,7 +440,7 @@ mysql-community-libs-8.0.12-1.el7.x86_64
|
|||
yum remove mysql-community-server.x86_64
|
||||
```
|
||||
|
||||
### 主从节点部署
|
||||
### 2.11. 主从节点部署
|
||||
|
||||
假设需要配置一个主从 Mysql 服务器环境
|
||||
|
||||
|
@ -601,11 +646,11 @@ mysql> show global variables like "%read_only%";
|
|||
|
||||
> 注:设置 slave 服务器为只读,并不影响主从同步。
|
||||
|
||||
## 三、配置
|
||||
## 3. 配置
|
||||
|
||||
> **_大部分情况下,默认的基本配置已经足够应付大多数场景,不要轻易修改 Mysql 服务器配置,除非你明确知道修改项是有益的。_**
|
||||
|
||||
### 配置文件路径
|
||||
### 3.1. 配置文件路径
|
||||
|
||||
配置 Mysql 首先要确定配置文件在哪儿。
|
||||
|
||||
|
@ -621,7 +666,7 @@ Default options are read from the following files in the given order:
|
|||
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf
|
||||
```
|
||||
|
||||
### 配置项语法
|
||||
### 3.2. 配置项语法
|
||||
|
||||
**Mysql 配置项设置都使用小写,单词之间用下划线或横线隔开(二者是等价的)。**
|
||||
|
||||
|
@ -633,7 +678,7 @@ Default options are read from the following files in the given order:
|
|||
/usr/sbin/mysqld --auto_increment_offset=5
|
||||
```
|
||||
|
||||
### 常用配置项说明
|
||||
### 3.3. 常用配置项说明
|
||||
|
||||
> 这里介绍比较常用的基本配置,更多配置项说明可以参考:[Mysql 服务器配置说明](mysql-config.md)
|
||||
|
||||
|
@ -732,9 +777,9 @@ port = 3306
|
|||
- 注意:仍然可能出现报错信息 Can't create a new thread;此时观察系统 cat /proc/mysql 进程号/limits,观察进程 ulimit 限制情况
|
||||
- 过小的话,考虑修改系统配置表,`/etc/security/limits.conf` 和 `/etc/security/limits.d/90-nproc.conf`
|
||||
|
||||
## 四、常见问题
|
||||
## 4. 常见问题
|
||||
|
||||
### Too many connections
|
||||
### 4.1. Too many connections
|
||||
|
||||
**现象**
|
||||
|
||||
|
@ -805,7 +850,7 @@ mysql soft nofile 65535
|
|||
|
||||
如果是使用 rpm 方式安装 mysql,检查 **mysqld.service** 文件中的 `LimitNOFILE` 是否配置的太小。
|
||||
|
||||
### 时区(time_zone)偏差
|
||||
### 4.2. 时区(time_zone)偏差
|
||||
|
||||
**现象**
|
||||
|
||||
|
@ -846,7 +891,7 @@ Query OK, 0 rows affected (0.00 sec)
|
|||
|
||||
修改 `my.cnf` 文件,在 `[mysqld]` 节下增加 `default-time-zone='+08:00'` ,然后重启。
|
||||
|
||||
### 数据表损坏如何修复
|
||||
### 4.3. 数据表损坏如何修复
|
||||
|
||||
使用 myisamchk 来修复,具体步骤:
|
||||
|
||||
|
@ -856,7 +901,7 @@ Query OK, 0 rows affected (0.00 sec)
|
|||
|
||||
使用 repair table 或者 OPTIMIZE table 命令来修复,REPAIR TABLE table_name 修复表 OPTIMIZE TABLE table_name 优化表 REPAIR TABLE 用于修复被破坏的表。 OPTIMIZE TABLE 用于回收闲置的数据库空间,当表上的数据行被删除时,所占据的磁盘空间并没有立即被回收,使用了 OPTIMIZE TABLE 命令后这些空间将被回收,并且对磁盘上的数据行进行重排(注意:是磁盘上,而非数据库)
|
||||
|
||||
### 数据结构
|
||||
### 4.4. 数据结构
|
||||
|
||||
> 问题现象:ERROR 1071: Specified key was too long; max key length is 767 bytes
|
||||
|
||||
|
@ -864,14 +909,14 @@ Query OK, 0 rows affected (0.00 sec)
|
|||
|
||||
解决方法:优化索引结构,索引字段不宜过长。
|
||||
|
||||
## 五、脚本
|
||||
## 5. 脚本
|
||||
|
||||
这里推荐我写的几个一键运维脚本,非常方便,欢迎使用:
|
||||
|
||||
- [Mysql 安装脚本](https://github.com/dunwu/linux-tutorial/tree/master/codes/linux/soft/mysql-install.sh)
|
||||
- [Mysql 备份脚本](https://github.com/dunwu/linux-tutorial/tree/master/codes/linux/soft/mysql-backup.sh)
|
||||
|
||||
## 参考资料
|
||||
## 6. 参考资料
|
||||
|
||||
- [《高性能 MySQL》](https://book.douban.com/subject/23008813/)
|
||||
- https://www.cnblogs.com/xiaopotian/p/8196464.html
|
||||
|
|
Loading…
Reference in New Issue