Files
Linux/数据库/Mysql/MYSQL操作命令.md
offends cee91802b3
Some checks failed
continuous-integration/drone Build is failing
synchronization
2025-08-25 15:57:40 +08:00

271 lines
6.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

> 本文作者:丁辉
# MYSQL字符集
[Unicode 标准](https://home.unicode.org/)
## 常用基础 sql 命令
> 以 "utf8mb4" 字符集作为示例
- 查看当前 MYSQL 支持的字符集
```sql
show collation;
```
> 过滤 "utf8mb4" 字符集
>
> ```sql
> SHOW COLLATION LIKE 'utf8mb4%';
> ```
- 查看 "数据库" 或 "表" 字符集
```sql
show create database <库名>;
```
```sql
show create table <表名>;
```
- 创建时指定字符集
- 创建 "数据库" 指定字符集
```sql
CREATE DATABASE <库名> CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```
- 创建 "表" 指定字符集
```sql
CREATE TABLE demo_table (
name VARCHAR(3)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```
- 修改字符集
- 修改 "数据库" 字符集
```sql
ALTER DATABASE <库名> CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```
- 修改 "表" 字符集
```sql
ALTER TABLE <表名> CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```
## 常见的 MySQL 字符集和排序规则
| 字符集 | 排序规则 |
| :----------------: | :----------------------------------------------------------: |
| utf8mb4_general_ci | 一般排序规则,对各种语言都能工作,但不支持所有语言的精确排序。 |
| utf8mb4_bin | 二进制排序规则,区分大小写,直接按照字符编码的二进制值排序。 |
| utf8mb4_unicode_ci | Unicode排序规则更准确地排序各种语言的字符但可能会比较耗费资源。 |
# MYSQL 授权
> 以 "offends" 用户作为示例
- 查看 MYSQL 用户
```sql
select user,host from mysql.user;
```
- 创建用户
```sql
CREATE USER offends IDENTIFIED BY 'offends';
```
>创建用户时配置允许哪些主机登录
>
>```sql
>CREATE USER 'offends'@'host' IDENTIFIED BY 'offends';
>```
- 用户权限
- 查看权限
```sql
SHOW GRANTS FOR 'offends'@'%';
```
- 删除权限
```sql
REVOKE ALL PRIVILEGES ON *.* FROM 'offends'@'%';
```
- 授权用户
- 完整权限授权
```sql
GRANT ALL PRIVILEGES ON *.* TO 'offends'@'%' IDENTIFIED BY 'offends';
```
> - `GRANT`: 这个关键字表示你要给予权限。
> - `ALL PRIVILEGES`: 表示赋予用户所有权限包括SELECT、INSERT、UPDATE、DELETE等等。
> - `*.*`: 这部分表示所有数据库和所有表。第一个星号表示所有数据库,第二个星号表示所有表。
> - `TO 'offends'@'%'`: 表示授予权限给一个名为 'offends' 的用户,@'%' 表示这个用户可以从任何主机连接到数据库。如果你希望用户只能从特定主机连接,可以在这里指定该主机的 IP 地址或主机名。
> - `IDENTIFIED BY 'offends'`: 表示用户的密码是 'offends'。这是用于验证用户身份的密码。
- 普通授权
- 指定数据库授权,配置主机登录
```sql
GRANT ALL PRIVILEGES ON <需要授权库名>.* TO 'offends'@'localhost' IDENTIFIED BY 'offends';
```
- 配置普通权限
```sql
GRANT SELECT ON offends.* TO 'offends'@'%' IDENTIFIED BY 'offends';
```
> 通常情况下公司内部授予查询权限
- 信任用户委派权限管理(用户可以将权限分配给其他用户)
```sql
GRANT ALL PRIVILEGES ON *.* TO 'offends'@'%' WITH GRANT OPTION;
```
- 刷新reload权限确保当前对用户权限的更改立即生效。
```sql
FLUSH PRIVILEGES;
```
# MYSQL 常用命令
- 使用 mysqladmin 修改密码
```bash
mysqladmin -u用户名 -p旧密码 password 新密码
```
- 修改密码
> MYSQL 5.7
```sql
update mysql.user set authentication_string=password('newpassword') where user='offends';
```
> 刷新
>
> ```sql
> FLUSH PRIVILEGES;
> ```
>
>忘记密码则可以在 MYSQL 配置文件 my.cnf 内添加 `skip-grant-tables` 开启免密登录修改密码
- 修改(无法加载身份验证插件"caching_sha2_password")问题
```sql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<密码>';
```
- 修改表中数据
```sql
UPDATE <表名> SET <需要修改的字段>='值' WHERE ID='字段ID号';
```
- 查看数据库表结构
```sql
SHOW CREATE TABLE <表名>;
```
- 修改数据库表结构
```sql
alter table <表名> modify column <字段> <修改后的字段> NULL;
```
- 重置副本数
```bash
RESET REPLICA;
```
- 禁止导出gtid信息
```bash
mysqldump -uroot -p密码 库 --set-gtid-purged=off > demo.sql
```
- 清空所有GTID信息
```bash
reset slave all;
reset master;
```
# MYSQL 备份
- MYSQL 备份,禁止导出gtid信息
```sql
mysqldump -uroot -p<密码> <库> --set-gtid-purged=off > backup.sql
```
- MYSQL 全量备份
```sql
mysqldump -uroot -p<密码> --all-databases > backup.sql
```
> | 参数 | 描述 |
> | ---------------------- | ------------------------------------------------------------ |
> | `--quick` | 使用快速插入方式,适用于大型数据库,减少锁定时间 |
> | `--events` | 备份事件Event信息这包括触发器等 |
> | `--all-databases` | 备份所有数据库 |
> | `--flush-logs` | 备份时刷新 MySQL 的日志,确保备份包含完整的事务日志 |
> | `--delete-master-logs` | 备份后删除主服务器上的二进制日志,释放磁盘空间 |
> | `--single-transaction` | 在整个备份过程中使用单一事务,保证数据的一致性,适用于 InnoDB 存储引擎 |
- MYSQL 增量备份
- 检查是 log_bin 是否开启(增量备份需开启)
```sql
show variables like '%log_bin%';
```
> 配置 my.cnf 添加 `log-bin=/var/lib/mysql/backup` 开启 log_bin
- 增量备份
```bash
mysqladmin -uroot -p<密码> flush-logs
```
> 在 /var/lib/mysql/backup 下查看增量备份日志
- 恢复增量备份
```bash
mysqlbinlog /var/lib/mysql/backup/binlog.000008 | mysql -uroot -p<密码>;
```