文章目录

  • 查看数据库表大小
  • 清空表
  • 查看mysql语句执行过程(查询优化相关)
  • mysql truncate具有外键约束的表
  • mysql 查看数据库状态和连接数
  • Mysql导出表结构及表数据 (mysqldump用法)


查看数据库表大小

SELECT TABLE_NAME,DATA_LENGTH+INDEX_LENGTH,TABLE_ROWS,concat(round((DATA_LENGTH+INDEX_LENGTH)/1024/1024,2), ‘MB’) as data FROM information_schema.TABLES WHERE TABLE_SCHEMA=‘database_name’; #其中database_name为数据库名称

清空表

truncate table table_name;

或者

rename table1 table2;
create if no exist table table1 like table2;
drop table table2;

或者

delete from table;

注意:
delete from table_name删除表的全部数据,对于MyISAM 会立刻释放磁盘空间 (应该是做了特别处理,也比较合理),InnoDB 不会释放磁盘空间;删除部分记录的话不管是MyISAM或InnoDB都不会释放空间,如果需要释放的话需要执行optimize table tablename。

三者的区别可以参考MySQL删除数据后磁盘空间的释放总结

查看mysql语句执行过程(查询优化相关)

explain select …

mysql truncate具有外键约束的表

清空表的时候报错(内容类似下面):

Cannot truncate a table referenced in a foreign key constraint (`表名`.`article_content`, CONSTRAINT `fk_aid` FOREIGN KEY (`aid`) REFERENCES `数据库名`.`article` (`id`))

解决办法:将foreign key 检查暂时关闭,truncate后再恢复回来:

SET foreign_key_checks=0;
truncate table table name;
SET foreign_key_checks=1;
select @@foreign_key_checks; #这个命令可以查看外键约束检查状态

mysql 查看数据库状态和连接数

  • 查看和设置最大连接数
show variables like '%max_connection%'; 查看最大连接数
set global max_connections=1000;        重新设置最大连接数

set global max_connections命令设置的话,数据库重启后会失效,如果重启的话需要在配置文件中设置:

# 在/etc/my.cnf里面设置数据库的最大连接数
[mysqld]
max_connections = 1000
  • 查看数据库当前连接数
mysql> show status like  'Threads%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_cached    | 32    |
| Threads_connected | 10    |
| Threads_created   | 50    |
| Threads_rejected  | 0     |
| Threads_running   | 1     |
+-------------------+-------+
5 rows in set (0.00 sec)

Threads_connected :这个数值指的是打开的连接数.

Threads_running :这个数值指的是激活的连接数,这个数值一般远低于connected数值.

Threads_connected 跟show processlist结果相同,表示当前连接数。准确的来说,Threads_running是代表当前并发数

  • 查看状态
  1. 连接状态
show processlist;
  1. 查看db的一些状态值
show status;

Mysql导出表结构及表数据 (mysqldump用法)

命令行下具体用法如下:
mysqldump -u用戶名 -p密码 -d 數據库名 表名 > 脚本名;

  1. 导出數據库為dbname的表结构(其中用戶名為root,密码為dbpasswd,生成的脚本名為db.sql)
    mysqldump -uroot -pdbpasswd -d dbname >db.sql;
  2. 导出數據库為dbname某张表(test)结构
    mysqldump -uroot -pdbpasswd -d dbname test>db.sql;
  3. 导出數據库為dbname所有表结构及表數據(不加-d)
    mysqldump -uroot -pdbpasswd dbname >db.sql;
  4. 导出數據库為dbname某张表(test)结构及表數據(不加-d)
    mysqldump -uroot -pdbpasswd dbname test>db.sql;