MySQL【操作篇】01:使用Shell操作MySQL

一、创建测试用户和测试表

CREATE USER 'shell_rw'@'%' IDENTIFIED BY 'admin';
GRANT create,alter,insert,delete,select,update,show view ON *.* TO 'shell_rw'@'%';

create database test;
use test;
CREATE TABLE products (
  id int NOT NULL AUTO_INCREMENT,
  name varchar(255) NOT NULL,
  price decimal(10, 2) NOT NULL,
  PRIMARY KEY (id)
);

在这里插入图片描述
插入数据

INSERT INTO products (name, price) VALUES 
('Laptop Computer', 4599.00),
('Smartphone', 2999.00),
('Bluetooth Headphones', 399.50),
('Smart Watch', 1299.00),
('Electric Toothbrush', 199.00),
('Coffee Maker', 599.00),
('Air Fryer', 699.00),
('Wireless Charger', 149.00),
('Mechanical Keyboard', 799.00),
('Portable Hard Drive', 899.00);

在这里插入图片描述

二、通过linux命令行连接MySQL

1、查询数据库列表

mysql -ushell_rw -p'admin' -e "show databases"

在这里插入图片描述

2、查询一个库中所有的表

mysql -ushell_rw -p'admin' test-e "show tables"

在这里插入图片描述

3、查询一张表的数据

mysql  -ushell_rw -p'admin' test  -e "select * from products"

在这里插入图片描述

三、在shell脚本里对MySQL数据进行增删改查

#!/bin/bash

# 设置MySQL连接信息
mysql_host='localhost'
mysql_user='shell_rw'
mysql_pass='admin'
mysql_db='test'

# 执行写入操作
mysql -h"$mysql_host" -u"$mysql_user" -p"$mysql_pass" $mysql_db -e "insert into products (name,price) values ('apple',10.50)"

# 查询数据
mysql -h"$mysql_host" -u"$mysql_user" -p"$mysql_pass" $mysql_db -e "select * from  products where name='apple'"

# 修改数据
mysql -h"$mysql_host" -u"$mysql_user" -p"$mysql_pass" $mysql_db -e "update products set price=12.5 where name='apple'"

# 删除数据
mysql -h"$mysql_host" -u"$mysql_user" -p"$mysql_pass" $mysql_db -e "delete from  products where name='apple'"

四、使用AI工具生成MySQL的脚本

1、shell连接MySQL的脚步

提问词:

编写一个Shel脚本,查询MySQL8.0当前活跃连接,并导入到当前路径下的文件下,文件名是processist 当前时间.log,比如processist_2025_0303_20_08.log

生成的脚步如下:

cd /root/
vim export_processlist.sh
#!/bin/bash 
# 设置数据库连接参数(建议通过配置文件或安全方式存储密码)
MYSQL_USER="root"
MYSQL_HOST="localhost"
export MYSQL_PWD="admin"  # 通过环境变量传递密码避免安全警告 
 
# 生成带时间戳的文件名(格式:processlist_YYYY_MM_DD_HH_MM.log )
current_time=$(date +%Y_%m_%d_%H_%M)
output_file="processlist_${current_time}.log"
 
# 执行活跃连接查询(过滤Sleep状态连接)
mysql -h $MYSQL_HOST -u $MYSQL_USER --batch -e \
"SELECT * FROM information_schema.processlist  WHERE COMMAND != 'Sleep' AND INFO IS NOT NULL;" > $output_file 2>/dev/null 
 
# 结果处理 
if [ $? -eq 0 ]; then 
    echo "导出成功!文件路径:$(pwd)/${output_file}"
    echo "活跃连接数:$(grep -v '^ID' $output_file | wc -l)"
else 
    echo "导出失败,请检查:"
    echo "1. MySQL服务状态  2. 用户权限  3. 连接参数配置"
fi 

执行脚本
在这里插入图片描述

cat processlist_2025_03_03_20_31.log

在这里插入图片描述

2、MySQL参数查询的脚本

提问词:

ip.txt中,每一行存放MySQL的IP地址、用户名和密码,形式如下:
192.168.5.129,root,admin
192.168.5.130,root,admin
请编写一个shel脚本,提示我们输入变量名,就可以把所有MySQL的IP,这个变量和变量在MySQL中对应的值展示出来

生成的脚本如下:

cd /root
vim query_mysql_var.sh
#!/bin/bash 
# 功能:批量查询MySQL服务器指定变量的值
# 使用方式:./query_mysql_var.sh  
 
# 检查ip.txt 文件是否存在 
if [ ! -f "ip.txt"  ]; then 
    echo -e "\033[31m错误:ip.txt 文件不存在!\033[0m"
    exit 1 
fi 
 
# 获取用户输入的变量名
read -p "请输入要查询的MySQL变量名称:" variable_name 
 
# 逐行读取ip.txt 文件 
while IFS=',' read -r ip username password; do 
    echo -e "\n\033[34m正在查询服务器:$ip\033[0m"
    
    # 执行MySQL查询命令 
    result=$(mysql -h "$ip" -u "$username" -p"$password" --silent --skip-column-names -e "SHOW VARIABLES LIKE '$variable_name';" 2>/dev/null)
    
    # 检查查询结果 
    if [ $? -eq 0 ]; then 
        if [ -n "$result" ]; then 
            variable_value=$(echo "$result" | awk '{print $2}')
            echo -e "[\033[32m成功\033[0m] $variable_name = \033[33m$variable_value\033[0m"
        else 
            echo -e "[\033[33m警告\033[0m] 未找到变量:$variable_name"
        fi 
    else 
        echo -e "[\033[31m失败\033[0m] 无法连接MySQL服务器或认证失败"
    fi 
done < ip.txt  

测试脚本

ip.txt内容如下:

192.168.15.129,root,admin
192.168.15.129,root,admin

在这里插入图片描述

新增远程连接权限,

  use mysql;
  update user set host='%' where user='root';
  flush privileges;

在这里插入图片描述

不然会遇到下面的问题
在这里插入图片描述

3、统计MySQL信息的shell脚本

提问词
编辑-个Shell脚本
脚本运行10秒,
统计10秒前后MySQL8.0的查询次数(Queries的变化)
以及这10秒产生的慢查询数量(Slow_queries的变化)
要注意这些值,都是在执行 SHOW GLOBAL STATUS like xxx,之后的第二行,需要过滤出来
用户名和密码在脚本前面定义,后面通过用户名密码的变量来连接MySQL

cd /root/
vim query_mysql_info
#!/bin/bash
# MySQL连接信息
username="shell_rw"
password="admin"
# 获取初始查询次数和慢查询数量
initial_queries=$(mysql -u$username -p$password -e "SHOW GLOBAL STATUS LIKE 'Queries';" | awk 'NR==2 {print $2}')
initial_slow_queries=$(mysql -u$username -p$password -e "SHOW GLOBAL STATUS LIKE 'Slow_queries';" | awk 'NR==2 {print $2}')

#等待10秒
sleep 10

#获取最终查询次数和慢查询数量
final_queries=$(mysql -u$username -p$password -e "SHOW GLOBAL STATUS LIKE 'Queries';" | awk 'NR==2 {print $2}')
final_slow_queries=$(mysql -u$username -p$password -e "SHOW GLOBAL STATUS LIKE 'Slow_queries';" | awk 'NR==2 {print $2}')

#计算查询次数和慢查询数量的变化
queries_diff=$((final_queries - initial_queries))
slow_queries_diff=$((final_slow_queries - initial_slow_queries))

#输出结果
echo "查询次数变化:$queries_diff"
echo "慢查询数量变化:$slow_queries_diff"

执行脚本

sh  sh query_mysql_info.sh

在这里插入图片描述
同时开一个窗口,制造慢查询语句。

mysql -ushell_rw -padmin
 select sleep(2);
 select sleep(2);
 select sleep(2);

在这里插入图片描述

4、业务表统计信息

提示词

编辑一个Shell脚本
查询information_schema.tables 统计某个库所有表的预估数据量
自增值
存储引擎
每一行展示一张表的信息
cd /root/
vim mysql_table_info.sh
#!/bin/bash 
# 功能:统计指定库所有表的预估数据量、自增值、存储引擎 
# 用法:./table_stats.sh  [数据库名]
 
# 检查参数 
if [ $# -ne 1 ]; then 
    echo "用法:$0 [数据库名]"
    exit 1 
fi 
 
# MySQL连接配置(按需修改)
host="localhost"
port="3306"
user="root"
password="admin"
dbname="$1"
 
# 执行SQL查询 
mysql -h"$host" -P"$port" -u"$user" -p"$password" --vertical <<EOF | awk 'NR>1'
SELECT 
    TABLE_NAME AS '表名',
    TABLE_ROWS AS '预估数据量',
    AUTO_INCREMENT AS '自增值',
    ENGINE AS '存储引擎'
FROM information_schema.tables  
WHERE TABLE_SCHEMA = '$dbname'
ORDER BY TABLE_NAME;
EOF

测试脚本

sh mysql_table_info.sh test

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

做一个有趣的人Zz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值