MySQL-information_schema数据库的说明及延伸的用法

我们安装完MySQL后,使用客服端查看的时候,都会看到information_schema这个库,那么这个库是做什么的呢?

下面就来分享一下。

数据库表说明:

官方开发文档:information-schema

表名 用途说明
SCHEMATA 提供了当前mysql实例中所有数据库的信息。是show databases的结果取之此表。
TABLES 提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。是show tables from schemaname的结果取之此表。
COLUMNS 提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。是show columns from schemaname.tablename的结果取之此表。
STATISTICS 提供了关于表索引的信息。是show index from schemaname.tablename的结果取之此表。
USER_PRIVILEGES 用户权限表给出了关于全程权限的信息。该信息源自mysql.user授权表。是非标准表。
SCHEMA_PRIVILEGES 方案权限表给出了关于方案(数据库)权限的信息。该信息来自mysql.db授权表。是非标准表。
TABLE_PRIVILEGES 表权限表给出了关于表权限的信息。该信息源自mysql.tables_priv授权表。是非标准表。
COLUMN_PRIVILEGES 列权限表给出了关于列权限的信息。该信息源自mysql.columns_priv授权表。是非标准表。
CHARACTER_SETS 字符集表提供了mysql实例可用字符集的信息。是SHOW CHARACTER SET结果集取之此表。
COLLATIONS 提供了关于各字符集的对照信息。
COLLATION_CHARACTER_SET_APPLICABILITY 指明了可用于校对的字符集。这些列等效于SHOW COLLATION的前两个显示字段。
TABLE_CONSTRAINTS 描述了存在约束的表。以及表的约束类型。
KEY_COLUMN_USAGE 描述了具有约束的键列。
ROUTINES 提供了关于存储子程序(存储程序和函数)的信息。此时,ROUTINES表不包含自定义函数(UDF)。名为“mysql.proc name”的列指明了对应于INFORMATION_SCHEMA.ROUTINES表的mysql.proc表列。
VIEWS 给出了关于数据库中的视图的信息。需要有show views权限,否则无法查看视图信息。
TRIGGERS 提供了关于触发程序的信息。必须有super权限才能查看该表。

都是保存跟我们的数据库及表相关的数据,那么我们平时怎么利用他呢?

    • 一、TABLES
      1. 获取库中的全部表SELECT
        TABLE_NAME
        FROM
        information_schema.tables
        WHERE
        table_schema = ‘ecs_backup’
      2. 获取库中的创建时间(create_time)早于/晚于/等于某个时间的表SELECT
        TABLE_NAME
        FROM
        information_schema.tables
        WHERE
        table_schema = ‘ecs_backup’
        AND
        create_time < ‘2018-01-09’
      3. 获取库中的更新时间(update_time)早于/晚于/等于某个时间的表SELECT
        TABLE_NAME
        FROM
        information_schema.tables
        WHERE
        table_schema = ‘ecs_backup’
        AND
        update_time < ‘2018-01-09’
    • 二、COLUMNS
      1. 获取表的必填(IS_NULLABLE)字段
        SELECT
        COLUMN_NAME,COLUMN_DEFAULT,DATA_TYPE,CHARACTER_SET_NAME,COLUMN_KEY,COLUMN_TYPE,COLUMN_COMMENT
        FROM
        `information_schema`.`COLUMNS`
        WHERE
        TABLE_SCHEMA=’ecs’
        AND
        `TABLE_NAME` = ‘b2c_orders’
        AND
        IS_NULLABLE=’NO’
        ORDER BY ORDINAL_POSITION ASC
    • 三、STATISTICS
      1. 获取表的索引
        SELECT
        INDEX_NAME,COLUMN_NAME
        FROM
        `information_schema`.`STATISTICS`
        WHERE
        TABLE_NAME = ‘sdb_b2c_orders’
        AND
        INDEX_SCHEMA = ‘ecstore’

MySQL-怎么备份数据库的表

自从使用上了阿里的RDS之后,公司的MySQL服务器就彻底的歇菜了,特别是出现重大问题的时候,我根本没办法直接用备份数据还原生产环境中的数据。

主要原因是MySQL服务器环境跟RDS的备份文件环境不符合,特意去搭建一个吧,太麻烦。

现在每次有需要使用的时候,都是使用备份克隆一个实例,数据量大了,那个克隆的速度是越来越慢了。

最近正好有空想了一下这个解决方法,记录一下吧。

我经常使用phpmyadmin来管理数据库的数据,所以,我经常会做一个操作:

要操作某个表的时候,我一定是先复制一个表,重命名后当做备份,出现问题的时候我就直接重命名就好了。

那么,我可以将重要的表及表结构给按照一定的时间自动备份吗?

当然可以了哈~定时任务怎么使用我就不多说了,就说说SQL怎么写吧。

一、复制结构,数据

CREATE TABLE `ecs_backup`.`20180109_1809-sdb_b2c_goods` AS SELECT * FROM `ecs`.`sdb_b2c_goods`

二、复制结构,数据,索引

CREATE TABLE `ecs_backup`.`20180109_1809-sdb_b2c_goods` LIKE `ecs`.`sdb_b2c_goods`;
INSERT `ecs_backup`.`20180109_1809-sdb_b2c_goods` SELECT * FROM `ecs`.`sdb_b2c_goods`;

随便挑一种适合自己的方法,只需要自动生成前缀就可以执行了。

那么这类的文件肯定会越来越多的,怎么删除呢?

简单,只需要用下面的SQL获取响应的表名,然后,执行删除操作不就行了?

SELECT TABLE_NAME FROM information_schema.tables WHERE table_schema = "ecs_backup" AND CREATE_TIME < "2018-01-09 18:19"

然后,坐等出现问题后直接改名字恢复吧。

这个方法,好处就不说了,大家自己体会吧。

MySQL-怎么知道一张表那个字段是必填的呢?

今天在开发ShopNC的功能的时候,需要插入商品表的信息,那么就有一个问题了,怎么知道这个表的字段是否必填呢?因为必填项我们没有传入数据的话,是会报错的喔。

好吧,用下面的办法就能获取必填项的信息了。

执行下面的SQL语句,然后,得到的字段清单都是必填项。

SELECT
COLUMN_NAME,COLUMN_DEFAULT,DATA_TYPE,CHARACTER_SET_NAME,COLUMN_KEY,COLUMN_TYPE,COLUMN_COMMENT
FROM `information_schema`.`COLUMNS`
WHERE TABLE_SCHEMA='ecstore' AND `TABLE_NAME` = 'sdb_b2c_orders' AND IS_NULLABLE='NO'
ORDER BY ORDINAL_POSITION ASC

快去试试看呗。

Linux-find:自动设置文件的所有人

网站程序在关键的地方有输出日志,日志文件以日期为文件名,每天一个,同时也开启了计划任务也会执行这个关键地方的代码,这就造成计划任务执行后新建日志文件后,所有者为root,结果,前台执行的时候就会发生错误,老是提示权限不足的问题(关键词Permission denied….)。

怎么办呢?老是这么提示也不是办法,那就使用定时任务,定时查询日志目录的文件权限。

# crontab -e

1 */1 * * * find /data2/ -type f -user root -exec chown www:www {} \;

然后保存,就会每小时执行一次。

如果时间不懂得设置的话,可以使用下面的工具协助设置:crontab执行时间计算

当然,你要是觉得这样子很麻烦的,其实,你还可以直接使用www账户登录设置计划任务的。

Node.js-云转码的使用日记

最近在用云转码作为上传视频的平台,然后测试代码出现点问题,就做个日记,以防忘记。

尝试不断更新,更新时间为:2017.12.13 18.49

1.上传错误:上传密钥错误!

原因:因为上传平台设置了上传的“上传密钥”。

解决:登录后台,系统设置,然后下面“上传密钥”复制一下密钥,然后打开“安装目录\work\public\upload\js\upload.js”找到里面的userId: “我是一串字符”,将“我是一串字符”替换成上面复制的就行。

吐槽:这个密钥设置等于没设置,这样子有意义?

2.上传之后完成,但是后台就是没看到文件

原因:设置了上传允许的域名了,需要开启

解决:登录后台,系统设置,然后下面“允许域名”将需要允许的填写进去就可以了,或者全部清空。

3.

jQuery-纠结的jquery validation插件

jQuery Validation Plugin

这两天在二开ShopNC B2B2C版本的时候需要弄到校验的功能,然后才发现这个插件真的很纠结。

最大的纠结是rules数组的key值到底是元素的ID还是元素的NAME。

一开始以为很简单就直接去官网查看了,然后发现没有直白的说是ID还是NAME呀!!!

好吧,也许是我自己不知道在哪里看吧,那最简单的就是测试一下呗,然后就知道了,原来是NAME选择器。

这边就记录一下吧。

rules : {
lv : {
required : true,
},
‘Go[]’ : {
required : true,
}
},

其中lv是radio元素的用法,Go是checkbox的用法

文件格式unix与dos转换,CRLF与LF的区别查看

这两天被一个客户的网站系统搞得很头痛的,开发的好好地不知道哪里错了,新建的文件都是不能正确执行的。

怎么检查代码都是不正确的,噢,文件是PHP的文件,经过调试,最终定位在凡是require_once进来的文件都是不会被初始化的。

奇怪的是,原先的程序代码是可以的,但是一旦修改了,就会出现空白的情况。

一直翻查程序文件都没问题。

终于在调试的过程不断的变换编码中发现一个问题:就是程序里面的代码会莫名其妙的成了“乱码”直接显示出来了。

好吧,引入今天的话题吧。

文件的格式虽然都叫做纯文本,但是他们的存储格式还是有不同的,比如这个文件格式就分unxi、dos、mac。

文件格式之外,存储的内容还有编码的区别,比如utf-8、ansi等的区别。

同一个编码还存在有BOM没有BOM的区别。

当然,还有CRLF与LF的区别,天呐,真的会疯了的。

我不就想要好好编个程嘛~

下面就是使用notepad++来查看这些内容的。

第一、文档格式

编辑、文档格式转换

  1. 转换为Windows格式
  2. 转换为UNIX格式
  3. 转换为MAC格式

当前的文档格式会成灰色。

VI操作:

set fileformat=[unix|dos]

这个决定下面换行符的行为模式。

第二、CRLF与LF的查看

视图、显示符号、显示全部字符

然后你会发现,全部的字符后面都增加了CRLF或者LF了,具体是根据你的文档格式来定的。

这个决定行与行之间是什么关系,比如本来应该单行注释一行,紧跟一行正确代码,然后这个不正确的话就变成了同一行了,然后文件就错了。而使用这些智能的编辑器,他显示是自动转换的,结果你是死活不知道原来他的处理已经并成一行了。

第三、存储的编码

编码、选择合适的编码

这个决定文件的字符是正常文字还是“乱码”。

这样子之后就正常了~

域名在阿里万网,这么代续费

今天,因为种种的原因,居然发现公司下的一个项目域名居然到期三天还未续费,访问打不开了,只好到处找账号密码。

我们知道域名在哪里注册的,就只能在哪里续费,所以,如果有人告诉你,你的域名到期了,但是你从来不记得是在对方那边注册域名的,那么,请不要相信,因为他十有八九是骗你的。

不过,今天,我提交工单,居然发现,在阿里万网注册的域名,你可以不用找原先的注册商续费了,你可以用自己的账户给域名续费。

也许,这个服务不怎么神奇,主要是你没有经历,当年域名续费乱象的缘故,这些都不要紧,你只要知道你能帮人续费了。

这个有什么用呢?

比如你的域名到期了,续费费用只要50或者100元,而你的服务商可能收你100或者200元。

那么,我告诉你,你的续费费用是200或者300元。

早期,这笔费用我收了白收的,因为我没办法给你续费的,但是现在我可以了,只要我查一下,你的续费费用是50或者100元,然后,多的钱就是我的了。

具体流程如下:

详细请查阅《域名续费

域名代续费

域名代续费即指通过 A 账号为 B 账号下的域名进行续费。只要您有一个可以正常登录的阿里云会员账号,就可以直接对域名进行代续费操作。

适用场景:长时间不管理,忘记域名所在阿里云账号或账号密码,且账号下的手机和邮箱不可用,域名即将到期或处于续费宽限期。

支持代续费的域名:阿里云会员账号下注册的域名(渠道商下域名除外),且在可续费期限内的域名(.hk 域名和海外域名除外)。

代续费操作步骤如下:

  1. 通过阿里云会员账号 B 登录 阿里云域名代续费(若您无阿里云会员账号 B,需注册一个)。
  2. 单击 开始代续费
  3. 输入需续费的域名,单击 下一步
  4. 选择续费年限,单击 提交

系统将自动从账户余额中扣除相应金额,代续费成功。您可以进入 whois 域名信息查询 查询域名的到期时间,以确认域名是否续费成功。

注意:

  • 域名代续费只是对域名进行续费,域名的管理权限仍在原阿里云会员账号下。若您需要管理域名,仍需找回原阿里云会员账号,您可以通过 人工申诉 方式找回。
  • 域名代续费成功后,只有代续费一方可以申请发票。每个账号只能设置一个有效的发票抬头进行使用。
  • 域名代续费只能使用账户余额付款,提交订单前,请确保账号下有充足的余额。
  • 待续费成功后,会以短信、邮件方式通知代续和被续双方。

BackWPup备份WP全站

BackWPup是一款可以完整备份WP建站程序的插件。

安装

进入后台,在插件\安装插件\关键词输入BackWPup

然后你会看到

BackWPup – WordPress Backup Plugin这个插件,由Inpsyde GmbH开发的。

安装之后,启用。

在后台左边面板上会出现BackWPup的控制项,选择add new job后,根据选项填写。

主要选项如下:

job name:随便叫一个名字,不要看不懂就行。

job tasks:任务备份的选项,全站备份的话全部选择。

job destination:备份方式,怎么保存备份文件。请选择Backup to Folder就行。我们可以直接下载。

然后点击save changes就可以了。

接着在左边BackWPup的控制项,选择jobs后,你会看到你刚才新建的任务。

鼠标移动上去,然后选择Run now就可以了,剩下的就是等待。

等任务百分百后,在BackWPup的控制项,选择backups后你会看到多了一条记录,这个记录就是你的备份文档。

鼠标移到第二列,就是File列,然后你会看到多个一个delete跟download,按照你的需要点击吧。

备份完成哈。

最想要替代的应用

今天早上,在享受过不舒服服务经历后,我忽然觉得我特想取代的应用有如下。

这是我最近超级讨厌的应用了,拼多多我已经卸载了,百胜的公司还在用…

最喜欢看你看我不顺眼,却又干不掉我的样子……

慢慢来,总有机会,我会慢慢干掉这些看着不舒服的应用的。

  1. 拼多多,特价商品平台。
  2. 百胜efast365,ERP系统。