shell操作mysql数据库
一、安装启动mariadb
yum install mariadb mariadb-server mariadb-libs -y
systemctl start mariadb
#导入数据
mysql
create database *** default character set utf8;
use ***;
show tables;
mysql *** < ***.sql
#赋予普通用户权限
grant all on 数据库名.* to 用户名@'%' indentified by '123456';(all-所有权限,.*-该数据库下所有表,%所有主机,123456密码)
grant select on...(select-查询权限)
#查询用户可以从哪些主机访问
use mysql;
show tables;
select * from user;
desc user;(desc查询表结构)
select User,Host,Password from user;(Host为%表示用户从所有主机都可以访问)
#普通用户登录mysql
mysql -u 用户名 -p 密码 -h 主机IP
#普通用户导入数据
mysql -u 用户名 -p 密码 -h 主机IP 数据库名 < ***.sql
二、shell脚本与mysql数据库交互
mysql命令参数详解
-u 用户名
-p 用户密码
-h 服务器IP地址
-D 连接的数据库
-N 不输出列信息
-B 使用tab键代替默认交互分隔符
-e 执行sql语句
其他选项
-E 垂直输出
-H 以HTML格式输出
-X 以XML格式输出
mysql -u 用户名 -p 密码 -h 主机IP -D 数据库名 -e "select * from 表名"
vim operate_mysql.sh
#!/bin/bash
user="用户名'
password="密码"
host="主机ip"
db_name="$1"
SQL="$2"
mysql -u"$user" -p"$password" -h"$host" -D"$db_name" -B -e "$SQL"(-B是为了可以导入excel)
sh operate_mysql.sh 参数1-数据库名 参数2-sql语句
#将sql查询结果导入excel
sh operate_mysql.sh 参数1-数据库名 参数2-sql语句 > result.txt
打开excel-数据-自文本
三、shell脚本将文本数据导入到mqsql
data.txt
vim import.sh
#!/bin/bash
user="用户名'
password="密码"
host="主机ip"
mysql_conn="mysql -u"$user" -p"$password" -h"$host""
cat data.txt | while read id name birth sex
do
if [[ $id -gt 1014 ]]; then
$mysql_conn -e "insert into 数据库名.表名 values('$id','$name','$birth','$sex')"
fi
done
sh import.sh
data2.txt
vim import.sh
#!/bin/bash
user="用户名'
password="密码"
host="主机ip"
#shell内置环境变量,如果不指定,shell默认空格或tab键为分隔符
IFS="|"
cat data2.txt | while read id name birth sex
do
if [ $id -gt 2022 ]; then
mysql -u"$user" -p"$password" -h"$host" -e "insert into 数据库名.表名 values('$id','$name','$birth','$sex')"
fi
done
sh import.sh
四、备份mysql数据,并通过ftp将其传输到远端主机
备份mysql中的库或表
mysqldump
-u 用户名
-p 密码
-h 服务器IP地址
-d 等价于--no-data 只导出表结构
-t 等价于--no-create-info 只导出数据,不导出建表语句
-A 等价于--all-databases
-B 等价于--databases 导出一个或多个数据库
mysqldump -u 用户名 -p 密码 -h 主机IP 数据库名 >***.sql(备份数据库)
mysqldump -u 用户名 -p 密码 -h 主机IP 数据库名 数据表名 >***.sql(备份数据表)
mysqldump -u 用户名 -p 密码 -h 主机IP -A >***.sql(备份所有有权限的数据库)
mysqldump -u 用户名 -p 密码 -h 主机IP -B 数据库名1 数据库名2 >***.sql(备份1个或多个数据库)
FTP常用指令
open 与FTP服务器建立连接,例:open 192.168.100.3
user 有权限登录FTP服务器的用户名和密码,例:user 用户名 密码
vim ftp.sh
#!/bin/bash
ftp -inv << EOF(-i 关闭交互模式,<<输入重定向,EOF 遇到EOF表示输入结束,-n自动登录,-v显示文件是否传输成功提示信息)
open 192.168.100.3
user 用户名 密码
cd 上传目录
put 文件名
bye
EOF
sh ftp.sh
vim auto_backup.sh
#!/bin/bash
db_user=""
db_password=""
db_host=""
ftp_user=""
ftp_password=""
ftp_host=""
src_dir=""(本地数据库备份目录)
dst_dir=""(ftp服务器目录)---chown -R 用户名:组名 目录(修改目录权限)
time_date="`date +%Y%m%d%H%M%S`"
file_name="数据库名_数据表名_${time_date}.sql"
function auto_ftp
{
ftp -niv << EOF
open $ftp_host
user $ftp_user ftp_password
cd $dst_dir
put $1
bye
EOF
}
mysqldump -u"$db_user" -p"$db_password" -h"$db_host" 数据库名 数据表名> $src_dir/$file_name && auto ftp $src_dir/$file_name
sh auto_backup.sh
#定时备份
crontab -e
*/1 * * * * sh auto_backup.sh & > /dev/null (每隔1分钟备份一次)
#编辑服务器的定时任务
crontab -e
#查看服务器的定时任务
crontab -l
#crontab的详细介绍
more /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed