设计需求
使用shell 脚本向mysql数据库写入数据,并备份mysql数据。
需求拆解
- 设计用shell连接Mysql数据库的代码模块
- 设计用shell创建Mysql数据库与数据表的代码模块
- 设计用shell读写数据Mysql数据文本的代码模块
- 设计用shell备份mysql数据库数据的代码模块
代码实现
#!/bin/bash
# 声明属性变量
user="root"
password="######" #需要输入实际的数据密码
host="localhost"
# 读入数据库名称
echo "pls input a database name : "
read db_name
# 读入数据表名称
echo "pls input a datatable name : "
read tab_name
# 声明数据文件存放变量
sqlfile_dir="/Users/hadoop/shellHome/shellScripts/TextDataToInsertMysqlDataTab.txt"
# 执行数据库的创建
mysql -h"${host}" -u"${user}" -p"${password}" <<EOF 2> /dev/null
create database ${db_name};
EOF
# 判定读入的数据库是否创建成功
existsdb_code=$([ $? -eq 0 ] && echo "0" || echo "1") ##0:数据库创建成功,1:数据库已经存在
if [[ ${existsdb_code} == '0' ]];then
echo ">>>数据库:${db_name}创建成功"
else
echo ">>>数据库:${db_name}已经存在"
fi
# 执行数据表的创建
mysql -h"${host}" -u"${user}" -p"${password}" -D${db_name} <<EOF 2> /dev/null
create table $tab_name (
name varchar(50) not null,
sex varchar(50) not null,
height double,
weight double,
nationality varchar(100)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
EOF
# 判定读入的数据表是否创建成功
existstab_code=$([ $? -eq 0 ] && echo "0" || echo "1") ##0:数据表创建成功,1:数据表已经存在
if [[ ${existstab_code} == '0' ]];then
echo ">>>数据表:${tab_name}创建成功"
else
echo ">>>数据表:${tab_name}已存在"
fi
# 检查新建的数据库or数据表是否已经创建成功
if [[ ${existstab_code} == '1' ]];then
echo ">>>数据库与数据表已经存在,数据统计: "
mysql -h"$host" -u"$user" -p"$password" <<EOF 2> /dev/null
select count(*) from $db_name.$tab_name;
EOF
else
# 读取数据与写入数据
while read line
do
# 读取数据
sql_row=($(echo ${line} | tr ' ' ','))
# 写入数据
mysql -h"${host}" -u"${user}" -p"${password}" -D"${db_name}" <<EOF 2> /dev/null
insert into ${tab_name} values(${sql_row});
EOF
done < ${sqlfile_dir}
fi
# 判定数据读取与写入是否已经成功
datawr_code=$([ $? -eq 0 ] && echo "0" || echo "1")
if [[ ${existstab_code} == '0' ]];then
echo ">>>写入数据后的统计数据: "
mysql -h"$host" -u"$user" -p"$password" <<EOF 2> /dev/null
select count(*) from $db_name.$tab_name;
EOF
else
echo ">>>数据未写入数据表"
fi
# 备份数据库中的数据
echo ">>>备份数据"
# 数据时间
postfix_file=$(date +'%s')
# 数据备份文件
sqlback_dir="/Users/hadoop/shellHome/shellScripts/MysqlBackup_${postfix_file}.sql"
# 执行数据备份
mysqldump -h"$host" -u"$user" -p"$password" --lock-all-tables --databases ${db_name} > "${sqlback_dir}" 2> /dev/null
# 检查Mysql文件是否备份成功
if [ -f ${sqlback_dir} ];then
echo "There is a MysqlDumpFile for backup: ${postfix_file}"
else
echo "There is no a Mysql backup file and time is : ${postfix_file}"
fi
开发说明
数据是否需要写入的判定:在开发代码的时候,需要考虑输入的数据库与数据表是否存在,若存在,则不写入数据;若不存在,则新建数据库与数据表,并写入数据。
shell与Mysql常用的命令:
1.登录Mysql数据库
mysql -h"${host}" -u"${user}" -p"${password}"
2.使用Mysql数据库
mysql -h"${host}" -u"${user}" -p"${password}" -D"${db_name}"
3.备份数据库数据
mysqldump -h"$host" -u"$user" -p"$password" --lock-all-tables --databases ${db_name} > "${sqlback_dir}"
参考文档
感谢作者的辛苦付出,备份Mysql数据库的代码对我有很大的启发!