标签:交换分区 ports 内存 软件包管理 文章 建议 lvm files nfs
总结
1.权限管理-----------
@1.用户权限管理
chown : 设置用户属组属主
chown 属主:属组
chown :属组 文件
chgrp :设置用户属组
chgrp 属组 文件
@2.文件权限管理
chmod命令用来改变许可权限。读取、写入和执行是许可权限中的三个主要设置。
chmod: 设置文件的读、写、执行
r—文件可以被读取 w—文件可以被写入 x—文件可以被执行,如果文件是程序的话
可以使用带有-l的ls命令来仔细查看一个文件的许多细节。
chmod命令用来设定文件的权限。标准用法:
chmod 文件的使用者(u,g,o,a)增减(+,-,=)权限名称(r,w,x) 文件
文件的使用者说明权限说明增减说明 u 拥有文件的用户r读取权+添加权限 g所有者所在的组群 w写入权 -删除权限 o其他人x执行权=是它称为唯一权限 a全部(u,g和o)
删除某一文件的所有权限,输入命令:
chmod a-rwx test.txt
为文件所有者添加权限,输入命令:
chmod u+rwx test
还可以用数字表示权限:4——读取,2——写入,1——执行。下面的两个命令等价:
chmod 751 filename chmod u+rwx,g=rx,0=x filename
@3.防火墙:iptables
防火墙策略 规则
你可以使用如下命令来查看 IPtables 防火墙策略FILTER 表:
iptables -L -n -v
如果你发布有某个 IP 向服务器导入攻击或非正常流量,可以使用如下规则屏蔽其 IP 地址: iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP
注意需要将上述的 XXX 改成要屏蔽的实际 IP 地址,其中的 -A 参数表示在 INPUT 链的最后追加本条规则。(IPTables 中的规则是从上到下匹配的,一旦匹配成功就不再继续往下匹配)
如果你只想屏蔽 TCP 流量,可以使用 -p 参数的指定协议,例如: iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP
解封某个IP地址
要解封对 IP 地址的屏蔽,可以使用如下命令进行删除: iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP
其中 -D 参数表示从链中删除一条或多条规则。
使用IPtables关闭特定端口
很多时候,我们需要阻止某个特定端口的网络连接,可以使用 IPtables 关闭特定端口。
阻止特定的传出连接: iptables -A OUTPUT -p tcp --dport xxx -j DROP
阻止特定的传入连接: iptables -A INPUT -p tcp --dport xxx -j ACCEPT
使用Multiport控制多端口
使用 multiport 我们可以一次性在单条规则中写入多个端口,例如: iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j ACCEPT
在规则中使用 IP 地址范围
在 IPtables 中 IP 地址范围是可以直接使用 CIDR 进行表示的,例如: iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT
配置端口转发
有时我们需要将 Linux 服务器的某个服务流量转发到另一端口,此时可以使用如下命令: iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525
上述命令会将所有到达 eth0 网卡 25 端口的流量重定向转发到 2525 端口。
屏蔽HTTP服务Flood攻击
有时会有用户在某个服务,例如 HTTP 80 上发起大量连接请求,此时我们可以启用如下规则: iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT
上述命令会将连接限制到每分钟 100 个,上限设定为 200。
禁止PING
对 Linux 禁 PING 可以使用如下规则屏蔽 ICMP 传入连接: iptables -A INPUT -p icmp -i eth0 -j DROP
允许访问回环网卡
环回访问(127.0.0.1)是比较重要的,建议大家都开放: iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT
屏蔽指定MAC地址
使用如下规则可以屏蔽指定的 MAC 地址: iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP
限制并发连接数
如果你不希望来自特定端口的过多并发连接,可以使用如下规则: iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT
@4.setenforce 0服务都是以普通用户启动的
@5.服务权限-----所有的
2. 网络管理
@1.ip地址管理
增删改查命令
使用ifconfig命令配置并查看网络接口情况
ifconfig:查看linux ip地址
ifconfig -a
@2.路由管理
使用route 命令配置路由
增删改查
表示例1:添加到主机路由# route add –host 192.168.4.2 dev eth0:1# route add –host 192.168.4.1 gw 192.168.4.250
2 ip address delete–删除一个协议地址. 缩写:delete、del、d# ip addr del 192.168.4.1/24 brd + dev eth0 label eth0:Alias1
5.3 ip address show–显示协议地址. 缩写:show、list、lst、sh、ls、l# ip addr ls eth0
5.4.ip address flush–清除协议地址. 缩写:flush、f示例1 : 删除属于私网10.0.0.0/8的所有地址:# ip -s -s a f to 10/8示例2 : 取消所有以太网卡的IP地址# ip -4 addr flush label “eth0″—————————
@3.NDS 查看验证域名是否解析成功
ping命令。第一行会返回域名及解析的ip
host命令。会返回域名has ip 地址。
nslookup命令。输入命令后回车,在命令提示符输入域名,回车,就会显示域名的ip地址。
dig命令。会显示a记录即域名的解析。
dig命令可以trace解析过程,先访问13台根域root(.)服务器,其中一台根域服务器返回一级域名服务器(本例是.com.)的ip地址,一级服务器再返回二级域名服务器ip地址(本例 .baidu.com.)...... dig命令的其他参数,可以查看help。
@4.网卡管理
ifup ifdown
ifdown和ifup命令和运行ifconfig up,ifconfig down的功能一样。给定网络接口的名字可以只禁用或启用这一个接口。需要root权限,所以在Ubuntu上需要使用sudo来运行。
netstat -s则显示所有端口的详细统计信息。
3.管理本地资源命令
@1.内存 查看命令
2)硬盘
3)cpu
4)进程
5)内核
top:
主要参数
d:指定更新的间隔,以秒计算。
q:没有任何延迟的更新。如果使用者有超级用户,则top命令将会以最高的优先序执行。
c:显示进程完整的路径与名称。
S:累积模式,会将己完成或消失的子行程的CPU时间累积起来。
s:安全模式。
i:不显示任何闲置(Idle)或无用(Zombie)的行程。
n:显示更新的次数,完成后将会退出to
显示参数:
PID(Process ID):进程标示号。
USER:进程所有者的用户名。
PR:进程的优先级别。
NI:进程的优先级别数值。
VIRT:进程占用的虚拟内存值。
RES:进程占用的物理内存值。
SHR:进程使用的共享内存值。
S:进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数。
%CPU:该进程占用的CPU使用率。
%MEM:该进程占用的物理内存和总内存的百分比。
TIME+:该进程启动后占用的总的CPU时间。
Command:进程启动的启动命令名称,如果这一行显示不下,进程会有一个完整的命令行。
top命令使用过程中,还可以使用一些交互的命令来完成其它参数的功能。这些命令是通过快捷键启动的。
<空格>:立刻刷新。
P:根据CPU使用大小进行排序。
T:根据时间、累计时间排序。
q:退出top命令。
m:切换显示内存信息。
t:切换显示进程和CPU状态信息。
c:切换显示命令名称和完整命令行。
M:根据使用内存大小进行排序。
W:将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。
free
1.作用
free命令用来显示内存的使用情况,使用权限是所有用户。
2.格式
free [-b-k-m] [-o] [-s delay] [-t] [-V]
3.主要参数
-b -k -m:分别以字节(KB、MB)为单位显示内存使用情况。
-s delay:显示每隔多少秒数来显示一次内存使用情况。
-t:显示内存总和列。
-o:不显示缓冲区调节列。
uptime
18:59:15 up 25 min, 2 users, load average: 1.23, 1.32, 1.21
现在的时间
系统开机运转到现在经过的时间
连线的使用者数量
最近一分钟,五分钟和十五分钟的系统负载
参数: -V 显示版本资讯。
vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 1 24980 10792 8296 47316 5 19 205 52 1161 698 26 3 1 70
1 观察磁盘活动情况
磁盘活动情况主要从以下几个指标了解:
bi:表示从磁盘每秒读取的块数(blocks/s)。数字越大,表示读磁盘的活动越多。
bo:表示每秒写到磁盘的块数(blocks/s)。数字越大,表示写磁盘的活动越多。
wa:cpu等待磁盘I/O(未决的磁盘IO)的时间比例。数字越大,表示文件系统活动阻碍cpu的情况越严重,因为cpu在等待慢速的磁盘系统提供数据。wa为0是最理想的。如果wa经常大于10,可能文件系统就需要进行性能调整了。
2 观察cpu活动情况
vmstat比top更能反映出cpu的使用情况:
us:用户程序使用cpu的时间比例。这个数字越大,表示用户进程越繁忙。
sy: 系统调用使用cpu的时间比例。注意,NFS由于是在内核里面运行的,所以NFS活动所占用的cpu时间反映在sy里面。这个数字经常很大的话,就需要注 意是否某个内核进程,比如NFS任务比较繁重。如果us和sy同时都比较大的话,就需要考虑将某些用户程序分离到另外的服务器上面,以免互相影响。
id:cpu空闲的时间比例。
wa:cpu等待未决的磁盘IO的时间比例。
iostat
用于统计CPU的使用情况及tty设备、硬盘和CD-ROM的I/0量
参数:
-c 只显示CPU行
-d 显示磁盘行
-k 以千字节为单位显示磁盘输出
-t 在输出中包括时间戳
-x 在输出中包括扩展的磁盘指标
avg-cpu: %user %nice %sys %iowait %idle
20.25 0.18 2.61 76.39 0.57
%iowait 等待本地I/O时CPU空闲时间的百分比
%idle 未等待本地I/O时CPU空闲时间的百分比
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
hda 9.86 284.34 84.48 685407 2036
每秒传输数(tps)、每秒512字节块读取数(Blk_read/s)、每秒512字节块写入数(Blk_wrtn/s)和512字节块读取(Blk_read)和写入(Blk_wrtn)的总数量。
系统
# uname -a # 查看内核/操作系统/CPU信息
# head -n 1 /etc/issue # 查看操作系统版本
# cat /proc/cpuinfo # 查看CPU信息
# hostname # 查看计算机名
# lspci -tv # 列出所有PCI设备
# lsusb -tv # 列出所有USB设备
# lsmod # 列出加载的内核模块
# env # 查看环境变量
资源
# free -m # 查看内存使用量和交换区使用量
# df -h # 查看各分区使用情况
# du -sh # 查看指定目录的大小
# grep MemTotal /proc/meminfo # 查看内存总量
# grep MemFree /proc/meminfo # 查看空闲内存量
# uptime # 查看系统运行时间、用户数、负载
# cat /proc/loadavg # 查看系统负载
磁盘和分区
# mount | column -t # 查看挂接的分区状态
# fdisk -l # 查看所有分区
# swapon -s # 查看所有交换分区
# hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)
# dmesg | grep IDE # 查看启动时IDE设备检
# ps -ef # 查看所有进程
# top # 实时显示进程状态
服务
# chkconfig --list # 列出所有系统服务
# chkconfig --list | grep on # 列出所有启动的系统服务
4.文件处理命令
@1.编辑命令
如果没有文档而且你又想编辑就可以直接编辑vi aa【名字你可以随便命名】
也可以先建立一个文档touch aa 然后再编辑vi aa
编辑器有三种模式 1 命令行模式 2 末行模式 3 输入模式
按Esc 就可以进入命令行模式也是系统默认模式
输入模式可以按 o i a 都可以进入 退出可以进入末行和命令行模式
末行模式可以按ctrl+;它的主要功能是退出编辑器 也可以保存退出文档
q! 【强制退出不保存】 q【退出不保存】 wq【退出并保存后面也可以加个!】
在输入模式和命令行模式命令很多 如果你想具体知道哪些你可以在和我说
如复制(yy)粘贴(p) 删除(d)等等
@2.增删改查
使用vi编辑该文件:
vi有两个模式:一个是编辑一个是命令。我们从命令进入编辑为:i,o,a。一般使用的是i:因为这个我是最熟悉的。退出点击esc键,就进入命令模式。
我们需要删除文件的当前行和后一行,命令为:2dd,一般我们使用的是单个字符的删除为:x。我们一般进入编辑模式,来进行添加,修改,删除。
但是当我们删除和修改的内容过多的时候,我们使用命令行模式,进行修改,这样方便,快捷,而命令行中,最常用到的是x,dd,u,p这四个命令:
x:删除当前字符:
dd:删除当前行:
u:恢复前一步操作:
p:复制之前删除的行:
rm -rf 删除文件
touch 、 vim、vi、echo、cp 创建新文件
mv 修改名字
5.磁盘分区命令
@1.主分区
@2.逻辑分区
@3.扩展分区
分区工具fdisk用法介绍
fdisk命令参数介绍
p、打印分区表。
n、新建一个新分区。
d、删除一个分区。
q、退出不保存。
w、把分区写进分区表,保存并退出
6.软件管理命令(安装 、 卸载、更新、查看、查看)
1)rpm
rpm ---
rpm -qf
rpm -ql
RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序”
rpm 执行安装包
二进制包(Binary)以及源代码包(Source)两种。二进制包可以直接安装在计算机中,而源代码包将会由RPM自动编译、安装。源代码包经常以src.rpm作为后缀名。
常用命令组合:
-ivh:安装显示安装进度--install--verbose--hash
-Uvh:升级软件包--Update;
-qpl:列出RPM软件包内的文件信息[Query Package list];
-qpi:列出RPM软件包的描述信息[Query Package install package(s)];
-qf:查找指定文件属于哪个RPM软件包[Query File];
-Va:校验所有的RPM软件包,查找丢失的文件[View Lost];
-e:删除包
rpm -q samba //查询程序是否安装
rpm -ivh /media/cdrom/RedHat/RPMS/samba-3.0.10-1.4E.i386.rpm //按路径安装并显示进度
rpm -ivh --relocate /=/opt/gaim gaim-1.3.0-1.fc4.i386.rpm //指定安装目录
rpm -ivh --test gaim-1.3.0-1.fc4.i386.rpm //用来检查依赖关系;并不是真正的安装;
rpm -Uvh --oldpackage gaim-1.3.0-1.fc4.i386.rpm //新版本降级为旧版本
rpm -qa | grep httpd #[搜索指定rpm包是否安装]--all搜索*httpd*
rpm -ql httpd #[搜索rpm包]--list所有文件安装目录
rpm -qpi Linux-1.4-6.i368.rpm #[查看rpm包]--query--package--install package信息
rpm -qpf Linux-1.4-6.i368.rpm #[查看rpm包]--file
rpm -qpR file.rpm #[查看包]依赖关系
rpm2cpio file.rpm |cpio -div #[抽出文件]
rpm -ivh file.rpm #[安装新的rpm]--install--verbose--hash
rpm -ivh
http://mirrors.kernel.org/fedora/core/4/i386/os/Fedora/RPMS/gaim-1.3.0-1.fc4.i386.rpm
rpm -Uvh file.rpm #[升级一个rpm]--upgrade
rpm -e file.rpm #[删除一个rpm包]--erase
2)yum
yum -
1 安装 yum install 全部安装 yum install package1 安装指定的安装包package1 yum groupinsall group1 安装程序组group1
2 更新和升级 yum update 全部更新 yum update package1 更新指定程序包package1 yum check-update 检查可更新的程序 yum upgrade package1 升级指定程序包package1 yum groupupdate group1 升级程序组group1
3 查找和显示 yum info package1 显示安装包信息package1 yum list 显示所有已经安装和可以安装的程序包 yum list package1 显示指定程序包安装情况package1 yum groupinfo group1 显
3)源码安装------二级制
wget 命令
wget http://xxx.xxx.xxx.xx/aaa/gcc.tar.gz -c -O /tmp/gcc.tar.gz
-c 断点下载
-O 指定路径
wget 下载网站
wget -m http://xxx.com/xxx
wget -r -p -np -k http://xxx.com/xxx
-r, --recursive(递归) specify recursive download.(指定递归下载) -k, --convert-links(转换链接) make links in downloaded HTML point to local files.(将下载的HTML页面中的链接转换为相对链接即本地链接) -p, --page-requisites(页面必需元素) get all images, etc. needed to display HTML page.(下载所有的图片等页面显示所需的内容) -np, --no-parent(不追溯至父级) don‘t ascend to the parent directory.
4)二进制------(绿色软件)
8、日常命令:
ping
命令格式:
ping [参数] [主机名或IP地址]
2.命令功能:
ping命令用于:确定网络和各外部主机的状态;跟踪和隔离硬件和软件问题;测试、评估和管理网络。如果主机正在运行并连在网上,它就对回送信号进行响应。每个回送信号请求包含一个网际协议(IP)和 ICMP 头,后面紧跟一个 tim 结构,以及来填写这个信息包的足够的字节。缺省情况是连续发送回送信号请求直到接收到中断信号(Ctrl-C)。
ping 命令每秒发送一个数据报并且为每个接收到的响应打印一行输出。ping 命令计算信号往返时间和(信息)包丢失情况的统计信息,并且在完成之后显示一个简要总结。ping 命令在程序超时或当接收到 SIGINT 信号时结束。Host 参数或者是一个有效的主机名或者是因特网地址。
3.命令参数:
-d 使用Socket的SO_DEBUG功能。
-f 极限检测。大量且快速地送网络封包给一台机器,看它的回应。
-n 只输出数值。
-q 不显示任何传送封包的信息,只显示最后的结果。
-r 忽略普通的Routing Table,直接将数据包送到远端主机上。通常是查看本机的网络接口是否有问题。
-R 记录路由过程。
-v 详细显示指令的执行过程。
<p>-c 数目:在发送指定数目的包后停止。
-i 秒数:设定间隔几秒送一个网络封包给一台机器,预设值是一秒送一次。
-I 网络界面:使用指定的网络界面送出数据包。
-l 前置载入:设置在送出要求信息之前,先行发出的数据包。
-p 范本样式:设置填满数据包的范本样式。
-s 字节数:指定发送的数据字节数,预设值是56,加上8字节的ICMP头,一共是64ICMP数据字节。
-t 存活数值:设置存活数值TTL的大小。
ssh
有的时候需要确认一下SSH客户端及其相应的版本号。使用ssh -V命令可以得到版本号。需要注意的是,Linux一般自带的是OpenSSH: 下面的例子即表明该系统正在使用OpenSSH:
$ ssh -V OpenSSH_3.9p1, OpenSSL 0.9.7a Feb 19 2003
下面的例子表明该系统正在使用SSH2:
$ ssh -V ssh: SSH Secure Shell 3.2.9.1 (non-commercial version) on i686-pc-linux-gnu
命令格式 : ssh name@remoteserver 或者 ssh remoteserver -l name 说明:以上两种方式都可以远程登录到远程主机,server代表远程主机,name为登录远程主机的用户名。
命令格式: ssh name@remoteserver -p 2222 或者 ssh remoteserver -l name -p 2222 说明:p 参数指定端口号,通常在路由里做端口映射时,我们不会把22端口直接映射出去,而是转换成其他端口号,这时就需要使用-p端口号命令格式。
命令格式: ssh -t remoteserver1 ssh remoteserver2 说明:当远程主机remoteserver2无法直接到达时,可以使用-t参数,然后由remoteserver1跳转到remoteserver2。在此过程中要先输入remoteserver1的密码,然后再输入remoteserver2的密码,然后就可以操作remoteserver2了。
命令格式: ssh -l name remoteserver ‘command’ 说明:连接到远程主机,并执行远程主机的command命令。例如:查看远程主机的内存使用情况。 $ ssh -l root 192.168.1.100 svmon -G
默认情况下,SSH监听连接端口22,攻击者使用端口扫描软件就可以看到主机是否运行有SSH服务,将SSH端口修改为大于1024的端口是一个明智的选择,因为大多数端口扫描软件(包括nmap)默认情况都不扫描高位端口。打开/etc/ssh/sshd_config文件并查找下面这样的行: Port 22 去掉该行前面的# 号,然后修改端口号并重新启动SSH服务: $ /etc/init.d/ssh restart
有两个SSH协议版本,仅使用SSH协议版本2会更安全,SSH协议版本1有安全问题,包括中间人攻击(man-in-the-middle)和注入(insertion)攻击。编辑/etc/ssh/sshd_config文件并查找下面这样的行: # Protocol 2,1 修改为 Protocol 2
通常情况下,不采用直接用root用户登录到远程主机,由于root用户拥有超级权限,这样会带来安全隐患,所以,一般我们用普通用户登录,当需要管理远程主机时,再切换到root用户下。打开/etc/ssh/sshd_config文件并查找下面这样的行: #PermitRootLogin yes 将#号去掉,然后将yes修改成no,重启ssh服务,这样就可以禁止root用户登录。
将#号去掉,然后将bannertest.txt文件的全路径替换/some/path,然后保存,重启ssh服务。当客户端登录时,就会看到bannertest.txt文件中的提示信息。
假如公司内网有台web服务器,但是只对内不对外,这样,外网就无法访问,可以用ssh进行端口映射来实现外网访问内网的web服务器。假如web服务器名为webserver,webserver可以用ssh访问到远端主机remoteserver,登录到webserver,然后用下面命令进行映射 命令格式: ssh -R 3000:localhost:80 remoteserver 执行完成后,在remoteserver机器上,执行netstat -an | grep 3000,查看有没有开通3000端口。并执行以下命令观察是否可以打开webserver上的网页 $ w3m http://127.0.0.1:3000 如果能打开界面,说明映射成功.但是,这只限于本机访问web服务器,即只能remoteserver机器访问webserver。因为3000端口绑定的是remoteserver机器的127.0.0.1端口。可以编辑remoteserver机器上的/etc/ssh/sshd_config文件并添加如下内容: 添加 GatewayPorts yes 内容,把监听端口3000绑定到 0.0.0.0 地址上,这样外部的所有机器都能访问到这个监听端口,然后保存退出。并重启ssh服务。完成后其它机器就可以在浏览器中输入 http://remoteserver:3000来访问webserver了。
首先编辑一个文件,如bannertest.txt,文件内容自行定义。然后打开/etc/ssh/sshd_config文件并查找下面这样的行: #Banner /some/path
telnet
(1)用法:
用法: telnet [参数] [主机]
(2)功能:
功能: telnet命令通常用来远程登录。
原理: Telnet服务虽然也属于客户机/服务器模型的服务,但它更大的意义在于实现了基于Telnet协议的远程登录(远程交互式计算)。
telnet实现的远程登录:
分时系统允许多个用户同时使用一台计算机,为了保证系统的安全和记帐方便,系统要求每个用户有单独的帐号作为登录标识,系统还为每个用户指定了一个口令。用户在使用该系统之前要输入标识和口令,这个过程被称为‘登远程登陆是指用户使用Telnet命令,使自己的计算机暂时成为远程主机的一个仿真终端的过程。仿真终端等效于一个非智能的机器,它只负责把用户输入的每个字符传递给主机,再将主机输出的每个信息回显在屏幕上。
telnet的简介:
Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个 telnet会话,必须输入用户名和密码来登录服务器。
Telnet是常用的远程控制Web服务器的方法。但是,telnet因为采用明文传送报文,安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的ssh方式了。但仍然有很多别的系统可能采用了telnet方式来提供远程登录,因此弄清楚telnet客户端的使用方式仍是很有必要的。
telnet命令还可做别的用途,比如确定远程服务的状态,比如确定远程服务器的某个端口是否能访问。
(3)选项参数:
1) -8 允许使用8位字符资料,包括输入与输出。
2) -a 尝试自动登入远端系统。
3) -b<主机别名> 使用别名指定远端主机名称。
4) -c 不读取用户专属目录里的.telnetrc文件。
5) -d 启动排错模式。
6) -e<脱离字符> 设置脱离字符。
7) -E 滤除脱离字符。
8) -f 此参数的效果和指定"-F"参数相同。
9) -F 使用Kerberos V5认证时,加上此参数可把本地主机的认证数据上传到远端主机。
10) -k<域名> 使用Kerberos认证时,加上此参数让远端主机采用指定的领域名,而非该主机的域名。
11) -K 不自动登入远端主机。
12) -l<用户名称> 指定要登入远端主机的用户名称。
13) -L 允许输出8位字符资料。
14) -n<记录文件> 指定文件记录相关信息。
15) -r 使用类似rlogin指令的用户界面。
16) -S<服务类型> 设置telnet连线所需的IP TOS信息。
17) -x 假设主机有支持数据加密的功能,就使用它。
18) -X<认证形态> 关闭指定的认证形态。
(4)实例:
1)[root@localhost xinetd.d]# telnet localhost 23 连接本地的主机,端口号为23
ftp
一、ftp的get命令和mget命令有何不同?
get一次只下载一个文件;mget一次可以下载多个文件,而且支持通配符,需要注意的是在mget的时侯,需要对每一个文件都选择y/n,如果想不交互的下载全部的文件,可以先用prompt命令关掉交互方式(关闭:prompt off;打开:prompt on)。
二、FTP使用什么命令来定位服务器与本地硬盘的路径?
ftp中用lcd切换本地路径,用cd切换远程服务器的路径。常用到的命令如下:
cd目录名(进入服务器目录) lcd目录名(进入本机目录)
cd \(退到服务器根目录) lcd \(退到本机根目录)
cd ..(退回到上一级目录) lcd ..(退回到上一级目录)
三、!命令有何作用?
执行本地shell命令,如:!dir(显示本机当亲目录内容),如果不加!如:dir(显示服务器当前目录内容)
四、ftp命令支持“含有空格”的文件夹/文件名吗?
支持,只要在引用时加上双引号“”即可!
五、下面是命令行方式使用FTP的实战练习
假设有一ftp服务器:ftp.test.com,用户名:username,密码:user1234。在本地电脑D:盘创建一个文件夹“qint”。将要上传的文件复制到D:\qint里。通过FTP命令将文件从本地上传,从服务器下载的步骤如下:
1、“开始”→“运行”→输入“FTP”
2、open ftp.test.com
注意:这一步可以与第一步合并,在“运行”里直接输入:ftp ftp.test.com。如果你的FTP服务器不是用的21默认端口,假如端口是2121,那么此步的命令应在后面空格加2121,即“open ftp.test.com
3、username 注意:提示你输入用户名
4、user1234 注意:提示你输入密码,密码不回显,打完密码后回车即可。如果你的密码输入错误,将不会提示你重新输入,这时你要键入“user”命令,将会出现第三步,你可以重新输入用户名和密码。
5、dir 注意:你成功登陆后就可以用dir查看命令查看FTP服务器中的文件及目录,用ls命令只可以查看文件。
6、mkdir qint 注意:在FTP服务器上根目录下建立qint目录
7、cd qint 注意:进入目录qint,用“cd 你的目录名”可以进入当前目录的下一级目录,这跟DOS一样。
8、bin
注意:采用二进制传输。如果你要上传下载,这一步很重要,不先执行这个命令,上传下载会很慢。大多数系统(包括UNIX系统)只有两种模式:文本模式和二进制模式。文本传输器使用ASCII字符,并由回车键和换行符分开,而二进制不用转换或格式化就可传字符,二进制模式比文本模式更快,并且可以传输所有ASCII值,所以系统管理员一般将FTP设置成二进制模式。一般来说,我们最好都用binary方式,这样可以保证不出错。
9、lcd d:\qint
注意:定位本地默认文件夹,在前面已事先在D:盘创建
10、!dir
注意:查看本地文件夹中的文件及目录
11、put i001.jpg 注意:将当前目录(d:\qint)中的文件i001.jpg上传到FTP服务器默认目录。可以用“mput *.*”将所有文件上传到FTP服务器上。
12、get d123.jpg 注意:将FTP服务器默认目录中的文件d123.jpg下载到当前目录下(d:\qint)。可以用“mget *.*”将所有文件下载到d:\qint
13、delete *.*
注意:删除服务器对应目录qint中的所有文件。
14、cd ..
注意:返回至上一级目录,即根目录。返回上一级目录用“cd ..”要注意,中间有空格。返回根目录用“cd \”。
15、mrdir qint
注意:删除目录qint。删除目录,在此目录下不能有文件及目录,不然将无法删除。
16、bye
注意:退出FTP服务器。
上传下载时特别要注意服务器及本地电脑的当前目录,文件是从哪里到哪里的问题。查看FTP服务器的当前目录命令为pwd,可以用cd命令定位服务器的目录。可以用lcd命令定位本地电脑的目录。
以上实例应用到了采用FTP命令行方式上传下载的最常用命令,你还可以用命令“?”查看更多的命令。
9、服务命令:
httpd
参数说明:
1、查看nginx进程
1
ps -ef|grep nginx
说明:nginx的进程由主进程和工作进程组成。
www.2cto.com
2、启动nginx
1
nginx
启动结果显示nginx的主线程和工作线程,工作线程的数量跟nginx.conf中的配置参数worker_processes有关。
3、平滑启动nginx
1
kill -HUP `cat /var/run/nginx.pid`
2
或者
3
nginx -s reload
其中进程文件路径在配置文件nginx.conf中可以找到。
平滑启动的意思是在不停止nginx的情况下,重启nginx,重新加载配置文件,启动新的工作线程,完美停止旧的工作线程。
2. /ect/init.d/MySQL start (前面为mysql的安装路径)
1.mysqladmin restart 2./ect/init.d/mysql restart (前面为mysql的安装路径)
1.mysqladmin shutdown 2./ect/init.d/mysql shutdown (前面为mysql的安装路径)
1.进入目录mysql\bin,再键入命令mysql -uroot -p, 回车后提示输入密码。 2.退出mysql命令:exit(回车)
1.mysqladmin -u用户名 -p旧密码 password 新密码 2.或进入mysql命令行SET PASSWORD FOR root=PASSWORD("root");
1.grant select on 数据库.* to 用户名@登录主机 identified by "密码" 2.如增加一个用户test密码为123,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入mysql,然后键入以下命令: 3.grant select,insert,update,delete on *.* to " Identified by "123";
必须首先登录到mysql中,有关操作都是在mysql的提示符下进行,而且每个命令以分号结束 1、显示数据库列表。
show databases;
2、显示库中的数据表:
use mysql; //打开库show tables;
3、显示数据表的结构:
describe 表名;
4、建库是设置好字符编码:
create database 库名 character set utf-8;
5、建表:
use 库名;create table 表名(字段设定列表);
6、删库和删表:
drop database 库名;drop table 表名;
7、将表中记录清空:
delete from 表名;
8、显示表中的记录:
select * from 表名;
9、编码的修改
如果要改变整个mysql的编码格式:启动mysql的时候,mysqld_safe命令行加入--default-character-set=gbk如果要改变某个库的编码格式:在mysql提示符后输入命令alter database db_name default character set gbk;
1、文本数据转到数据库中
文本数据应符合的格式:字段数据之间用tab键隔开,null值用来代替。例: name duty 2006-11-23
数据传入命令 load data local infile "文件名" into table 表名; 2、导出数据库和表
mysqldump --opt news > news.sql(将数据库news中的所有表备份到news.sql文件,news.sql是一个文本文件,文件名任取。)mysqldump --opt news author article > author.article.sql(将数据库news中的author表和article表备份到author.article.sql文件, author.article.sql是一个文本文件,文件名任取。)mysqldump --databases db1 db2 > news.sql(将数据库dbl和db2备份到news.sql文件,news.sql是一个文本文件,文件名任取。)mysqldump -h host -u user -p pass --databases dbname > file.dump就是把host上的以名字user,口令pass的数据库dbname导入到文件file.dump中mysqldump --all-databases > all-databases.sql(将所有数据库备份到all-databases.sql文件,all-databases.sql是一个文本文件,文件名任取。)
3、导入数据
mysql < all-databases.sql(导入数据库)mysql>source news.sql;(在mysql命令下执行,可导入表)
一、格式: mysql -h主机地址 -u用户名 -p用户密码
1、例1:连接到本机上的MYSQL。
首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql>。
2、例2:连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:
mysql -h110.110.110.110 -uroot -pabcd123(注:u与root可以不用加空格,其它也一样)
3、退出MYSQL命令: exit (回车)。二、修改密码
格式:mysqladmin -u用户名 -p旧密码 password 新密码
1、例1:给root加个密码ab12。首先在DOS下进入目录mysqlbin,然后键入以下命令:
mysqladmin -uroot -password ab12
注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。 2、例2:再将root的密码改为djg345。
mysqladmin -uroot -pab12 password djg345
格式:grant select on 数据库.* to 用户名@登录主机 identified by \"密码\"
例1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用 以root用户连入MySQL,然后键入以下命令:
grant select,insert,update,delete on *.* to test1@\"%\" Identified by \"abc\";但例1增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的MySQL数据库并对你的数据可以为所欲为了,解决办法见例2。
例2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MySQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MySQL主机上的web页来访问。grant select,insert,update,delete on mydb.* to test2@localhost identified by \"abc\";如果你不想test2有密码,可以再打一个命令将密码消掉。grant select,insert,update,delete on mydb.* to test2@localhost identified by \"\";在上面讲了登录、增加用户、密码更改等问题。下面我们来看看MySQL中有关数据库方面的操作。注意:你必须首先登录到MySQL中,以下操作都是在MySQL的提示符下进行的,而且每个命令以分号结束。
1、如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就完成。2、你可以使用光标上下键调出以前的命令。但以前我用过的一个MySQL旧版本不支持。我现在用的是mysql-3.23.27-beta-win。
1、显示数据库列表:show databases;刚开始时才两个数据库:mysql和test。MySQL库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。2、显示库中的数据表:use mysql; //打开库,学过FOXBASE的一定不会陌生吧show tables;3、显示数据表的结构:describe 表名;4、建库:create database 库名;5、建表:use 库名;create table 表名 (字段设定列表);6、删库和删表:drop database 库名;drop table 表名;7、将表中记录清空:delete from 表名;8、显示表中的记录:select * from 表名;
六、一个建库和建表以及插入数据的实例
drop database if exists school; //如果存在SCHOOL则删除 create database school; //建立库SCHOOL use school; //打开库SCHOOL create table teacher //建立表TEACHER ( id int(3) auto_increment not null primary key, name char(10) not null, address varchar(50) default ’深圳’, year date ); //建表结束 //以下为插入字段 insert into teacher values(’’,’glchengang’,’深圳一中’,’1976-10-10’); insert into teacher values(’’,’jack’,’深圳一中’,’1975-12-23’); 注:在建表中(1)将ID设为长度为3的数字字段:int(3)并让它每个记录自动加一:auto_increment并不能为空:not null而且让他成为主字段primary key(2)将NAME设为长度为10的字符字段(3)将ADDRESS设为长度50的字符字段,而且缺省值为深圳。varchar和char有什么区别呢,只有等以后的文章再说了。(4)将YEAR设为日期字段。 如果你在MySQL提示符键入上面的命令也可以,但不方便调试。你可以将以上命令原样写入一个文本文件中假设为school.sql,然后复制到c:\\下,并在DOS状态进入目录\\mysql\\bin,然后键入以下命令: mysql -uroot -p密码 < c:\\school.sql 如果成功,空出一行无任何显示;如有错误,会有提示。(以上命令已经调试,你只要将//的注释去掉即可使用)。
1、文本数据应符合的格式:字段数据之间用tab键隔开,null值用\\n来代替。 例:
3 rose 深圳二中 1976-10-104 mike 深圳一中 1975-12-23
2、数据传入命令 load data local infile \"文件名\" into table 表名。
注意:你最好将文件复制到\\mysql\\bin目录下,并且要先用use命令打表所在的库。五、备份数据库:
1、mysqldump --opt school>school.bbbmysqldump --opt school>school.bbb(命令在DOS的\\mysql\\bin目录下执行)注释:将数据库school备份到school.bbb文件,school.bbb是一个文本文件,文件名任取,打开看看你会有新发现。后记:其实MySQL的对数据库的操作与其它的SQL类数据库大同小异,您最好找本将SQL的书看看。我在这里只介绍一些基本的,其实我也就只懂这些了,呵呵。最好的MYSQL教程还是“晏子“译的“MYSQL中文参考手册“不仅免费每个相关网站都有下载,而且它是最权威的。可惜不是象\"PHP4中文手册\"那样是chm的格式,在查找函数命令的时候不太方便。2、修改登录密码1) mysqladmin -u用户名 -p旧密码 password 新密码:例:mysqladmin -u root password 21century注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。2)直接修改user表的root用户口令:mysql> user mysql;mysql> update user set pasword=password(‘21century‘) where user=‘root‘;mysql> flush privileges;注:flush privileges的意思是强制刷新内存授权表,否则用的还是缓冲中的口令。3、测试密码是否修改成功:1)不用密码登录:[root@test1 local]# mysqlERROR 1045: Access denied for user: ‘root@localhost‘ (Using password: NO)显示错误,说明密码已经修改。2)用修改后的密码登录:[root@test1 local]# mysql -u root -pEnter password: (输入修改后的密码21century)Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 177 to server version: 3.23.48Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the buffer.mysql>成功!这是通过mysqladmin命令修改口令,也可通过修改库来更改口令。
4、启动和停止:
启动:Mysql从3.23.15版本开始作了改动,默认安装后服务要用MySQL用户来启动,不允许root用户启动。如果非要用root用户来启动,必须加上--user=root参数(./safe_mysqld --user=root &)停止:mysqladmin -u root -p shutdown。
5、导出meeting数据库:
mysqldump -uroot -p21century meeting > db_meeting.sql导人dbname数据库:mysqldump -uroot -p21century dbname < xxx.sql导入数据库还可用类似于oracle中@my_script.sql的方式一次执行大量sql语句,这在使用mysqldump不起作用时非常有用。例:#./mysql -uroot -p < /home/xuys/db_meeting_2003.sql(注:create database、use databasename、create table和insert into语句都可写在上面的脚步文件中)
6、给表改名:
RENAME TABLE ztemp TO ztemp4;
7、修改字段属性:
ALTER TABLE bbabase CHANGE news_id id VARCHAR(5) NOT NULL;
8、在表中的content后增加一字段:
ALTER TABLE bbabase ADD leave_time DATETIME NOT NULL AFTER
linux查看日志文件内容命令tail、cat、tac、head、echo
tail -f test.log 你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C,
--------------------------- linux 如何显示一个文件的某几行(中间几行)
从第3000行开始,显示1000行。即显示3000~3999行 cat filename | tail -n +3000 | head -n 1000
显示1000行到3000行 cat filename| head -n 3000 | tail -n +1000
*注意两种方法的顺序 分解: tail -n 1000:显示最后1000行 tail -n +1000:从1000行开始显示,显示1000行以后的 head -n 1000:显示前面1000行
用sed命令 sed -n ‘5,10p‘ filename 这样你就可以只查看文件的第5行到第10行。
例:cat mylog.log | tail -n 1000 #输出mylog.log 文件最后一千行
--------------------------- cat主要有三大功能: 1.一次显示整个文件。$ cat filename 2.从键盘创建一个文件。$ cat > filename 只能创建新文件,不能编辑已有文件. 3.将几个文件合并为一个文件: $cat file1 file2 > file 参数: -n 或 --number 由 1 开始对所有输出的行数编号 -b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号 -s 或 --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行 -v 或 --show-nonprinting 例: 把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里 cat -n textfile1 > textfile2
把 textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到 textfile3 里。 cat -b textfile1 textfile2 >> textfile3
把test.txt文件扔进垃圾箱,赋空值test.txt cat /dev/null > /etc/test.txt 注意:>意思是创建,>>是追加。千万不要弄混了。 ------------------------------------------ tac (反向列示) tac 是将 cat 反写过来,所以他的功能就跟 cat 相反, cat 是由第一行到最后一行连续显示在萤幕上, 而 tac 则是由最后一行到第一行反向在萤幕上显示出来!
------------------------------------------ 在Linux中echo命令用来在标准输出上显示一段字符,比如: echo "the echo command test!"
这个就会输出“the echo command test!”这一行文字!
echo "the echo command test!">a.sh 这个就会在a.sh文件中输出“the echo command test!”这一行文字! 该命令的一般格式为: echo [ -n ] 字符串其中选项n表示输出文字后不换行;字符串能加引号,也能不加引号。 用echo命令输出加引号的字符串时,将字符串原样输出; 用echo命令输出不加引号的字符串时,将字符串中的各个单词作为字符串输出,各字符串之间用一个空格分割。
1、利用Mysqldump+二进制日志实现备份 2、利用LVM快照+二进制日志实现备份 3、使用Xtrabackup备份
一:实验环境介绍:
系统介绍:CentOS6.4_X64 数据库版本:mysql-5.5.33
二:基于Mysqldump命令实现备份恢复
2.1、思路概念
Mysqldump是一个逻辑备份命令;意思就是将数据库中的数据备份成一个文本文件;也可以说是将表的结构和数据存储在文本文件中。
Mysqldump命令的工作原理很简单,它先查出需要备份的表的结构,再在文本文件中生成一个CREATE语句。然后,将表中的所有记录转换为一条INSTERT语句。这些CREATE语句和INSTERT语句都是还原时使用的。还原数据时就可以使用其中的CREATE语句来创建表。使用其中的INSERT语句来还原数据。它可以实现整个服务器备份,也可以实现单个或部分数据库、单个或部分表、表中的某些行、存储过程、存储函数、触发器的备份;并且能自动记录备份时刻的二进制日志文件及相应的位置。对于InnoDB存储引擎来讲支持基于单事务模式实现热备,对于MyISAM则最多支持温备。
2.2、备份策略
Mysqldump全备+二进制日志增备
2.3、过程实现
(1)Mysqldump全备 由于Mysql数据库默认的为MyISAM存储引擎所以只有使用温备(备份同时仅支持读请求)进行,所以我们要为所有数据库添加读锁
1
2
|
[root@stu18 ~] #mysqldump -uroot -pmypass --lock-all-tables --master-data=2 --events --routines--all-databases > /zhao/database_`date +%F`.sql |
解析:–lock-all-tables表示为所有表施加读锁;–master-data=2表示在备份文件中记录当前二进制日志的位置;–events表示备份数据的同时备份时间调度器代码;–routines表示备份数据的同时备份存储过程和存储函数;–all-databases表示备份所有库。
1
2
3
4
5
6
7
8
9
10
11
12
|
[root@stu18 zhao] # less database_2013-08-13.sql -- #表示注释项 -- Position to start replication or point- in - time recovery from -- -- CHANGE MASTER TO MASTER_LOG_FILE= ‘mysql-bin.000001‘ , MASTER_LOG_POS=14203; #这里表示当前处于mysql-bin.000001这个二进制日志中,事件为14203这是通过--master-data=2产生的 -- -- Current Database: `hellodb` -- CREATE DATABASE /*!32312 IF NOT EXISTS*/ `hellodb` /*!40100 DEFAULT CHARACTER SET utf8 */; |
(2)二进制全备
方法一: 导出二进制日志文件内容
1
2
|
[root@stu18 data] # mysqlbinlog mysql-bin.000001 >/zhao/binlog_`date +%F`.sql |
方法二:滚动日志复制文件
1
2
3
4
|
mysql> flush logs; #滚动日志 [root@stu18 data] # cp mysql-bin.000001 /zhao/mysql-bin.000001 #复制导出二进制文件 |
(3)二进制增备 首先添加数据信息
1
2
|
mysql> use hellodb; mysql> INSERT INTO students(Name,Age,Gender,ClassID,TeacherID) values ( ‘Yang kang‘ ,22, ‘M‘ ,3,3); |
然后二进制增备
1
2
|
[root@stu18 data] # mysqlbinlog --start-position=14203 --stop-position=14527 mysql-bin.000001 > /zhao/binlog_`date +%F_%H`.sql |
解析:–start-position=14203是上次全备之后的二进制事件位置;–stop-position=14527最近一天的二进制事件位置。
2.4、模拟数据库损坏,实现恢复工作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
mysql> DROP DATABASE hellodb; #删除数据库 ############下面这些过程要在离线状态下执行############ mysql> SET sql_log_bin=0; #先关闭二进制日志 mysql> flush logs; #滚动日志 [root@stu18 ~] # mysql -uroot -pmypass < /zhao/database_2013-08-13.sql #导入数据库备份文件 [root@stu18 ~] # mysql -uroot -pmypass < /zhao/binlog_2013-08-13_19.sql #导入增量备份文件 [root@stu18 ~] # mysql -uroot –pmypass #登录查看,恢复完成 mysql> SET sql_log_bin=1; |
这种备份方式恢复简单,但是恢复还原之后索引会出现错误需要重建,而且备份结果会占据很大的空间,请酌情使用。
PS:mysqldump常用命令小结 备份MySQL数据库的命令
1
|
mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql |
备份MySQL数据库为带删除表的格式
备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。
1
|
mysqldump -–add-drop-table -uusername -ppassword databasename > backupfile.sql |
直接将MySQL数据库压缩备份
1
|
mysqldump -hhostname -uusername -ppassword databasename | gzip > backupfile.sql.gz |
备份MySQL数据库某个(些)表
1
|
mysqldump -hhostname -uusername -ppassword databasename specific_table1 specific_table2 > backupfile.sql |
同时备份多个MySQL数据库
1
|
mysqldump -hhostname -uusername -ppassword –databases databasename1 databasename2 databasename3 > multibackupfile.sql |
仅仅备份数据库结构
1
|
mysqldump –no-data –databases databasename1 databasename2 databasename3 > structurebackupfile.sql |
备份服务器上所有数据库
1
|
mysqldump –all-databases > allbackupfile.sql |
还原MySQL数据库的命令
1
|
mysql -hhostname -uusername -ppassword databasename < backupfile.sql |
还原压缩的MySQL数据库
1
|
gunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename |
将数据库转移到新服务器
1
|
mysqldump -uusername -ppassword databasename | mysql –host=*.*.*.* -C databasename |
三、基于LVM快照实现备份恢复
3.1、思路明细
(1)LVM这种备份方式要求Mysql的数据保存在逻辑卷上 (2)需要给Mysql服务器施加读锁(mysql>FLUSH TABLES WITH READLOCK;),这里不可直接退出服务器 (3)另起终端为数据所在的卷创建快照(lvcreate),保证事务日志和数据文件必须在同一卷上(分别创建可能会导致数据文件和事务日志不一致,从而可能导致无法正常恢复)
3.2、备份策略
LVM快照全备+二进制日志增备(对于即时点恢复还要恢复至后续的二进制位置)
3.3、前提条件
(1)创建逻辑卷及挂载逻辑卷,此过程在此就不做演示了
(2)初始化mysql将其数据目录指向/mydata/data
1
2
3
4
|
[root@stu18 ~] # cd /usr/local/mysql/ [root@stu18 mysql] # scripts/mysql_install_db --user=mysql --datadir=/mydata/data |
(3)编辑查看配置文件,重启服务
1
2
3
4
5
6
7
8
|
[root@stu18 mysql] # vim /etc/my.cnf datadir = /mydata/data #查看此项是否定义数据目录位置 sync_binlog=1 #添加此项,每个事务提交时候,把事务日志从缓存区写到日志文件中,并且刷新日志文件的数据到磁盘上; [root@stu18 mysql] # service mysqld start |
3.4、过程展示
(1)确保事务日志和数据文件必须在同一卷上
1
2
3
4
5
6
|
[root@stu18 ~] # ls /mydata/data/ hellodb myclass mysql-bin.000003 stu18.magedu.com.err ibdata1 mysql mysql-bin.000004 stu18.magedu.com.pid ib_logfile0 mysql-bin.000001 mysql-bin.index student ib_logfile1 mysql-bin.000002 performance_schema test |
解析:其中ib_logfile0与ib_logfile1是日志文件 (2)施加全局锁并滚动日志
1
2
|
mysql> FLUSH TABLES WITH READ LOCK; mysql> FLUSH LOGS; |
(3)查看并保存当前正在使用的二进制日志及当前执行二进制日志位置(非常重要)
1
2
3
4
5
6
7
8
|
mysql> SHOW MASTER STATUS; + ------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | + ------------------+----------+--------------+------------------+ | mysql-bin.000004 | 187 | | | + ------------------+----------+--------------+------------------+ [root@stu18 zhao] # mysql -uroot -pmypass -e ‘SHOW MASTER STATUS;‘ >/zhao/lvmback-2013-08-14/binlog.txt |
(4)创建快照卷
1
2
|
[root@stu18 zhao] # lvcreate -L 100M -s -p r -n mydata-lvm /dev/vg1/mydata |
(5)立即切换终端释放锁
1
|
mysql> UNLOCK TABLES; |
(6)备份数据
1
2
|
[root@stu18 data] # cp -a * /zhao/lvmback-2013-08-14/ |
(7)二进制实现增量备份
1
2
3
4
5
6
7
8
9
10
11
|
mysql> use hellodb; #指定默认数据库 Database changed mysql> CREATE TABLE testtb (id int , name CHAR (10)); #创建表 Query OK, 0 rows affected (0.35 sec) mysql> INSERT INTO testtb VALUES (1, ‘tom‘ ); #添加数据 Query OK, 1 row affected (0.09 sec) [root@stu18 data] # mysqlbinlog --start-position=187 mysql-bin.000004 > /zhao/lvmlogbin_2013-08-14/binlog.sql #日志实现增量备份 |
(8)模拟数据库崩溃
1
2
3
4
5
6
|
[root@stu18 ~] # service mysqld stop [root@stu18 ~] # cd /mydata/data/ [root@stu18 data] # rm -rf * |
(9)恢复数据
1
2
3
4
5
6
7
8
9
10
|
[root@stu18 ~] # cp /zhao/lvmback-2013-08-14/* /mydata/data/ -a #完全备份恢复 [root@stu18 ~] # cd /mydata/data/ #查看恢复数据内容 [root@stu18 data] # chown -R mysql.mysql * #更改属主属组 [root@stu18 data] # service mysqld start #启动服务 [root@stu18 data] # mysql -uroot –pmypass #登录测试 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
mysql> SHOW DATABASES; #查看数据完整性,无测试表testtd使用二进制恢复 mysql> SET sql_log_bin=0 #关闭二进制日志 mysql> source /zhao/lvmlogbin_2013-08-14/binlog.sql; #二进制恢复 mysql> SHOW TABLES; #查看恢复结果 + -------------------+ | Tables_in_hellodb | + -------------------+ | classes | | coc | | courses | | scores | | students | | teachers | | testtb | | toc | + -------------------+ mysql> SET sql_log_bin=1; #开启二进制日志 |
此工具是接近于热备的方式实现的,并且用此方法来备份恢复数据速度是非常快的。
将远程服务器上的文件复制到本机
#scp remote@www.abc.com:/usr/local/sin.sh /home/administrator
remote 通过remote用户登录到远程服务器(也可以使用其他拥有同等权限的用户) www.abc.com 远程服务器的域名(当然也可以使用该服务器ip地址) /usr/local/sin.sh 欲复制到本机的位于远程服务器上的文件 /home/administrator 将远程文件复制到本地的绝对路径
注意两点: 1.如果远程服务器防火墙有特殊限制,scp便要走特殊端口,具体用什么端口视情况而定,命令格式如下: #scp -p 4588 remote@www.abc.com:/usr/local/sin.sh
将本机文件复制到远程服务器上
#scp /home/administrator/news.txt root@192.168.6.129:/etc/squid
/home/administrator/ 本地文件的绝对路径 news.txt 要复制到服务器上的本地文件 root 通过root用户登录到远程服务器(也可以使用其他拥有同等权限的用户) 192.168.6.129 远程服务器的ip地址(也可以使用域名或机器名) /etc/squid 将本地文件复制到位于远程服务器上的路径
标签:交换分区 ports 内存 软件包管理 文章 建议 lvm files nfs
原文地址:http://www.cnblogs.com/zhouguangliang/p/6383941.html