当前位置: 首页 > news >正文

日常真实工作环境,Mysql常用操作命令,笔记!

1、开放增删改查权限,不开放表结构修改权限

有许多生产环境是不需要修改表结构的,也是为了防止SQL注入。

创建用户
mysql> grant all on *.* to 'ie'@'%' identified by 'test1'

设置权限
1.首先我们先回收所有权限。
revoke  all   on  *.*  from   ie'@'%' ;

2.设置权限
grant select, insert, update, delete on  *.*  from   ie'@'%' ;

3.刷新
flush privileges;

2、MySQL 数据库日志的切割

#!/bin/bash
time=`date -d"yesterday" +%Y-%m-%d`
basedir=/data/mysql/data/logs
lognameA=mysql_general.log
lognameB=slow_query.log
cp $basedir/$lognameA $basedir/${time}-$lognameA
cp $basedir/$lognameB $basedir/${time}-$lognameB
sleep 1
echo "" > $lognameA
echo "" > $lognameB
find $basedir -mtime +7 -name "*-$lognameA" -exec rm -r {} \;
find $basedir -mtime +7 -name "*-$lognameB" -exec rm -r {} \;

3、MySQL锁表查询

#查看锁表
show open tables  where In_use > 0;


#查询表级锁争用情况
可以通过检查table_locks_waited和table_locks_immediate状态变量来分析系统上的表锁定争夺:
mysql> show status like 'table%';
如果Table_locks_waited的值比较高,则说明存在着较严重的表级锁争用情况。

#获取InnoDB行锁争用情况
可以通过检查InnoDB_row_lock状态变量来分析系统上的行锁的争夺情况:
mysql> show status like 'innodb_row_lock%';

如果发现锁争用比较严重,如InnoDB_row_lock_waits和InnoDB_row_lock_time_avg的值比较高

解锁

第一种
show processlist;
找到锁进程,kill id ;


第二种
mysql>UNLOCK TABLES;

4、MySQL安全插件:Connection-Control Plugins 的利与弊

查看mysql 正在使用的插件

  • mysql会话控制限制登录次数(connection_control插件)_51CTO博客_mysql connection_control

  • MySQL安全插件:Connection-Control Plugins 的利与弊_waiting in connection control-CSDN博客

mysql> select PLUGIN_NAME, PLUGIN_STATUS from INFORMATION_SCHEMA.PLUGINS where PLUGIN_NAME like 'connection%';
+------------------------------------------+---------------+
| PLUGIN_NAME                              | PLUGIN_STATUS |
+------------------------------------------+---------------+
| CONNECTION_CONTROL                       | DELETED       |
| CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS | ACTIVE        |
+------------------------------------------+---------------+

5、禁止root 用户远程登录

use mysql;
delete from user where user="root" and host="%";

、备份数据正确的步骤

1、全局加锁
flush table with read lock;


2、设置库为只读
set global read_only=1;

image-20231214100316492

3、使用mysqldump 进行逻辑备份

mysqldump  -uroot -p --set-gtid-purged=OFF --single-transaction -B $dbname >  XX.sql

4、mysql 用户名,密码 安全检查

禁止直接赋予% 权限,请针对具体IP进行访问控制

mysql> select User,Host,plugin,authentication_string from mysql.user;

image-20231214100542376

5、解锁

unlock tables

6、关闭只读,允许读写

set global read_only=0;

7、Mysql 官方演示数据

  • https://dev.mysql.com/doc/index-other.html

image-20231214100839777

8、Mysql 统计大小

(1)、查看所有数据库容量大小

select
table_schema as '数据库',
sum(table_rows) as '记录数',
sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)',
sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)'
from information_schema.tables
group by table_schema
order by sum(data_length) desc, sum(index_length) desc;

image-20231214101007614

(2)、统计每个库表,容量大小

select
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)'
from information_schema.tables
order by data_length desc, index_length desc;

image-20231214101129630

(3)、 查看指定数据库容量大小

select
table_schema as '数据库',
sum(table_rows) as '记录数',
sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)',
sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)'
from information_schema.tables
where table_schema='alarm';

image-20231214101210454

(4)、 查看指定指定库各表容量大小

select
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)'
from information_schema.tables
where table_schema='alarm'
order by data_length desc, index_length desc;

image-20231214101353855

9、1227- Access denied; you need (at least one of) the PROCESS privilege(s) for this operation

使用navicat 设计某张表的时候, you need (at least one of) the PROCESS privilege(s) for this operation

PS: 之前就只给fbyq 用户单个库的所有权限,没有给所有库的权限,根据错误提示,可以发现一些授权时全局的权限,针对的是*.*,而不能单独对某个库、表授权

grant process on *.* to fbyq@'%';
flush privileges;

需要关闭navicat 软件,从新打开 就可以设计表了

MySQL权限附录

Permissible Privileges for GRANT and REVOKE

PrivilegeColumnContext
ALL [PRIVILEGES\]Synonym for “all privileges”Server administration
ALTERAlter_privTables
ALTER ROUTINEAlter_routine_privStored routines
CREATECreate_privDatabases, tables, or indexes
CREATE ROUTINECreate_routine_privStored routines
CREATE TABLESPACECreate_tablespace_privServer administration
CREATE TEMPORARY TABLESCreate_tmp_table_privTables
CREATE USERCreate_user_privServer administration
CREATE VIEWCreate_view_privViews
DELETEDelete_privTables
DROPDrop_privDatabases, tables, or views
EVENTEvent_privDatabases
EXECUTEExecute_privStored routines
FILEFile_privFile access on server host
GRANT OPTIONGrant_privDatabases, tables, or stored routines
INDEXIndex_privTables
INSERTInsert_privTables or columns
LOCK TABLESLock_tables_privDatabases
PROCESSProcess_privServer administration
PROXYSee proxies_priv tableServer administration
REFERENCESReferences_privDatabases or tables
RELOADReload_privServer administration
REPLICATION CLIENTRepl_client_privServer administration
REPLICATION SLAVERepl_slave_privServer administration
SELECTSelect_privTables or columns
SHOW DATABASESShow_db_privServer administration
SHOW VIEWShow_view_privViews
SHUTDOWNShutdown_privServer administration
SUPERSuper_privServer administration
TRIGGERTrigger_privTables
UPDATEUpdate_privTables or columns
USAGESynonym for “no privileges”Server administration

10、优雅的停止数据库

作为一个合格的运维,严禁 systemctl stop mysqld

# 进入原5.7 mysql命令行 正确关闭数据库
mysql -uroot -p
mysql> select version();
+------------+
| version()  |
+------------+
| 5.7.39-log |
+------------+
1 row in set (0.00 sec)

mysql> show variables like 'innodb_fast_shutdown';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| innodb_fast_shutdown | 1     |
+----------------------+-------+
1 row in set (0.00 sec)


# 确保数据都刷到硬盘上,更改成0
mysql> set global innodb_fast_shutdown=0;
Query OK, 0 rows affected (0.00 sec)



mysql> shutdown;
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye

[root@cmdb ~]# ps -ef | grep mysql
root     30990 30934  0 16:12 pts/0    00:00:00 grep --color=auto mysql

11、Mysql8.0 中创建用户,删除用户并授权

mysql5.7 中可以创建用户并授权,而在mysql8.0中需要先创建用户再授权

mysql> create user 'srebro'@'%' identified by 'srebro';
Query OK, 0 rows affected (0.02 sec)


mysql> grant all on *.* to 'srebro'@'%';
Query OK, 0 rows affected (0.00 sec)


mysql> drop user 'srebro'@'%';

12、Mysql 中表重命名操作

用于一些大表归档

重命名一张表,将旧表 中的所有数据复制到新表

#先查看表是否有事务在运行,只有没有在使用才能重命名
show OPEN TABLES where In_use > 0;


#重命名一张表,将旧表 中的所有数据复制到新表
CREATE TABLE new_table SELECT * FROM old_table;


!!!!!!!谨慎!!!!!!!!!
#truncate 表【一文,MySQL 的 delete、truncate、drop 区别 https://zhuanlan.zhihu.com/p/270331768】
Truncate table TABLE_NAME

用于表直接重命名

RENAME TABLE old_table_name TO new_table_name;
http://www.dtcms.com/a/112489.html

相关文章:

  • (回滚莫队)洛谷 P10268 符卡对决 题解
  • 解锁 DeepSeek 与 Matlab:攻克科研难题的技术利刃
  • UE5 Simulation Stage
  • 第二十一节课:Python程序循环结构详解
  • 玩转JSONObject:使用方法详解与Map对比
  • 您使用的开源软件许可证是否存在冲突呢?
  • AI Agent 工作流程解析:从原理到实践
  • go day 01
  • Nyquist插件基础:LISP语法-数据类型
  • 【每日算法】Day 17-1:位图(Bitmap)——十亿级数据去重与快速检索的终极方案(C++实现)
  • Java枚举如何实现自增赋值呢?
  • 第一讲—函数的极限与连续(一)
  • TiDB 数据库8.1版本编译及部署
  • 网络编程—Socket套接字(TCP)
  • 从零实现APP实时聊天功能:WebSocket+离线消息+多媒体传输全解析
  • deepseek v3-0324实现SVG 编辑器
  • 345-java人事档案管理系统的设计与实现
  • K8s私有仓库拉取镜像报错解决:x509 certificate signed by unknown authority
  • WORD+VISIO输出PDF图片提高清晰度的方法
  • MySQL系统库汇总
  • 面向中小企业的ThingsBoard轻量级部署与运维方案(源码+论文+部署讲解等)
  • 图扑可视化点亮智慧城市垃圾分类新未来
  • UBUNTU编译datalink
  • Xilinx系列FPGA实现HDMI2.1视频收发,支持8K@60Hz分辨率,提供2套工程源码和技术支持
  • Python每日一题(15)
  • 考研真题:有一个请求分页式虚拟存储器系统,分配给某进程3个物理块,开始时内存中预装入第1.2.3个页面
  • Future接口详细介绍
  • 记一次差点通宵的bug(内网没bug,外网有bug)
  • Uni-app PDF Annotation plugin library online API examples
  • Mysql 行级锁在什么样的情况下会升级为表级锁?