information_schema.tables+concat()拼接命令
非常非常非常实用的一个语句
例子:
mysql> select user,host from mysql.user;
+---------------+------------+
| user | host |
+---------------+------------+
| root | 10.0.0.% |
从mysql.user中查询mysql.user中的用户和对应的登录ip
mysql> select concat(user,"@","'",host,"'") from mysql.user;
+-------------------------------+
| concat(user,"@","'",host,"'") |
+-------------------------------+
| root@'10.0.0.%' |
| oldboy@'172.16.1.%'
concat()函数的作用就是把要查询的多个列的内容合成一个列
当函数中不加双引号时 会把被查询的数据中
符合定义的内容查出来 加上引号时 就把引号中的内容
强行显示出来不解析
生产需求1
mysqldump -uroot -poldboy123 world city >/tmp/world_sql
-----模仿以上命令对整个数据库下的1000张表进行单独备份
-----排除sys,performance,information_schema
select concat("mysqldump -uroot -poldboy123 ",table_schema," ",table_name," >/tmp/my_bak/",table_schema,"_",table_name,".sql")
from information_schema.tables
where table_schema not in('sys','performance','information_schema') 到此为止mysqldump -uroot -poldboy123 库名 表名 >/tmp/库名_表名.sql就全部显示出来了
into outfile '/tmp/mysql_bak.sh'; 到这才是把命令语句全部导出到备份脚本文件中去,但是现在运行会报错
因为配置文件中的安全路径不是tmp 所以更改my.cnf
重启 在 数据库中执行此命令 再到/tmp中执行/tmp/mysql_bak.sh就备份了
从information_schema.tables查询
与sysperformance,information_schema无关的tables_schema
生产需求2
分库查看数据库大小
select
table_schema,SUM(AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH)/1024/1024 as tableGB
from information_schema.tables
group by table_schema;
网友评论