Shell脚本操作数据库
Shell脚本操作数据库:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 安装Yum list all | grep mariadb查看yum源中是否有mariadb包 则通过yum进行安装,否则进行其他方式的安装 Yum install mariadb mariadb-server mariadb-libs -y 配置Systemctl status mariadb Systemctl start mariadb 可以看到running? 配置文件路径和数据文件路径 使用Select version();查看版本 Show databases; Use 数据库 Create insert select drop alter delete update等操作 Create database school default charset=utf8; Select school < school.sql使用脚本插入制定的数据库中 以下是对数据库对其他用户设置权限 grant all on school.* to [email?protected]’%’ identified by ‘123456’ Grant 哪些权限,比如select on? 那个数据库的哪些表 to 用户名@主机ip地址 identified by 用户密码 ? Mysql命令参数详解: ???????? -u 用户名 -p 用户密码 -h 服务器ip地址 -D? 连姐姐的数据库 -N 不输出列的信息 -B? 使用tab键代替默认的交互分隔符 -e? 执行SQL语句 其他的选项 -E 垂直输出 -H 以HTML格式输出 -X 以XML格式输出 举例:需求1:写一个脚本,该脚本可以接收二个参数,参数为需要执行的SQL语句例如: bash operate_mysql.sh “select * from student;” Operate_mysql.sh如下所示: #!/bin/bash # user=‘dbuser‘ password=‘123456‘ host=‘127.0.0.1‘ sql="$2" db="$1" ? ? mysql -u"$user" -p"$password" -h"$host" -D"$db" -B -e "$sql" 需求2:将文本中格式化的数据导入到MYSQL数据库中文本文件的data.txt的内容如下: [[email?protected] script]# cat data.txt 101???? xiaoming??????? mail 102???? xiaohua???????? femail 104???? xiaofang??????? mail 脚本内容insert.sh #!/bin/bash # user="dbuser" password="123456" host="127.0.0.1" mysql_conn="mysql -u"$user" -p"$password" -h"$host"" cat data.txt | while read id name age do ??????? $mysql_conn -e "insert into school.student values(‘$id‘,‘$name‘,‘$age‘)" done ~? ?? ///以上的写法中,mysql_conn尽量不要以变量的形式写在脚本中,容易出错//? ///注意单双引号的用法,如果变量双引号,在执行的时候,会进行赋值操作,变量就不起作用了,所以引用变量的地方进行用单引号//????? 执行结果 [[email?protected] script]# bash operate_mysql.sh school "select * from student;" id????? name??? age 102???? xiaohua ??femail 104???? xiaofang?? mail [[email?protected] script]# ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ? 需求3:将以下文本格式的数据导入到MYSQL数据库中文本格式的内容如下data1.txt [[email?protected] script]# cat data1.txt 105|fangqiming|mail 106|xiaomingming|mail 107|xiaohua|femail 以上数据的分割符号是“|” 脚本文件 #!/bin/bash # user="dbuser" password="123456" host="127.0.0.1" #mysql_conn="mysql -u"$user" -p"$password" -h"$host""不能这么写,出错! IFS="|" ? cat data1.txt | while read id name age do ??????? if [ $id -gt 105 ];then ??????????????? mysql -u"$user" -p"$password" -h"$host" -e "insert into school.student values(‘$id‘,‘$age‘)" ??????? fi done ~???? 执行结果是: [[email?protected] script]# bash operate_mysql.sh school "select * from student;" id????? name??? ???age 106???? xiaomingming??? mail 107???? xiaohua ?????femail [[email?protected] script]# 备份数据备份MYSQL数据库或者表 mysqldump ?? 常用参数详解 ???????? -u? 用户名 -p? 密码 -h? 服务器ip地址 -d?? 等价于—no-data? 指导处表结构 -t??? 等价于—no-create-info 只导出数据,不导出建表语句 -A??? 等价于—all-databases -B?? 等价于—databases 导出一个或者多个数据库 FTP常用指令: Open?? 与FTP服务器建立连接,例如 open 192.168.10.104 User??? 有权限登录FTP服务器的用户名与密码,例如: user 需求1: 将school中的student表备份,并且将备份数据通过FTP传输到192.168.10.104的/data/backup目录下mysqldump -udbuser -p123456 -h127.0.0.1 -B school > test1.sql FTP安装和使用命令详解:Centos7系统安装,yum install vsftpd 配置: /etc/vsftpd/Vsftpd.conf ??????????? 添加userlist_deny=NO作用是当userlist_enable=YES时候user_list表中添加的用户名允许登录,当userlist_deny=YES 则相反。 ???? 注意的是:配置是控制着对端主机的。 ???????? ?受控端设置local_root=/var/ftp默认上传的路径。 chmod 777 –r /vars/ftp设置读写权限。 启动: service vsftpd restart? service vsftpd status可以看到running则正常 验证: [[email?protected] vsftpd]# ftp 192.168.10.104 Connected to 192.168.10.104 (192.168.10.104). 220 (vsFTPd 3.0.2) Name (192.168.10.104:root): root 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> pwd 257 "/var/ftp" FTP使用前提:主控端和受控端都安装vsftpd协议 服务运行状态 在受控端有授权的用户 3、创建宿主用户 在受控端依次执行如下 # 创建用户 ftpuser 指定 `/home/vsftpd` 目录 useradd -g root -M -d /home/vsftpd -s /sbin/nologin ftpuser # 设置用户 ftpuser 的密码 passwd ftpuser # 把 /home/vsftpd 的所有权给ftpuser.root chown -R ftpuser.root /etc/vsftpd 此时可以看到,如下已经有授权的用户了,用户名密码我设置的ftpuser,tarena [[email?protected] vsftpd]# cat /etc/passwd | grep ftpuser ftpuser:x:1009:0::/home/vsftpd:/sbin/nologin [[email?protected] vsftpd]# 注意把 /home/vsftpd 的所有权所给的用户密码是控制访问的用户,而访问者要输入的用户名和密码是被访问系统的用户名和密码 比如 系统A 当前系统root tarena ---------------------------- 系统B,当前系统root tarena Username: ftpuser???????????????????????? username:fangqiming Password:tarena?????????????????????????? password: tarena [[email?protected] vsftpd]$? ----------à-username:root,password:tarena username:root,password:tarena-<--------- [[email?protected] xiaoming]# 有关useradd更多的参数说明和vsftpd的参数说明和配置见下面的网址 参考网址: https://www.cnblogs.com/lei0213/p/8657039.html 参考网址: https://www.cnblogs.com/craftor/p/3811612.html 需求1实现mysqldump -udbuser -p123456 -h127.0.0.1 -B school > test1.sql 指定的数据库school备份出来后,通过以下的脚本,将备份的文件发送到192.168.10.104服务器上 ============================================= [[email?protected] script]# vim ftp.sh?? #设置脚本内容,将下面 [[email?protected] script]# bash ftp.sh ??#执行脚本 Connected to 192.168.10.104 (192.168.10.104). 220 (vsFTPd 3.0.2) 331 Please specify the password. 230 Login successful. 250 Directory successfully changed. local: test1.sql remote: test1.sql 227 Entering Passive Mode (192,168,10,104,56,62). 150 Ok to send data. 226 Transfer complete. 2188 bytes sent in 9.7e-05 secs (22556.70 Kbytes/sec) 221 Goodbye. [[email?protected] script]# ================================================ [[email?protected] script]# vim ftp.sh #!/bin/bash # ftp -inv << EOF ??????? open 192.168.10.104 ??????? user root tarena ??????? ??????? cd /tmp ??????? put test1.sql ??????? bye EOF 执行结果: 在受控端 192.168.10.106 /tmp中查看,已传递成功! [[email?protected] tmp]# ll test1.sql -rw-r--r--. 1 root root 2188 Apr 18 14:19 test1.sql [[email?protected] tmp]# 较完整的代码如下: ===================================== 功能: 备份数据库到文件 将备份数据传输到远端服务器 设置定时备份并传输任 ====================================== #!/bin/bash # db_user="dbuser" db_password="123456" db_host="127.0.0.1" db_file_time="`date +%Y%m%d%H%M%S`" sql_name="school_student_${db_file_time}.sql" ftp_password="tarena" ftp_user="root" ftp_host="192.168.10.104" dest_path="/root/data/backup" ? function auto_ftp { ftp -niv << EOF ??????? open "$ftp_host" ??????? user $ftp_user $ftp_password ? ??????? cd $dest_path ??????? put $1 ??????? bye EOF } mysqldump -u"$db_user" -p"$db_password" -h"$db_host" school student > $sql_name && auto_ftp $sql_name (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |