写一个清空Mysql数据库数据的脚本Shell

18 篇文章 0 订阅
12 篇文章 0 订阅

写一个清空Mysql数据库数据的脚本Shell
服务器安装部署mysql8.0.2,需要有 mysqldump 命令

#!/usr/bin/bash

# mysql -e cmd 可以用shell操作mysql,不在mysql提示符下操作,非交互式,适合嵌入shell脚本
# shell 单引号和双引号的区别,单引号属于强引用,不对引号内任何特殊字符转义,只当普通字符.双引号属于弱引用,会对括起来的特殊字符做处理.
# mysqldump --no-data 参数(跟-d 一样),表示只导出数据库表结构,不导出数据.用-t则表示只导出数据,不导出表结构.
# 删除数据库有3种方法:(delete有所保留,可以回滚,drop更彻底)
# -e是echo的一个可选项,用于激活特殊字符的解析器, 也就是对反斜线转义符(即\)的解释。\033引导非常规字符序列。
# shell脚本在开头加上"set -x"表示调试模式,会把每句命令都打印出来,再打印每句命令的执行结果
# 
# set -x
HOSTNAME='xxx.xxx.xxx.xxx'
PORT=3309
USERNAME='username'
PASSWORD='password'
DATABASE='shop_mall_bk'
# 业务数据存储路径
DB_ROOT=/data/nfsqd_shop/db/userful-sql
# 业务数据表结构,不含数据
MALL_NO_DATA=${DB_ROOT}/shop_mall-nodata.sql
# 要保留的数据
MALL_NEED_DATA=${DB_ROOT}/config.sql
# 要保留的数据表
MALL_NEED_TABLES="goods_spu goods_sku article_category article_info company_info company_employee_info ensure freight_templat goods_brand goods_category goods_property material material_group page_devise pay_config shop_info theme_mobile user_address user_collect user_footprint user_info welfare welfare_goods welfare_shop"
CREATE_DB="CREATE DATABASE IF NOT EXISTS ${DATABASE} DEFAULT CHARSET utf8 COLLATE utf8_general_ci"

echo -e "\033[47;34m ------------ 企业福利通积分商城数据清理脚本 ------------- \033[0m"

result()
{
if [ $? -eq 0 ];then
echo -e "\033[47;32m ----------- $1 succeed! ---------- \033[0m"
else
echo -e "\033[47;31m ----------- $1 failed! ----------- \033[0m"
fi
}
# 保存数据库数据结构
echo -e "\033[47;34m ------------ step 1: dump a no-data sql of joolun_mall ------------- \033[0m"
mysqldump -u${USERNAME} -p${PASSWORD} -h${HOSTNAME} -P${PORT} ${DATABASE} --no-data > ${MALL_NO_DATA}
result step1
# 保存数据库必要的数据内容
echo -e "\033[47;34m ------------ step 2: dump important config like goods_spu,goods_sku,etc ------------- \033[0m"
mysqldump -u${USERNAME} -p${PASSWORD} -h${HOSTNAME} -P${PORT} ${DATABASE} ${MALL_NEED_TABLES} > ${MALL_NEED_DATA}
result step2
# 删除数据库
echo -e "\033[47;34m ------------ step 3: drop joolun_mall ------------- \033[0m"
mysql -u${USERNAME} -p${PASSWORD} -h${HOSTNAME} -P${PORT} ${DATABASE} -e "drop database ${DATABASE}"
result step3
# 重新新建数据库
echo -e "\033[47;34m ------------ step 4: create a new joolun_mall ------------- \033[0m"
mysql -u${USERNAME} -p${PASSWORD} -h${HOSTNAME} -P${PORT}  -e "${CREATE_DB}"
result step4
# 导入数据库数据结构
echo -e "\033[47;34m ------------ step 5: import the backup table-structure ------------- \033[0m"
mysql -u${USERNAME} -p${PASSWORD} -h${HOSTNAME} -P${PORT} ${DATABASE} -e "source ${MALL_NO_DATA}"
result step5
# 导入数据库必要的数据
echo -e "\033[47;34m ------------ step 6: import the backup config ------------- \033[0m"
mysql -u${USERNAME} -p${PASSWORD} -h${HOSTNAME} -P${PORT} ${DATABASE} -e "source ${MALL_NEED_DATA}"
result step6
# 用户积分清零
echo -e "\033[47;34m ------------ step 7: 用户积分清零 ------------- \033[0m"
mysql -u${USERNAME} -p${PASSWORD} -h${HOSTNAME} -P${PORT} ${DATABASE} -e "update user_info set integral = 0.00"
result step7
# 供货商积分清零
echo -e "\033[47;34m ------------ step 8: 供货商积分清零 ------------- \033[0m"
mysql -u${USERNAME} -p${PASSWORD} -h${HOSTNAME} -P${PORT} ${DATABASE} -e "update shop_info set integral = 0.00"
result step8
# 单位积分清零
echo -e "\033[47;34m ------------ step 9: 单位积分清零 ------------- \033[0m"
mysql -u${USERNAME} -p${PASSWORD} -h${HOSTNAME} -P${PORT} ${DATABASE} -e "update company_info set integral = 0.00"
result step9
好的,以下是一个示例的 MySQL 数据库备份脚本,可以用于将数据铺底: ``` #!/bin/bash DB_USER="your_db_username" DB_PASSWORD="your_db_password" DB_NAME="your_db_name" BACKUP_DIR="/path/to/backup/dir" # Create backup directory if it doesn't exist mkdir -p $BACKUP_DIR # Backup database mysqldump --user=$DB_USER --password=$DB_PASSWORD $DB_NAME > $BACKUP_DIR/$DB_NAME.sql # Truncate tables mysql --user=$DB_USER --password=$DB_PASSWORD $DB_NAME -e "SET foreign_key_checks = 0; TRUNCATE TABLE table1; TRUNCATE TABLE table2; SET foreign_key_checks = 1;" # Load data into tables mysql --user=$DB_USER --password=$DB_PASSWORD $DB_NAME < $BACKUP_DIR/$DB_NAME.sql ``` 在脚本中,您需要将 `your_db_username` 替换为 MySQL 数据库的用户名,`your_db_password` 替换为 MySQL 数据库的密码,`your_db_name` 替换为要备份和铺底的数据库名称,`/path/to/backup/dir` 替换为用于存储备份文件的目录路径。 脚本的第一部分使用 `mysqldump` 命令备份数据库,并将备份文件保存到 `$BACKUP_DIR` 目录下。 接着,脚本使用 `mysql` 命令将数据库中的指定表清空,然后再使用 `mysql` 命令将备份文件中的数据重新载入到数据库中。 请注意,为了避免在清空表时触发外键约束,我们使用 `SET foreign_key_checks = 0` 语句来禁用外键约束,然后在重新加载数据后使用 `SET foreign_key_checks = 1` 语句重新启用外键约束。 希望这可以帮助您实现数据铺底功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

junehappylove

急急如律令,buibui~~

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

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

打赏作者

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

抵扣说明:

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

余额充值