源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步

Top

NSD SERVICES DAY03

  1. 不积跬步,无以至千里;不积小流,无以成江海
  2. 环境准备
  3. 源码编译安装
  4. 数据同步
  5. 本地同步
  6. 远程同步(rsync+ssh)
  7. 实时数据同步
  8. 书写shell脚本(了解)
  9. 数据库服务基础(数据库系统)
  10. 部署MariaDB 数据库系统
  11. MariaDB基本使用
  12. 恢复数据到数据库中
  13. 表格操作
  14. 为数据库系统管理员设置密码
  15. 案例:编译安装软件包
  16. 案例:rsync基本用法
  17. 案例:rsync+SSH同步
  18. 案例:使用inotifywait工具
  19. 案例:搭建mariadb数据库系统
  20. 案例:使用数据库查询

1 不积跬步,无以至千里;不积小流,无以成江海

2 环境准备

所有虚拟机设置SELinux运行模式

  1. [root@server ~]# getenforce
  2. Enforcing
  3. [root@server ~]# setenforce 0 #当前设置
  4. [root@server ~]# getenforce
  5. Permissive
  6. [root@server ~]# vim /etc/selinux/config
  7. SELINUX=permissive

所有虚拟机设置防火墙(停止防火墙服务)

  1. [root@server ~]# yum -y remove firewalld
  2. [root@server ~]# rpm -q firewalld

3 源码编译安装

RPM软件包:rpm -ivh 或者 yum -y install

源码包----编译:开发工具gcc与make----》可以执行的程序-----》运行安装

•主要优点(可定制性强)

–获得软件的最新版,及时修复bug

–软件功能可按需选择/定制,有更多软件可供选择

–源码包适用各种平台

–……

步骤1:安装开发工具gcc与make,释放源代码至指定目录

步骤2:tar解包,释放源代码至指定目录

源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第1张图片

步骤3:./configure 配置,指定安装目录/功能模块等选项

步骤4:make 编译,生成可执行的二进制程序文件

步骤5:make install 安装,将编译好的文件复制到安装目录

真机tools.tar.gz 传递数据到虚拟机

真机为Linux:

]# ls /linux-soft/s1

]# scp /linux-soft/s1/tools.tar.gz [email protected]:/root

真机为windows:windterm进行上传tools.tar.gz

虚拟机A

1.安装开发工具

  1. [root@server ~]# yum -y install gcc make
  2. [root@server ~]# rpm -q gcc
  3. [root@server ~]# rpm -q make
  4. [root@server ~]#

源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第2张图片

2.进行解压缩

  1. [root@server ~]# tar -xf /root/tools.tar.gz -C /usr/local
  2. [root@server ~]# ls /usr/local/tools
  3. inotify-tools-3.13.tar.gz

3.进行tar解包

  1. [root@server ~]# tar -xf /usr/local/tools/inotify-tools-3.13.tar.gz -C /usr/local/
  2. [root@server ~]# ls /usr/local/
  3. [root@server ~]# cd /usr/local/inotify-tools-3.13/
  4. [root@server ~]# ls

源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第3张图片

4.运行configure脚本

作用1:检测当前系统是否安装gcc

作用2:指定安装位置与功能

作用3:生成Makefile文件(制作程序的大纲,做菜的菜谱)

  1. [root@server ~]# cd /usr/local/inotify-tools-3.13/
  2. [root@server ~]# ./configure --help #查看帮助信息,大概浏览一下
  3. [root@server ~]# ./configure --prefix=/opt/myrpm #指定安装位置,此步骤不产生相应的目录

源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第4张图片

 源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第5张图片

常见的报错信息:gcc开发工具没有安装

checking for gcc... no

checking for cc... no

checking for cl.exe... no

configure: error: no acceptable C compiler found in $PATH

See `config.log' for more details.

5.进行make编译,变成可以执行的程序(放在内存中)

  1. [root@server ~]# cd /usr/local/inotify-tools-3.13/
  2. [root@server inotify-tools-3.13]# make

源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第6张图片

6.进行make install安装

  1. [root@server ~]# cd /usr/local/inotify-tools-3.13/
  2. [root@server inotify-tools-3.13]# make install
  3. [root@server inotify-tools-3.13]# ls /opt/
  4. [root@server inotify-tools-3.13]# ls /opt/myrpm/
  5. [root@server inotify-tools-3.13]# ls /opt/myrpm/bin/

源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第7张图片

源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第8张图片

不指定位置  源码包会装到以下这个文件夹:

 做错从来:

删-解包

4 数据同步

• 命令用法

rsync   [选项...]   源目录   目标目录(rsync     /路径/源目标/   /路径/目标)

• rsync操作选项

-n:测试同步过程,不做实际修改

--delete:删除目标文件夹内多余的文档 

-a:归档模式,相当于-rlptgoD  (如下图解释)基本属性不变

-v:显示详细操作信息  (常用-av)

-X:保持acl策略不变

源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第9张图片

 源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第10张图片

5 本地同步

  1. [root@server ~]# mkdir /mydir /todir
  2. [root@server ~]# echo haha > /mydir/h.txt
  3. [root@server ~]# rsync -avX --delete /mydir/ /todir #同步目录的内容
  4. [root@server ~]# ls /mydir/
  5. [root@server ~]# ls /todir/
  6. [root@server ~]# touch /todir/a.txt
  7. [root@server ~]# ls /todir/
  8. [root@server ~]# rsync -avX --delete /mydir/ /todir
  9. [root@server ~]# ls /todir/
  10. [root@server ~]# ls /mydir/

源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第11张图片

6 远程同步(rsync+ssh)

• 与远程的 SSH目录保持同步

下行:rsync [...] user@host:远程目录 本地目录

上行:rsync [...] 本地目录 user@host:远程目录

虚拟机A的/mydir目录的内容与虚拟机B的/mnt进行同步

虚拟机A:

  1. [root@server ~]# rsync -avX --delete /mydir/ [email protected]:/mnt
  2. ……..connecting (yes/no)? yes
  3. [email protected]'s password: #输入密码

源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第12张图片

虚拟机B:

  1. [root@server ~]# ls /mnt

7 实时数据同步

虚拟机A的/mydir/目录的内容与虚拟机B的/mnt进行同步

实现ssh无密码验证(公钥与私钥)

虚拟机A

1.虚拟机A生成公钥与私钥

  1. [root@server ~]# ssh-keygen #一路回车
  2. [root@server ~]# ls /root/.ssh/
  3. id_rsa(私钥) id_rsa.pub(公钥) known_hosts(记录曾经远程管理过的机器)

源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第13张图片

2.虚拟机A将公钥传递给虚拟机B

  1. [root@server ~]# ssh-copy-id [email protected]
  2. [root@server ~]# rsync -avX --delete /mydir/ [email protected]:/mnt

源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第14张图片

监控目录内容变化工具

• 基本用法

inotifywait [选项] 目标文件夹

• 常用命令选项

-m,持续监控(捕获一个事件后不退出)

-r,递归监控、包括子目录及文件

-q,减少屏幕输出信息

-e,指定监视的 modify、move、create、delete、attrib 等事件类别

  1. inotifywait 监控目录内容变化
  2. rsync -avX --delete /mydir/ [email protected]:/mnt

监控加同步:

源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第15张图片

8 书写shell脚本(了解)

脚本:可以运行一个文件,实现某种功能

中文:新建用户zhangsan shell: useradd zhangsan

  1. [root@server /]# vim /root/hello.sh
  2. echo hello world
  3. hostname
  4. id root
  5. ifconfig | head -2
  6. [root@server /]# chmod +x /root/hello.sh #所有人赋予执行权限
  7. [root@server /]# /root/hello.sh #绝对路径执行脚本

源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第16张图片

重复性:循环解决

for  循环:有一定次数

格式:

while 循环:不定次数或者无限次数

源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第17张图片

  1. [root@server /]# vim   /etc/rsync.sh  #命名名字可任意修改
  2. while    /opt/myrpm/bin/inotifywait    -rqq   /mydir/  #两个q不要屏幕输出
  3. do
  4.        rsync   -aX   --delete   /mydir/    [email protected]:/mnt
  5. done
  6. [root@server /]# chmod   +x   /etc/rsync.sh #赋予执行权限
  7. [root@server /]# /etc/rsync.sh   & #放入后台运行脚本程序
  8. [root@server /]# jobs   -l   #-l选项 显 示进程的pid
  9. [1]    +    17707   运行中 /etc/rsync.sh &
  10. [root@server /]# kill  17707 #停止脚本,可以杀死进

源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第18张图片

 源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第19张图片

9 数据库服务基础(数据库系统)

数据库:存放数据的仓库

数据库系统中,有很多的数据库,在每一个库中有很多的表格

• 常见的关系型 数据库管理系统

微软的 SQL Server

IBM的 DB2

甲骨文的 Oracle、MySQL

社区开源版 MariaDB

……

  1. database :数据库

10 部署MariaDB 数据库系统

  1. [root@server /]# yum -y install mariadb-server
  2. [root@server /]# systemctl restart mariadb

源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第20张图片

11 MariaDB基本使用

1. Linux系统的管理指令不能使用

2. 所有的数据库系统指令都必须以 ; 结尾

3. 数据库系统的指令大部分不支持tab补全

  1. [root@server /]# mysql #进入数据库系统
  2. > create database nsd01; #创建nsd01数据库
  3. > show databases; #查看所有数据库
  4. > drop database nsd01; #删除数据库nsd01
  5. > show databases; #查看所有数据库
  6. > exit;
  7. Bye

源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第21张图片

  1. [root@server ~]#
  2. [root@server /]# mysql #进入数据库系统
  3. > use mysql; #切换到mysql数据库
  4. > show tables; #查看当前库中所有表格
  5. > show databases; #查看所有数据库
  6. > use test; #切换到test数据库
  7. > exit;

源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第22张图片

12 恢复数据到数据库中

真机传递数据到虚拟机

真机为Linux:

  1. ]# ls /linux-soft/1
  2. ]# scp /linux-soft/1/users.sql [email protected]:/root

真机为windows利用windterm软件

2.恢复数据到数据库

  1. [root@server /]# mysql #进入数据库系统
  2. > create database test; #创建test数据库
  3. > show databases; #查看所有数据库
  4. > exit;
  5. Bye
  6. [root@server ~]#
  7. [root@server ~]# mysql test < /root/users.sql
  8. [root@server ~]# mysql #进入数据库系统
  9. MariaDB [(none)]> use test; #切换到数据库test
  10. MariaDB [test]> show tables; #查看当前库有哪些表格
  11. +-------------------+
  12. | Tables_in_test |
  13. +-------------------+
  14. | base |
  15. | location |
  16. +-------------------+

源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第23张图片

源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第24张图片

13 表格操作

–增(insert) 删(delete) 改(update) 查(select)

  1. –表字段、表记录
  2. 编号        姓名        住址
  3. 1         Dc     东村
  4. 2         Tc        西村

查(select)

格式: select 表字段,表字段,…… from 库名.表名;

  1. [root@server /]# mysql
  2. > use test;
  3. > select * from base; #查看base所有表字段内容
  4. > select * from location; #查看location所有表字段内容
  5. > select name,password from base;
  6. > use mysql;
  7. > select * from test.base;
  8. > use test;
  9. > select id,name from base;

源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第25张图片

  1. [root@server /]# mysql
  2. > use test; #切换到test库
  3. 查询密码为456的记录
  4. > select * from base where password='456';
  5. 查看id编号为4的记录
  6. > select * from base where id='4';
  7. 查询id编号为4并且密码为123的记录
  8. > select * from base where id='4' and password='123';
  9. 查询id编号为4或者密码为123的记录
  10. > select * from base where id='4' or password='123';

源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第26张图片

增(insert)

格式:insert 表名 values (‘值’,‘值’,‘值’);

  1. MariaDB [test]> insert base values('10','dc','789');
  2. MariaDB [test]> insert base values('11','tcc','369');
  3. MariaDB [test]> select * from base ;

源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第27张图片

改(update)

格式:

update 表名 set 表字段=‘新值’ where 表字段=’值’;

  1. > select * from base ;
  2. > update base set password='8888' where id='1';
  3. > select * from base ;
  4. > update base set password='9999' where id='2';
  5. > select * from base ;

源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第28张图片

源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第29张图片

删(delete)

  1. > use test;
  2. > delete from base where id='4' ;
  3. > select * from base ;
  4. > delete from base where id='3' ;
  5. > select * from base ;

源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第30张图片

源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第31张图片

14 为数据库系统管理员设置密码

mysqladmin [-u用户名] [-p[旧密码]] password '新密码'

数据库系统管理员:对于数据库系统有最高权限,名字为root,能够登陆数据系统的用户信息,由mysql库中user表进行储存

Linux系统管理员: 对于Linux系统有最高权限,名字为root,能够登陆Linux系统的用户信息,/etc/passwd进行储存

  1. [root@server /]# mysqladmin -u root password '456'
  2. [root@server /]# mysql -u root -p #交互式进行登录
  3. Enter password:
  4. [root@server /]# mysql -u root -p456 #非交互式进行登录
  5. 已知旧密码修改新密码
  6. [root@server ~]# mysqladmin -u root -p456 password '123'
  7. [root@server ~]# mysql -u root -p123

源码编译安装、rsync命令、远程同步实现、inotify+rsync实时同步_第32张图片

15 案例:编译安装软件包

15.1 问题

本例要求掌握常规源代码应用的安装过程,通过编译的方式安装inotify-tools 软件工具,完成下列任务:

  1. 释放 inotify-tools-3.13.tar.gz 源码包
  2. 配置 ./configure
  3. 编译 make、安装 make install
  4. 测试inotifywait监控工具的用法及用途

15.2 方案

对于标准源码发布的C/C++软件包,编译安装一般包括以下过程:

  1. 解包:使用tar命令,将下载的源代码释放至指定目录
  2. 配置:执行源码目录内的 ./configure 脚本,指定安装目录/功能模块等选项
  3. 编译:在源码目录下执行 make 操作,根据配置清单Makefile生成可执行的二进制程序文件
  4. 安装:在源码目录下执行make install 操作,将编译好的程序及相关文件复制到安装目录

15.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:确认已配置好编译环境

  1. [root@svr7 ~]# yum -y install gcc gcc-c++ make
  2. .. ..
  3. [root@svr7 ~]# gcc --version
  4. gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4)
  5. Copyright (C) 2015 Free Software Foundation, Inc.
  6. This is free software; see the source for copying conditions. There is NO
  7. warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

步骤二:编译安装inotify-tools软件包

1)解包inotify-tools-3.13.tar.gz文件

  1. [root@svr7 ~]# ls inotify-tools-3.13.tar.gz
  2. inotify-tools-3.13.tar.gz
  3. [root@svr7 ~]# tar xf inotify-tools-3.13.tar.gz -C /usr/src/

2)配置 ./configure,安装目录默认(/usr/local/*/)

  1. [root@svr7 ~]# cd /usr/src/inotify-tools-3.13/         //进入源码目录
  2. [root@svr7 inotify-tools-3.13]# ./configure             //配置操作
  3. checking for a BSD-compatible install... /usr/bin/install -c
  4. checking whether build environment is sane... yes
  5. checking for gawk... gawk
  6. .. ..
  7. configure: creating ./config.status
  8. config.status: creating Makefile
  9. .. ..
  10. [root@svr7 inotify-tools-3.13]# ls Makefile             //检查配置结果
  11. Makefile

3)编译 make

  1. [root@svr7 inotify-tools-3.13]# make
  2. .. ..
  3. Making all in src
  4. make[2]: Entering directory `/usr/src/inotify-tools-3.13/src'
  5. make[3]: Entering directory `/usr/src/inotify-tools-3.13'
  6. make[3]: Leaving directory `/usr/src/inotify-tools-3.13'
  7. .. ..

4)安装 make install

  1. [root@svr7 inotify-tools-3.13]# make install
  2. .. ..
  3. /usr/bin/install -c .libs/inotifywait /usr/local/bin/inotifywait
  4. /bin/sh ../libtool --mode=install /usr/bin/install -c 'inotifywatch' '/usr/local/bin/inotifywatch'
  5. .. ..
  6. [root@svr7 inotify-tools-3.13]# find /usr/local/ -name "inotify*"
  7. /usr/local/bin/inotifywait                             //确认安装结果
  8. /usr/local/bin/inotifywatch
  9. /usr/local/include/inotifytools
  10. /usr/local/include/inotifytools/inotifytools.h

步骤三:测试inotify-tools软件程序

软件包inotify-tools提供了一个主要程序inotifywait,可以用来监控指定目录或文档的变化,并及时给出通知。

1)开启对/opt目录的事件监控

  1. [root@svr7 ~]# inotifywait -mrq /opt &                 //开启监控
  2. [1] 15568

2)修改/opt/目录内容,观察屏幕输出信息

  1. [root@svr7 ~]# touch /opt/a.txt                         //新建文件a.txt
  2. /opt/ CREATE a.txt
  3. /opt/ OPEN a.txt
  4. /opt/ ATTRIB a.txt
  5. /opt/ CLOSE_WRITE,CLOSE a.txt
  6. [root@svr7 ~]# mv /opt/a.txt /opt/b.txt                 //将文件改名
  7. /opt/ MOVED_FROM a.txt
  8. /opt/ MOVED_TO b.txt

3)结束inotifywait监控

杀死当前用户的第一个后台任务:

  1. [root@svr7 ~]# kill -9 %1
  2. [1]+ Killed inotifywait -mrq /opt

16 案例:rsync基本用法

16.1 问题

本例要求掌握远程同步的基本操作,使用rsync命令完成下列任务:

  1. 将目录 /boot 同步到目录 /todir 下
  2. 将目录 /boot 下的文档同步到目录 /todir 下
  3. 在目录 /boot 下新增文件 a.txt,删除 /todir 下的子目录 grub2,再次同步使 /todir 与 /boot 一致
  4. 验证 -a、-n、-v、--delete 选项的含义

16.2 方案

本地同步操作:

  • rsync [选项...] 本地目录1 本地目录2
  • rsync [选项...] 本地目录1/ 本地目录2

rsync同步工具的常用选项:

  • -n:测试同步过程,不做实际修改
  • --delete:删除目标文件夹内多余的文档
  • -a:归档模式,相当于-rlptgoD
  • -v:显示详细操作信息
  • -z:传输过程中启用压缩/解压

16.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:rsync同步基本操作

1)将目录 /boot 同步到目录 /todir 下

 
  
  1. [root@svr7 ~]# ls -l /todir                 //同步前
  2. ls: 无法访问/todir: 没有那个文件或目录
  3. [root@svr7 ~]# rsync -a /boot /todir         //将目录1作为目录2的子目录
  4. [root@svr7 ~]# ls -l /todir                 //检查同步结果
  5. 总用量 4
  6. dr-xr-xr-x. 4 root root 4096 11月 30 18:50 boot

2)将目录 /boot 下的文档同步到目录 /todir 下

  1. [root@svr7 ~]# rm -rf /todir                 //清理掉目录2
  2. [root@svr7 ~]# rsync -a /boot/ /todir         //将目录1下的文档同步到目录2下
  3. [root@svr7 ~]# ls -l /todir                 //检查同步结果
  4. 总用量 126708
  5. -rw-r--r--. 1 root root 126426 10月 30 2015 config-3.10.0-327.el7.x86_64
  6. drwxr-xr-x. 2 root root 4096 11月 30 18:50 extlinux
  7. drwx------. 6 root root 104 12月 9 09:58 grub2
  8. .. ..

3)同步效果测试

在目录/boot下新增文件a.txt,删除/todir下的子目录 grub2:

  1. [root@svr7 ~]# touch /boot/a.txt
  2. [root@svr7 ~]# rm -rf /todir/grub2/

现在目录/boot和/todir目录下的内容已经不一致了:

  1. [root@svr7 ~]# ls -ld /boot/a.txt /todir/a.txt
  2. ls: 无法访问/todir/a.txt: 没有那个文件或目录
  3. -rw-r--r--. 1 root root 0 1月 11 21:09 /boot/a.txt
  4. [root@svr7 ~]# ls -ld /boot/grub2 /todir/grub2
  5. ls: 无法访问/todir/grub2: 没有那个文件或目录
  6. drwx------. 6 root root 104 12月 9 09:58 /boot/grub2

再次同步使/todir与/boot一致:

  1. [root@svr7 ~]# rsync -a /boot/ /todir/

确认同步结果:

  1. [root@svr7 ~]# ls -ld /boot/a.txt /todir/a.txt
  2. -rw-r--r--. 1 root root 0 1月 11 21:09 /boot/a.txt
  3. -rw-r--r--. 1 root root 0 1月 11 21:09 /todir/a.txt
  4. [root@svr7 ~]# ls -ld /boot/grub2 /todir/grub2
  5. drwx------. 6 root root 104 12月 9 09:58 /boot/grub2
  6. drwx------. 6 root root 104 12月 9 09:58 /todir/grub2

步骤二:验证 -a、-v、-n、--delete 选项的含义

1)验证-a选项

当目录1包含文件夹时,若缺少-a或-r选项则文件夹会被忽略:

  1. [root@svr7 ~]# rsync /home /testa
  2. skipping directory home
  3. [root@svr7 ~]# ls -ld /testa
  4. ls: 无法访问/testa: 没有那个文件或目录

添加-a后才会执行同步:

  1. [root@svr7 ~]# rsync -a /home/ /testa
  2. [root@svr7 ~]# ls -ld /testa
  3. drwxr-xr-x. 4 root root 31 1月 6 17:33 /testa

类似的情况,当目录1中的数据出现权限、归属、修改时间等变化时,若文件内容不变默认不会同步,若希望目录2也同步这些变化,也需要-a选项。

2)验证-v选项

创建测试目录及文档:

  1. [root@svr7 ~]# mkdir /fdir
  2. [root@svr7 ~]# touch /fdir/1.txt

添加-v选项时,可以看到操作细节信息,比如第一次同步时:

  1. [root@svr7 ~]# rsync -av /fdir/ /tdir
  2. sending incremental file list
  3. created directory /tdir
  4. ./
  5. 1.txt                                 //传输文档列表
  6. sent 82 bytes received 34 bytes 232.00 bytes/sec
  7. total size is 0 speedup is 0.00

在目录/fdir/添加文件2.txt,再次跟踪同步信息:

  1. [root@svr7 ~]# touch /fdir/2.txt
  2. sending incremental file list
  3. ./
  4. 2.txt                                 //传输文档列表
  5. sent 100 bytes received 34 bytes 268.00 bytes/sec
  6. total size is 0 speedup is 0.00

确认目录1和目录2的内容已经一致:

  1. [root@svr7 ~]# ls /fdir/ /tdir/
  2. /fdir/:
  3. 1.txt 2.txt
  4. /tdir/:
  5. 1.txt 2.txt

再次跟踪同步信息,已经无需传输文件:

  1. [root@svr7 ~]# rsync -av /fdir/ /tdir
  2. sending incremental file list
  3. sent 58 bytes received 12 bytes 140.00 bytes/sec
  4. total size is 0 speedup is 0.00

3)验证-n选项

将-n、-v选项合用,可以模拟同步过程,显示需要做哪些操作(但并不真的同步)。

在目录/fdir下新建文件3.txt,测试同步操作:

  1. [root@svr7 ~]# touch /fdir/3.txt
  2. [root@svr7 ~]# rsync -avn /fdir/ /tdir/
  3. sending incremental file list
  4. ./
  5. 3.txt                                         //提示同步时会传输哪些文件
  6. sent 78 bytes received 18 bytes 192.00 bytes/sec
  7. total size is 0 speedup is 0.00 (DRY RUN)
  8. [root@svr7 ~]# ls -l /tdir/3.txt                 //但实际并未真的同步
  9. ls: 无法访问/tdir/3.txt: 没有那个文件或目录

去掉-n选项才会真正同步:

  1. [root@svr7 ~]# rsync -av /fdir/ /tdir/
  2. sending incremental file list
  3. ./
  4. 3.txt
  5. sent 114 bytes received 34 bytes 296.00 bytes/sec
  6. total size is 0 speedup is 0.00
  7. [root@svr7 ~]# ls -l /tdir/3.txt
  8. -rw-r--r--. 1 root root 0 1月 11 21:46 /tdir/3.txt

4)验证--delete选项

rsync同步操作默认只是将目录1的数据同步到目录2,但如果目录2存在多余的文件却并不会去除,除非添加—delete选项。

在目录/fdir、/tdir已经完成同步后,删除/tdir/2.txt文件,再次同步:

  1. [root@svr7 ~]# rm -rf /fdir/2.txt
  2. [root@svr7 ~]# rsync -a /fdir/ /tdir/

检查发现目标文件夹/tdir下的2.txt文件还在:

  1. [root@svr7 ~]# ls /fdir/ /tdir/
  2. /fdir/:
  3. 1.txt 3.txt
  4. /tdir/:
  5. 1.txt 2.txt 3.txt

这种情况下添加--delete选项再次执行同步,两个目录的内容就一致了:

  1. [root@svr7 ~]# rsync -a --delete /fdir/ /tdir/
  2. [root@svr7 ~]# ls /fdir/ /tdir/
  3. /fdir/:
  4. 1.txt 3.txt
  5. /tdir/:
  6. 1.txt 3.txt

17 案例:rsync+SSH同步

17.1 问题

本例要求掌握rsync与远程SSH资源的同步操作,使用rsync命令访问远程主机svr7,完成下列任务:

  1. 查看远程主机的 / 目录下有哪些子目录
  2. 从远程主机下载 /etc/passwd 文件到当前目录
  3. 将远程主机的 /boot/ 目录同步为本地的 /fromssh
  4. 将本机的 /etc 目录同步到远程主机的 /opt/下

17.2 方案

列出 SSH 服务端资源

  • rsync user@host:远程目录/

rsync+SSH远程同步操作:

  • rsync [...] user@host:远程目录 本地目录
  • rsync [...] 本地目录 user@host:远程目录

17.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:列出远程主机的SSH资源

查看远程主机svr7的/目录下有哪些子目录:

  1. [root@pc207 ~]# rsync [email protected]:/
  2. [email protected]'s password:                         //验证对方的密码
  3. dr-xr-xr-x 4096 2016/12/15 10:39:34 .
  4. lrwxrwxrwx 7 2016/12/07 09:21:50 bin
  5. lrwxrwxrwx 7 2016/12/07 09:21:50 lib
  6. lrwxrwxrwx 9 2016/12/07 09:21:50 lib64
  7. lrwxrwxrwx 8 2016/12/07 09:21:50 sbin
  8. dr-xr-xr-x 4096 2016/12/07 11:25:29 boot
  9. drwxr-xr-x 6 2016/12/07 09:21:14 data
  10. drwxr-xr-x 3200 2016/12/15 10:46:15 dev
  11. drwxr-xr-x 8192 2016/12/20 17:01:02 etc

步骤二:rsync+SSH同步操作

1)从远程主机svr7下载/etc/passwd文件到当前目录

  1. [root@pc207 ~]# rsync [email protected]:/etc/passwd ./
  2. [email protected]'s password:                         //验证对方的密码
  3. [root@pc207 ~]# cat passwd                             //检查同步结果
  4. root:x:0:0:root:/root:/bin/bash
  5. bin:x:1:1:bin:/bin:/sbin/nologin
  6. daemon:x:2:2:daemon:/sbin:/sbin/nologin
  7. adm:x:3:4:adm:/var/adm:/sbin/nologin
  8. lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  9. .. ..

2)将远程主机svr7的/boot/目录同步为本地的/fromssh

  1. [root@pc207 ~]# rsync -a [email protected]:/boot/ /fromssh
  2. [email protected]'s password:                         //验证对方的密码
  3. [root@pc207 ~]# ls /fromssh/                             //检查同步结果
  4. config-3.10.0-327.el7.x86_64
  5. extlinux
  6. grub2
  7. initramfs-0-rescue-a19921505cc7e19d20dfcd5cea7d8aa2.img
  8. initramfs-3.10.0-327.el7.x86_64.img
  9. initramfs-3.10.0-327.el7.x86_64kdump.img
  10. .. ..

3)将本机的/etc目录同步到远程主机svr7的/opt/下

确认目录大小:

  1. [root@pc207 ~]# du -sh /etc
  2. 35M    /etc

上行同步到远程主机svr7上:

  1. [root@pc207 ~]# rsync -a /etc [email protected]:/opt/
  2. [email protected]'s password:

在远程主机上检查同步结果:

  1. [root@svr7 ~]# du -sh /opt/etc
  2. 35M    /opt/etc

18 案例:使用inotifywait工具

18.1 问题

本例要求安装inotify-tools工具,并针对文件夹 /opt 启用 inotifywait 监控,完成下列任务:

  1. 当此目录下出现新建、修改、更改权限、删除文件等事件时能给出提示
  2. 验证上述监控事件的效果

18.2 方案

inotifywait监控操作:

  • inotifywait [选项] 目标文件夹

inotifywait常用命令选项:

  • -m,持续监控(捕获一个事件后不退出)
  • -r,递归监控、包括子目录及文件
  • -q,减少屏幕输出信息
  • -e,指定监视的 modify、move、create、delete、attrib 等事件类别

18.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:安装inotify-tools软件包

1)解包

  1. [root@svr7 ~]# tar xf inotify-tools-3.13.tar.gz -C /usr/src/

2)配置

  1. [root@svr7 ~]# cd /usr/src/inotify-tools-3.13/
  2. [root@svr7 inotify-tools-3.13]# ./configure

3)编译

  1. [root@svr7 inotify-tools-3.13]# make

4)安装

  1. [root@svr7 inotify-tools-3.13]# make

5)检查安装结果(inotifywait程序可用)

  1. [root@svr7 ~]# inotifywait --help
  2. inotifywait 3.13
  3. Wait for a particular event on a file or set of files.
  4. Usage: inotifywait [ options ] file1 [ file2 ] [ file3 ] [ ... ]
  5. Options:
  6.     -h|--help     Show this help text.
  7. .. ..

步骤二:测试inotifywait监控

1)开启监控任务,置入后台

  1. [root@svr7 ~]# inotifywait -mrq -e create,modify,move,attrib,delete /opt &
  2. [1] 55564

2)测试/opt/目录下的新建、修改、改名、更改权限、删除文件等事件的响应消息

观察新建文件时的监控信息:

  1. [root@svr7 ~]# touch /opt/a.txt
  2. /opt/ CREATE a.txt
  3. /opt/ ATTRIB a.txt

观察修改文件内容时的监控信息:

  1. [root@svr7 ~]# echo Hello > /opt/a.txt
  2. [root@svr7 ~]# /opt/ MODIFY a.txt
  3. /opt/ MODIFY a.txt

观察将文件改名时的监控信息:

  1. [root@svr7 ~]# mv /opt/a.txt /opt/b.txt
  2. /opt/ MOVED_FROM a.txt
  3. /opt/ MOVED_TO b.txt

观察修改文件权限时的监控信息:

  1. [root@svr7 ~]# chmod 600 /opt/b.txt
  2. /opt/ ATTRIB b.txt

观察删除文件时的监控信息:

  1. [root@svr7 ~]# rm -rf /opt/b.txt
  2. /opt/ DELETE b.txt

3)停止监控任务

  1. [root@svr7 ~]# kill -9 %1
  2. [1]+ 已杀死 inotifywait -mr -e create,modify,move,attrib,delete /opt

19 案例:搭建mariadb数据库系统

19.1 问题

本例要求在虚拟机server0上安装 MariaDB 数据库系统:

  1. 安装 mariadb-server、mariadb 软件包
  2. 启动 mariadb 服务

然后在客户端访问此数据库服务:

  1. 执行 SHOW DATABASES; 指令列出有哪些库
  2. 退出 mysql 交互界面

19.2 方案

数据库表及相关软件的基本知识:

  • 数据(记录):用来表示一个事物(实体)的一些信息(属性)的文字/图片文件等,例如字符串“:tedu.cn”
  • 数据表:存放很多条数据记录的容器,例如学员联系信息表、学员月考成绩表
  • 数据表的每一行:存放一条记录
  • 数据表的每一列/字段:很多个事物的同一个属性
  • 数据库:存放很多个相互关联的表格的容器,例如NSD1609学员档案库
  • 数据库管理系统(DBMS):用来管理(创建库/添加/查询/删除/授权等)数据库信息的软件平台

MariaDB服务端:软件包mariadb-server、系统服务mariadb

MariaDB客户端:软件包mariadb、管理工具mysql

MariaDB服务端配置文件:/etc/my.cnf

mysql命令的简单用法:

  1. mysql [-u用户名] [-p[密码]]

19.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:搭建MariaDB数据库服务器

1)安装软件包mariadb-server、mariadb

  1. [root@server0 ~]# yum -y install mariadb-server
  2. .. ..

2)启动系统服务mariadb,并设置开机自启

  1. [root@server0 ~]# systemctl restart mariadb
  2. [root@server0 ~]# systemctl enable mariadb
  3. ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service'

步骤二:访问本机的MariaDB数据库系统

1)以用户root连接本机的mariadb(或mysqld)数据库服务

  1. [root@server0 ~]# mysql -uroot
  2. Welcome to the MariaDB monitor. Commands end with ; or \g.
  3. Your MariaDB connection id is 3
  4. Server version: 5.5.35-MariaDB MariaDB Server
  5. Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.
  6. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  7. MariaDB [(none)]>

2)查看当前数据库系统内有哪些库

  1. MariaDB [(none)]> SHOW DATABASES;
  2. +--------------------+
  3. | Database |
  4. +--------------------+
  5. | information_schema |
  6. | mysql |
  7. | performance_schema |
  8. | test |
  9. +--------------------+
  10. 4 rows in set (0.00 sec)

3)退出操作环境

  1. MariaDB [(none)]> QUIT
  2. Bye
  3. [root@server0 ~]#

20 案例:使用数据库查询

20.1 问题

本例要求配置MariaDB数据库,完成以下任务:

  1. 在系统server0上使用数据库Contacts,通过SQL查询回答下列问题:密码是solicitous的人的名字?

20.2 方案

表记录增删改查:

  1. insert into [库名.]表名 values(值1,值2,值3);
  2. delete from [库名.]表名 where ...;
  3. update [库名.]表名 set 字段名=字段值 where ....;
  4. select 字段列表 from [库名.]表名 where 字段名1=值 and|or 字段名2=值;

统计查询结果的数量:

  1. select count(*) from [库名.]表名 where .. ..;

20.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:按条件查询表记录

1)按单个条件查询

找出密码是solicitous的人的名字?

  1. MariaDB [(none)]> SELECT name FROM Contacts.base WHERE Password='solicitous';
  2. +-------+
  3. | name |
  4. +-------+
  5. | James |
  6. +-------+
  7. 1 row in set (0.00 sec)

你可能感兴趣的:(服务器,运维,linux)